TimeBack OneRoster 1EdTech surface

Import rosters, sync collections, and prove every field back to the source.

This is the customer-facing specification for the OneRoster 1EdTech implementation URL. It is generated from the approved architecture and data dictionary, preserves OneRoster 1.2 CSV Binding vocabulary, publishes the full architecture-pinned route family, and labels TimeBack platform projection behavior instead of claiming official REST certification.

OneRoster 1.2 CSV Binding 1.2.1 TimeBack platform projection 22 CSV files 22 list routes 144 endpoint cards 240 allowed-value rows

Quickstart

Run the demo flow cold, then use the same contract in prod.

The implementation has one tenant-scoped canonical base URL. The public demo tenant is tenantId=demo on that same deployment; real tenants use operator-minted JWTs against the same $BASE_URL. The snippets below bind BASE_URL to the approved live implementation URL before they call the API.

Base URL

Use $BASE_URL for demo and real-tenant calls. The value already includes the /oneroster/1edtech/implementation/api mount; do not append another /api or switch to a second deployment path.

export BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"

Real-tenant credential

There is no public token mint endpoint for real tenants. The driver or operator mints scoped reviewer and customer tokens out-of-band, then clients call the same $BASE_URL.

: "${ONEROSTER_REVIEWER_JWT:?set by driver after implementation deploy}"
export REVIEWER_TOKEN="$ONEROSTER_REVIEWER_JWT"

Demo credentials

POST /dev/mint?tenantId=demo is public and restricted at the handler to the demo tenant. The live deployment also serves POST /demo-token?tenantId=demo as a compatibility alias because current validation Problems cite it; use /dev/mint in new clients. Any other tenantId is rejected; real-tenant token minting stays out-of-band by design.

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
export TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
1

Read a roster collection

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/orgs" \
  -H "Authorization: Bearer $TOKEN"
2

Import a package when you are ready to test writes

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/imports/csv" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: import-demo-001" \
  -F "package=@oneroster-demo.zip;type=application/zip"
3

Run the real-tenant smoke check with the reviewer token

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
REVIEWER_TOKEN="${ONEROSTER_REVIEWER_JWT:?set by driver after implementation deploy}"
curl -fsS "$BASE_URL/academicSessions" \
  -H "Authorization: Bearer $REVIEWER_TOKEN"
No official certification claim: this page specifies a TimeBack platform projection over the pinned OneRoster 1.2 CSV Binding. It preserves OneRoster source vocabulary and links every gap fill to architecture ITDs, but it does not claim an executed 1EdTech REST certification suite. See OITD-010.

Authentication

Bearer JWTs define tenant scope; query parameters do not.

All routes except the demo-token mint paths POST /dev/mint?tenantId=demo and POST /demo-token?tenantId=demo require Authorization: Bearer <jwt>. Tokens are HS256 signed with PLATFORM_JWT_SIGNING_SECRET and follow platform PITD-005 plus OneRoster OITD-011.

Required JWT claims
ClaimRequiredTypeMeaning and constraintsTrace
iss Yes string Identifies the TimeBack issuer that signed the token. Must match the platform issuer accepted for this deployment. OITD-011-AUTH-DEMO-PROD
sub Yes string Identifies the authenticated subject. Must be stable enough for audit correlation without leaking unnecessary PII. OITD-011-AUTH-DEMO-PROD
iat Yes NumericDate Token issued-at time. Reject tokens outside accepted clock-skew policy. OITD-011-AUTH-DEMO-PROD
exp Yes NumericDate Token expiration time. Expired tokens return oneroster:authentication_required. OITD-011-AUTH-DEMO-PROD
tenant_id Yes on tenant-scoped routes uuid Selects the platform.tenant row that owns every OneRoster read or write. This snake_case claim is the canonical platform claim; tenantId is not the required contract. OITD-011-AUTH-DEMO-PROD
role / roles / scopes Required for privileged operations string or string[] Authorizes operation families such as reader, writer, reviewer, service, import, export, or administration. Relationship visibility still requires scoped claims where role alone is too broad. OITD-011-AUTH-DEMO-PROD
agentOf Conditional array of user sourcedIds Limits a parent, guardian, or agent token to the students it may see. Every listed sourcedId is tenant-scoped and must point to oneroster.users. OITD-106-AUTH-SHAPE
schoolSourcedIds[] Conditional array of org sourcedIds Limits school-scoped users to permitted school orgs. Each value must identify an oneroster.orgs row whose type is school in the same tenant. OITD-106-AUTH-SHAPE
classSourcedIds[] Conditional array of class sourcedIds Limits class-scoped users to permitted classes. Each value must identify an oneroster.classes row in the same tenant. OITD-106-AUTH-SHAPE
HTTP headers
HeaderRequiredTypeMeaning and constraintsTrace
Authorization Yes except demo token mint Bearer JWT Authenticates the caller and binds ordinary OneRoster routes to the token's tenant_id claim. JWTs must include iss, sub, iat, exp, tenant_id, plus role/roles/scopes for privileged operations. OITD-011-AUTH-DEMO-PROD
Idempotency-Key Required on retryable writes ASCII string, 1 to 128 characters Scopes replay protection for imports, exports, and per-resource writes through platform.idempotency_key. Same key plus different request hash returns an idempotency conflict; reuse the same key while backing off a retryable write. OITD-012-IDEMPOTENCY-CONCURRENCY
ETag Returned on per-resource reads that can later be overwritten HTTP entity tag Validator a client stores before attempting an update or delete. Import/export commands do not use ETag because they create batch evidence instead of overwriting a user-editable resource. OITD-012-IDEMPOTENCY-CONCURRENCY
If-Match Required on per-resource update/delete routes HTTP entity tag Prevents lost updates by requiring the caller's validator to match the current resource. Missing precondition returns 428; stale validators return 412 or a documented 409 conflict family. OITD-012-IDEMPOTENCY-CONCURRENCY
Retry-After Returned when capacity protection emits 429 HTTP delay or date Tells clients when to retry after oneroster:rate_limited. For retryable writes, retry with the same Idempotency-Key after the delay. OITD-016-OPERATIONAL-POSTURE

Tenant isolation

The API ignores tenant query strings for authorization. The verified tenant_id claim selects tenant-owned rows and batch evidence.

OITD-005 · OITD-109 · platform.tenant

Scoped views

Parent, student, teacher, and school clients use agentOf, schoolSourcedIds[], and classSourcedIds[] so a broad role is not the only authorization primitive.

OITD-106

PII containment

OneRoster user, demographic, enrollment, role, result, and relationship data may contain direct PII. It is accepted only because the source spec defines it and it never appears in public examples, Problems, logs, or audit metadata.

OITD-014

Errors

Every failure returns redacted Problem JSON.

Errors use the shared platform Problem envelope with OneRoster namespaced branch keys. Raw CSV rows, names, contacts, identifiers, demographics, JWTs, and package payloads are never echoed in public errors.

Current live code namespace: Current live deployment: Problem code values use the OITD-108 oneroster: namespace, such as oneroster:authentication_required, oneroster:validation_failed, oneroster:unsupported_parameter, oneroster:method_not_allowed, and oneroster:not_found. Branch your client on the namespaced codes in the table below; they are TimeBack platform projections, not an official 1EdTech certification claim.
HTTP statuses
StatusFailureWhen it happensTrace
200 Read succeeded Collection reads, batch inspection, and demo token mint succeeded. OITD-010
202 Write accepted CSV import/export request accepted and batch evidence was created. OITD-006
400 Malformed request Missing required headers, invalid import/export body shape, invalid export mode, unsupported demo-token tenant selector, unknown query parameters, or invalid query controls. OITD-013
401 Missing or invalid token Authorization header is absent, malformed, expired, or signed with the wrong secret. OITD-011
403 Tenant or role denied The verified token lacks the tenant_id, role, roles, or scopes required for this route. OITD-011
404 Not found in tenant The requested batch or resource is not visible inside the caller's tenant scope. OITD-010
405 Method not allowed The path exists but the requested HTTP method is outside the published endpoint contract. OITD-010
409 Idempotency conflict A retry reused the same Idempotency-Key with a different request hash. OITD-012
415 Unsupported media type CSV import did not send application/zip multipart content. OITD-009
422 Source validation failed OneRoster headers, dependencies, required values, or allowed values failed strict validation. OITD-009
429 Rate limited Architecture target for capacity protection; honor Retry-After if the implementation emits it. OITD-016
500 Internal error Unexpected server failure. Problem detail remains redacted and support uses requestId/traceId. OITD-013
Response schema
FieldTypeRequiredDescriptionTrace
type URI string No Stable documentation URI for the problem family. OITD-013
title string Yes Short human-readable problem summary. OITD-013
status integer Yes HTTP status code repeated in the body for clients that only inspect JSON. OITD-013
code string Yes Machine-readable OneRoster branch key in the oneroster: namespace, for example oneroster:unsupported_parameter. OITD-013
detail string Yes Redacted explanation. It never includes raw roster PII, CSV row payloads, JWTs, or service secrets. OITD-013
requestId string Yes Correlation id returned to the caller and written into platform telemetry. OITD-013
traceId string Yes Trace id for support and audit triage. OITD-013
fieldErrors[] array When applicable Validation failures with redacted name and reason fields; no raw CSV rows, names, JWTs, or package payloads. OITD-013
docUrl string Server errors only Stable customer-doc link returned when a production failure needs operator triage. OITD-013
cause string Server errors only Redacted machine-readable cause such as postgres_configuration_missing; never a secret or raw SQL value. OITD-013
diagnostics object Server errors only Redacted public diagnostics for infrastructure triage. OITD-013
Problem codes and client branch guidance
CodeStatusClient behaviorTrace
oneroster:authentication_required 401 Refresh or mint a token, then retry with Authorization: Bearer <token>. OITD-108 target
oneroster:authorization_failed 403 Use a token whose role, roles, or scopes allow the route for this tenant. OITD-108 target
oneroster:validation_failed 400 Fix the named request field, body shape, invalid limit, malformed cursor, invalid modifiedSince, invalid filter, invalid sort, or demo-token tenant selector. OITD-108 target
oneroster:unsupported_parameter 400 Remove the unknown query parameter; supported list controls are filter, sort, limit, cursor, modifiedSince, tenantId, and tenant_id. OITD-108 target
oneroster:method_not_allowed 405 Switch to a method listed in the Allow header and in this endpoint card. OITD-108 target
oneroster:not_found 404 Treat the resource or batch id as missing in the caller's tenant scope; do not infer cross-tenant existence. OITD-108 target
oneroster:conflict 409 For idempotency conflicts, retry only with the original request body or choose a fresh Idempotency-Key. OITD-108 target
oneroster:precondition_required 428 Read the detail endpoint first and send If-Match before PUT, PATCH, or DELETE. OITD-108 target
oneroster:precondition_failed 412 Refetch the current row, re-apply the intended change, and retry with the new ETag. OITD-108 target
oneroster:unsupported_media_type 415 Send CSV imports as multipart/form-data with an application/zip package part. OITD-108 target
oneroster:source_validation_failed 422 Fix the OneRoster package headers, dependencies, required values, or allowed values. OITD-108 target
oneroster:server_error 500 Use requestId, traceId, docUrl, cause, and diagnostics for support; the detail stays redacted. OITD-108 target

Query and sync

Current live lists apply supported query controls and fail loud on unsupported ones.

Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. Valid filter, sort, limit, cursor, and modifiedSince controls are part of the OITD-103 contract. Tenant selection still comes from the verified JWT; tenantId and tenant_id query strings are ignored for authorization.

List query parameters
ParameterRequiredTypeMeaning and constraintsTrace
filter No string Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort No string Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit No integer Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor No opaque string Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince No ISO 8601 DateTime Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/users?limit=25&sort=sourcedId" \
  -H "Authorization: Bearer $TOKEN"
Runnable demo 400 probe:
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
HTTP_CODE=$(curl -sS -o /tmp/oneroster-unsupported.json -w "%{http_code}" "$BASE_URL/users?unknownParam=1" \
  -H "Authorization: Bearer $TOKEN")
test "$HTTP_CODE" = "400"
node -e 'const fs=require("fs"); const j=JSON.parse(fs.readFileSync("/tmp/oneroster-unsupported.json","utf8")); if (j.code !== "oneroster:unsupported_parameter") throw new Error(j.code); console.log(j.code)'
Runnable real-tenant 400 probe:
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
REVIEWER_TOKEN="${ONEROSTER_REVIEWER_JWT:?set by driver after implementation deploy}"
HTTP_CODE=$(curl -sS -o /tmp/oneroster-invalid-limit.json -w "%{http_code}" "$BASE_URL/users?limit=abc" \
  -H "Authorization: Bearer $REVIEWER_TOKEN")
test "$HTTP_CODE" = "400"
node -e 'const fs=require("fs"); const j=JSON.parse(fs.readFileSync("/tmp/oneroster-invalid-limit.json","utf8")); if (j.code !== "oneroster:validation_failed") throw new Error(j.code); console.log(j.code)'

Trace: OITD-103 OITD-107 OITD-108

Writes and concurrency

CSV writes and per-resource writes share retry protection.

The public contract includes CSV import/export, batch lookup, every collection list including /gradingPeriods, detail reads, documented sub-collections, and per-resource POST/PUT/PATCH/DELETE with ETag, If-Match, and Idempotency-Key controls. Bulk import/export writes do not overwrite an existing row, so they require Idempotency-Key but not If-Match. Per-resource updates and deletes require the caller to read the row first, store the returned ETag, then send that validator in If-Match.

CSV import/export

Import and export create batch evidence. They require Idempotency-Key, but they do not require If-Match because they do not overwrite a user-editable resource.

OITD-006 · OITD-105

Per-resource mutation

Architecture OITD-101 and OITD-104 require POST, PUT, PATCH, DELETE, ETag, and If-Match. Current live missing preconditions return oneroster:precondition_required; stale validators return oneroster:precondition_failed or oneroster:conflict.

OITD-101 · OITD-104

Capacity protection

The first surface inherits platform SLO targets, publishes no contractual SLA, publishes no hard per-tenant quota, and returns 429 plus Retry-After when capacity protection rejects a request.

OITD-016

Operational posture
ItemPublished contractTrace
Availability target99.5 percent monthly availability for customer APIsOITD-016
Read latency targetp95 read latency under 500 ms excluding large exportsOITD-016
Write latency targetp95 write latency under 2 s excluding documented asynchronous workOITD-016
SLA postureNo contractual SLA is published by the first OneRoster 1EdTech surface.OITD-016
Rate-limit postureNo hard per-tenant quota is published by the first OneRoster 1EdTech surface.OITD-016

Workflows

The contract supports import, read, sync, mutate, export, and audit jobs.

Import a source package

Submit a ZIP with manifest.csv, validate exact headers and allowed values, persist generated rows, and receive oneroster.import_batch evidence.

OITD-006 · OITD-009

Read and sync collections

Call collection lists such as /classes, /users, /academicSessions, and the virtual /gradingPeriods; then use detail and relationship routes to avoid overfetching. Current live query controls support filtering, sorting, paging, opaque cursors, and modifiedSince; unsupported or invalid controls fail with typed 400 Problems.

OITD-102 · OITD-103

Plan ordinary changes

Use per-resource POST for interactive creates and PUT, PATCH, or DELETE with If-Match for row-level updates. Use CSV import when the source system is sending an authoritative package.

OITD-101 · OITD-104

Export and audit

Create a tenant-scoped CSV package and retain export evidence with package hash, mode, source metadata, timestamps, and audit rows.

OITD-006 · OITD-013

Empty-tenant production bootstrap

Bring a tenant online with a dependency-safe package before daily writes.

A real tenant starts from a scoped token minted out-of-band by the platform. For an empty tenant, load a minimal bulk package first, verify the top collections, then export evidence that the tenant can round-trip through the same single deployment used by demo.

Bootstrap order
StepActionTrace
1Start with a tenant-scoped production token.OITD-017
2Prepare a bulk package with manifest.csv.OITD-017
3Author orgs.csv and academicSessions.csv first.OITD-017
4Add users.csv.OITD-017
5Add courses.csv, classes.csv, and enrollments.csv after their referenced orgs, users, and academic sessions exist.OITD-017
6Add optional demographics, resources, gradebook, and score files only after referenced rows exist.OITD-017
7POST the package to /imports/csv with Idempotency-Key.OITD-017
8Verify GET reads for orgs, users, academicSessions, courses, classes, and enrollments.OITD-017
9POST /exports/csv to produce evidence that the tenant can round-trip.OITD-017

Minimum files: manifest.csv orgs.csv academicSessions.csv users.csv courses.csv classes.csv enrollments.csv. The dependency-safe read verification calls /orgs, /users, /academicSessions, /courses, /classes, and /enrollments.

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
REVIEWER_TOKEN="${ONEROSTER_REVIEWER_JWT:?set by driver after implementation deploy}"
curl -fsS -X POST "$BASE_URL/imports/csv" \
  -H "Authorization: Bearer $REVIEWER_TOKEN" \
  -H "Idempotency-Key: bootstrap-minimal-001" \
  -F "package=@oneroster-bootstrap.zip;type=application/zip"
curl -fsS "$BASE_URL/orgs" \
  -H "Authorization: Bearer $REVIEWER_TOKEN"
curl -fsS -X POST "$BASE_URL/exports/csv" \
  -H "Authorization: Bearer $REVIEWER_TOKEN" \
  -H "Idempotency-Key: bootstrap-export-001" \
  -H "Content-Type: application/json" \
  --data '{"mode":"bulk"}'

Endpoint reference

Request and response schemas are inline on every endpoint.

Use the paths below relative to $BASE_URL, which every endpoint cURL block binds to the implementation URL. The base already includes the implementation mount and is the same URL for tenantId=demo and real tenants. Collection response rows use OneRoster CSV field names for source fields and _platform for tenant/import metadata. The rendered contract.json is generated from these cards and includes the full architecture-pinned route family.

Organization route: the collection is /orgs, not /organizations, because the approved OneRoster source file and data dictionary table are orgs.csv / oneroster.orgs. The generated contract file fails generation if /organizations appears as an endpoint.
Published route scope: The public contract includes CSV import/export, batch lookup, every collection list including /gradingPeriods, detail reads, documented sub-collections, and per-resource POST/PUT/PATCH/DELETE with ETag, If-Match, and Idempotency-Key controls. Detail and mutation routes use the same OneRoster sourcedId values returned by list routes. The controlling architecture decisions are OITD-102 OITD-101 OITD-104 OITD-112.

oneroster.demo.mint_token

Mint a demo token

Returns a short-lived demo JWT for tenantId=demo on the same deployment that serves real tenants, so a cold reader can try collection reads without an out-of-band credential. This is the canonical customer docs path.

#
Method
POST
Path
/dev/mint?tenantId=demo
Auth
No Authorization header; demo tenant only on the single implementation deployment
Status
200400405

Trace: OITD-011 OITD-015

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo"
Request schema
FieldLocationTypeRequiredDescriptionTrace
tenantId Query string Yes Demo tenant selector. It must be demo; missing or different values return a redacted 400 Problem. The canonical docs path is /dev/mint; the live deployment also serves /demo-token as a compatibility alias because validation Problems cite that path. OITD-011
body Body empty Yes No request body. Demo identity and roles are fixed by the implementation deployment. OITD-011
Response schema
FieldTypeRequiredDescriptionTrace
token string Yes Short-lived HS256 JWT accepted by the OneRoster demo API. OITD-011
tokenType string Yes Always Bearer. OITD-011
expiresIn integer Yes Seconds until the demo token expires. OITD-011
tenant_id string Yes Tenant scope embedded in the token. The public demo value is demo; real tenants use the operator-minted tenant identifier. platform.tenant.tenant_id
roles array<string> Yes Demo roles granted to the token. OITD-011

oneroster.demo.mint_token.alias

Mint a demo token with the compatibility alias

Compatibility alias served by the live deployment. New clients should prefer /dev/mint, but this alias is documented because current validation Problems point customers here.

#
Method
POST
Path
/demo-token?tenantId=demo
Auth
No Authorization header; demo tenant only on the single implementation deployment
Status
200400405

Trace: OITD-011 OITD-015

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
curl -fsS -X POST "$BASE_URL/demo-token?tenantId=demo"
Request schema
FieldLocationTypeRequiredDescriptionTrace
tenantId Query string Yes Demo tenant selector. It must be demo; missing or different values return a redacted 400 Problem. The canonical docs path is /dev/mint; the live deployment also serves /demo-token as a compatibility alias because validation Problems cite that path. OITD-011
body Body empty Yes No request body. Demo identity and roles are fixed by the implementation deployment. OITD-011
Response schema
FieldTypeRequiredDescriptionTrace
token string Yes Short-lived HS256 JWT accepted by the OneRoster demo API. OITD-011
tokenType string Yes Always Bearer. OITD-011
expiresIn integer Yes Seconds until the demo token expires. OITD-011
tenant_id string Yes Tenant scope embedded in the token. The public demo value is demo; real tenants use the operator-minted tenant identifier. platform.tenant.tenant_id
roles array<string> Yes Demo roles granted to the token. OITD-011

oneroster.import_csv_package

Import a OneRoster CSV package

Accepts a ZIP package containing manifest.csv and OneRoster CSV files, validates the package strictly, persists generated relational projections, and returns batch evidence.

#
Method
POST
Path
/imports/csv
Auth
Bearer JWT with tenant_id; write role/scope required
Status
202400401403409415422

Trace: OITD-006 OITD-009 OITD-010 OITD-011 OITD-012 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/imports/csv" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: import-demo-001" \
  -F "package=@oneroster-demo.zip;type=application/zip"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
package multipart/form-data application/zip Yes ZIP package with manifest.csv and the OneRoster CSV files declared by the manifest. Header order and allowed values are strict. OITD-009
Response schema
FieldTypeRequiredDescriptionTrace
batch object Yes OneRoster import/export evidence record. oneroster.import_batch
batch.batch_id text Yes Stable identifier for one OneRoster import or export evidence record. oneroster.import_batch.batch_id
batch.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.import_batch.tenant_id
batch.direction text Yes Whether this batch records a package entering the platform or a package produced by export. oneroster.import_batch.direction
batch.mode text Yes OneRoster package mode copied from manifest semantics: bulk is a full snapshot, delta is a change set. oneroster.import_batch.mode
batch.source_system_name text No Optional source.systemName from manifest.csv, stored with the batch so operators can identify the sender. oneroster.import_batch.source_system_name
batch.source_system_code text No Optional source.systemCode from manifest.csv, stored with the batch as a machine-readable sender code. oneroster.import_batch.source_system_code
batch.package_hash text Yes Cryptographic hash of the normalized package or exported payload used to prove which bytes were accepted or produced. oneroster.import_batch.package_hash
batch.manifest_version text Yes Manifest version copied from manifest.csv for this batch. oneroster.import_batch.manifest_version
batch.oneroster_version text Yes OneRoster version declared by the manifest for this batch. oneroster.import_batch.oneroster_version
batch.status text Yes Execution state of the import/export batch. oneroster.import_batch.status
batch.created_at timestamptz Yes Timestamp when the batch evidence row was created. oneroster.import_batch.created_at
batch.completed_at timestamptz No Timestamp when a batch reached a terminal state. oneroster.import_batch.completed_at

oneroster.import_batch.get

Inspect an import or export batch

Reads the evidence row for an import or export. Use this after an import to check status, manifest version, source system, package hash, and timestamps.

#
Method
GET
Path
/imports/{batch_id}
Auth
Bearer JWT with matching tenant_id
Status
200401403404

Trace: OITD-006 OITD-010 OITD-011

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
BATCH_ID="replace-with-batch-id-from-import-or-export"
curl -fsS "$BASE_URL/imports/$BATCH_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
batch_id Path text Yes The batch identifier returned by import or export. oneroster.import_batch.batch_id
Response schema
FieldTypeRequiredDescriptionTrace
batch object Yes OneRoster import/export evidence record. oneroster.import_batch
batch.batch_id text Yes Stable identifier for one OneRoster import or export evidence record. oneroster.import_batch.batch_id
batch.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.import_batch.tenant_id
batch.direction text Yes Whether this batch records a package entering the platform or a package produced by export. oneroster.import_batch.direction
batch.mode text Yes OneRoster package mode copied from manifest semantics: bulk is a full snapshot, delta is a change set. oneroster.import_batch.mode
batch.source_system_name text No Optional source.systemName from manifest.csv, stored with the batch so operators can identify the sender. oneroster.import_batch.source_system_name
batch.source_system_code text No Optional source.systemCode from manifest.csv, stored with the batch as a machine-readable sender code. oneroster.import_batch.source_system_code
batch.package_hash text Yes Cryptographic hash of the normalized package or exported payload used to prove which bytes were accepted or produced. oneroster.import_batch.package_hash
batch.manifest_version text Yes Manifest version copied from manifest.csv for this batch. oneroster.import_batch.manifest_version
batch.oneroster_version text Yes OneRoster version declared by the manifest for this batch. oneroster.import_batch.oneroster_version
batch.status text Yes Execution state of the import/export batch. oneroster.import_batch.status
batch.created_at timestamptz Yes Timestamp when the batch evidence row was created. oneroster.import_batch.created_at
batch.completed_at timestamptz No Timestamp when a batch reached a terminal state. oneroster.import_batch.completed_at

oneroster.export_csv_package

Export a tenant OneRoster CSV package

Creates an export evidence row and returns a tenant-scoped package descriptor. The exported CSV names and field names remain OneRoster vocabulary.

#
Method
POST
Path
/exports/csv
Auth
Bearer JWT with tenant_id; export role/scope required
Status
202400401403409422

Trace: OITD-006 OITD-010 OITD-011 OITD-012 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/exports/csv" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: export-demo-001" \
  -H "Content-Type: application/json" \
  --data '{"mode":"bulk"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
mode Body enum Yes Export mode. Use bulk for a full package or delta when the caller is intentionally exporting a change set. oneroster.import_batch.mode
Response schema
FieldTypeRequiredDescriptionTrace
batch object Yes OneRoster import/export evidence record. oneroster.import_batch
batch.batch_id text Yes Stable identifier for one OneRoster import or export evidence record. oneroster.import_batch.batch_id
batch.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.import_batch.tenant_id
batch.direction text Yes Whether this batch records a package entering the platform or a package produced by export. oneroster.import_batch.direction
batch.mode text Yes OneRoster package mode copied from manifest semantics: bulk is a full snapshot, delta is a change set. oneroster.import_batch.mode
batch.source_system_name text No Optional source.systemName from manifest.csv, stored with the batch so operators can identify the sender. oneroster.import_batch.source_system_name
batch.source_system_code text No Optional source.systemCode from manifest.csv, stored with the batch as a machine-readable sender code. oneroster.import_batch.source_system_code
batch.package_hash text Yes Cryptographic hash of the normalized package or exported payload used to prove which bytes were accepted or produced. oneroster.import_batch.package_hash
batch.manifest_version text Yes Manifest version copied from manifest.csv for this batch. oneroster.import_batch.manifest_version
batch.oneroster_version text Yes OneRoster version declared by the manifest for this batch. oneroster.import_batch.oneroster_version
batch.status text Yes Execution state of the import/export batch. oneroster.import_batch.status
batch.created_at timestamptz Yes Timestamp when the batch evidence row was created. oneroster.import_batch.created_at
batch.completed_at timestamptz No Timestamp when a batch reached a terminal state. oneroster.import_batch.completed_at
package.contentType string Yes Always application/zip for the first OneRoster export projection. OITD-010
package.files[] array<string> Yes CSV filenames included in the exported package. OITD-009

oneroster.academic_sessions.list

List Academic Sessions

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/academicSessions
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/academicSessions" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from academicSessions.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.academic_sessions
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
items[].title text Yes Name or title of the academic session. oneroster.academic_sessions.title
items[].type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
items[].startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
items[].endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
items[].parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
items[].schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.categories.list

List Categories

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/categories
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/categories" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from categories.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.categories
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.categories
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.categories.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.categories.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this categories row. oneroster.categories.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.categories.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.categories.date_last_modified
items[].title text Yes The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. oneroster.categories.title
items[].weight integer No Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2. oneroster.categories.weight

oneroster.classes.list

List Classes

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/classes
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/classes" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from classes.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.classes
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.classes
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.classes.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.classes.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
items[].title text Yes Name of this class. oneroster.classes.title
items[].grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
items[].courseSourcedId text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
items[].classCode text No Human readable code used to help identify this class. oneroster.classes.class_code
items[].classType text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
items[].location text No Human readable description of where the class is physically located. oneroster.classes.location
items[].schoolSourcedId text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
items[].termSourcedIds text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
items[].subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.classes.subjects
items[].subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.classes.subject_codes
items[].periods text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods

oneroster.class_resources.list

List Class Resources

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/classResources
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/classResources" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from classResources.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.class_resources
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.class_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.class_resources.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.class_resources.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this class resources row. oneroster.class_resources.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.class_resources.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.class_resources.date_last_modified
items[].title text No Name of the related class. oneroster.class_resources.title
items[].classSourcedId text Yes SourcedId of the reference Class. oneroster.class_resources.class_sourced_id
items[].resourceSourcedId text Yes SourcedId of the Resource associated with the Class. oneroster.class_resources.resource_sourced_id

oneroster.course_resources.list

List Course Resources

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/courseResources
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/courseResources" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from courseResources.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.course_resources
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.course_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.course_resources.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.course_resources.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this course resources row. oneroster.course_resources.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.course_resources.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.course_resources.date_last_modified
items[].title text No Name of the related class. oneroster.course_resources.title
items[].courseSourcedId text Yes SourcedId of the reference Course. oneroster.course_resources.course_sourced_id
items[].resourceSourcedId text Yes SourcedId of the Resource associated with the Course. oneroster.course_resources.resource_sourced_id

oneroster.courses.list

List Courses

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/courses
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/courses" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from courses.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.courses
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.courses
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.courses.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.courses.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this courses row. oneroster.courses.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.courses.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.courses.date_last_modified
items[].schoolYearSourcedId text No SourcedId of the associated AcademicSession with type of 'schoolYear'. oneroster.courses.school_year_sourced_id
items[].title text Yes Name of this course. oneroster.courses.title
items[].courseCode text No Human readable code used to help identify this course. oneroster.courses.course_code
items[].grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.courses.grades
items[].orgSourcedId text Yes SourcedId of an org to which this course belongs. oneroster.courses.org_sourced_id
items[].subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.courses.subjects
items[].subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.courses.subject_codes

oneroster.demographics.list

List Demographics

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/demographics
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/demographics" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from demographics.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.demographics
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.demographics
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.demographics.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.demographics.import_batch_id
items[].sourcedId text Yes The user's sourcedId; in demographics.csv this is the same identifier as the user whose demographics are being described. oneroster.demographics.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.demographics.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.demographics.date_last_modified
items[].birthDate date No The date of birth. ISO 861 format: 'YYYY-MM-DD'. oneroster.demographics.birth_date
items[].sex text No Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source... oneroster.demographics.sex
items[].americanIndianOrAlaskaNative text No Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is... oneroster.demographics.american_indian_or_alaska_native
items[].asian text No Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as... oneroster.demographics.asian
items[].blackOrAfricanAmerican text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race... oneroster.demographics.black_or_african_american
items[].nativeHawaiianOrOtherPacificIslander text No Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a sing... oneroster.demographics.native_hawaiian_or_other_pacific_islander
items[].white text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect eac... oneroster.demographics.white
items[].demographicRaceTwoOrMoreRaces text No OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the... oneroster.demographics.demographic_race_two_or_more_races
items[].hispanicOrLatinoEthnicity text No Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is... oneroster.demographics.hispanic_or_latino_ethnicity
items[].countryOfBirthCode text No Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.country_of_birth_code
items[].stateOfBirthAbbreviation text No State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.state_of_birth_abbreviation
items[].cityOfBirth text No City where the user was born. oneroster.demographics.city_of_birth
items[].publicSchoolResidenceStatus text No An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted... oneroster.demographics.public_school_residence_status

oneroster.enrollments.list

List Enrollments

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/enrollments
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/enrollments" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from enrollments.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.enrollments
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.enrollments
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.enrollments.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.enrollments.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this enrollments row. oneroster.enrollments.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
items[].classSourcedId text Yes SourcedId of the Class. oneroster.enrollments.class_sourced_id
items[].schoolSourcedId text Yes SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
items[].userSourcedId text Yes SourcedId of the User. oneroster.enrollments.user_sourced_id
items[].role text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and mus... oneroster.enrollments.role
items[].primary text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proc... oneroster.enrollments.primary
items[].beginDate date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
items[].endDate date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date

oneroster.line_item_learning_objective_ids.list

List Line Item Learning Objective IDs

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/lineItemLearningObjectiveIds
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/lineItemLearningObjectiveIds" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from lineItemLearningObjectiveIds.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.line_item_learning_objective_ids
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_learning_objective_ids.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_learning_objective_ids.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this line item learning objective ids row. oneroster.line_item_learning_objective_ids.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_learning_objective_ids.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_learning_objective_ids.date_last_modified
items[].lineItemSourcedId text Yes SourcedId of the parent LineItem for this learning objective. oneroster.line_item_learning_objective_ids.line_item_sourced_id
items[].source text Yes Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender va... oneroster.line_item_learning_objective_ids.source
items[].learningObjectiveId text Yes Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. oneroster.line_item_learning_objective_ids.learning_objective_id

oneroster.line_items.list

List Line Items

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/lineItems
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/lineItems" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from lineItems.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.line_items
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_items
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_items.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_items.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this line items row. oneroster.line_items.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
items[].title text Yes The title assigned to the lineItem. oneroster.line_items.title
items[].description text No Short description of the role of the lineItem. oneroster.line_items.description
items[].assignDate date Yes Date the associated activity was assigned. oneroster.line_items.assign_date
items[].dueDate date Yes Date the associated activity is due to be completed. oneroster.line_items.due_date
items[].classSourcedId text Yes SourcedId of the Class. oneroster.line_items.class_sourced_id
items[].categorySourcedId text Yes SourcedId of the Category. oneroster.line_items.category_sourced_id
items[].academicSessionSourcedId text Yes SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
items[].resultValueMin double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
items[].resultValueMax double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
items[].schoolSourcedId text Yes SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id

oneroster.line_item_score_scales.list

List Line Item Score Scales

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/lineItemScoreScales
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/lineItemScoreScales" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from lineItemScoreScales.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.line_item_score_scales
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_score_scales.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_score_scales.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this line item score scales row. oneroster.line_item_score_scales.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_score_scales.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_score_scales.date_last_modified
items[].title text No Name of the related scoreScale. oneroster.line_item_score_scales.title
items[].lineItemSourcedId text Yes SourcedId of the reference LineItem. oneroster.line_item_score_scales.line_item_sourced_id
items[].scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.line_item_score_scales.score_scale_sourced_id

oneroster.orgs.list

List Organizations

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/orgs
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/orgs" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from orgs.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.orgs
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.orgs
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.orgs.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.orgs.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this orgs row. oneroster.orgs.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.orgs.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.orgs.date_last_modified
items[].name text Yes Name of the organization. oneroster.orgs.name
items[].type text Yes Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, an... oneroster.orgs.type
items[].identifier text No Human readable identifier for this org e.g. NCES ID. oneroster.orgs.identifier
items[].parentSourcedId text No SourcedId of an Org representing the Parent organization. oneroster.orgs.parent_sourced_id

oneroster.resources.list

List Resources

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/resources
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/resources" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from resources.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.resources
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.resources.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.resources.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this resources row. oneroster.resources.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.resources.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.resources.date_last_modified
items[].vendorResourceId text Yes Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. oneroster.resources.vendor_resource_id
items[].title text No Name of this resource. oneroster.resources.title
items[].roles text No Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows. oneroster.resources.roles
items[].importance text No Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. oneroster.resources.importance
items[].vendorId text No Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. oneroster.resources.vendor_id
items[].applicationId text No Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. oneroster.resources.application_id

oneroster.result_learning_objective_ids.list

List Result Learning Objective IDs

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/resultLearningObjectiveIds
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/resultLearningObjectiveIds" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from resultLearningObjectiveIds.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.result_learning_objective_ids
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_learning_objective_ids.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_learning_objective_ids.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this result learning objective ids row. oneroster.result_learning_objective_ids.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_learning_objective_ids.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_learning_objective_ids.date_last_modified
items[].resultSourcedId text Yes SourcedId of the parent Result for this learning objective. oneroster.result_learning_objective_ids.result_sourced_id
items[].source text Yes Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value... oneroster.result_learning_objective_ids.source
items[].learningObjectiveId text Yes Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. oneroster.result_learning_objective_ids.learning_objective_id
items[].score double precision No The optional mastery score supplied as a numeric value. oneroster.result_learning_objective_ids.score
items[].textScore text No The optional mastery score supplied as a string. oneroster.result_learning_objective_ids.text_score

oneroster.results.list

List Results

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/results
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/results" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from results.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.results
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.results
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.results.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.results.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
items[].lineItemSourcedId text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
items[].studentSourcedId text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
items[].scoreStatus text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
items[].score double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with l... oneroster.results.score
items[].scoreDate date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
items[].comment text No Human readable comment about the result. oneroster.results.comment
items[].textScore text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot... oneroster.results.text_score
items[].classSourcedId text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
items[].inProgress text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
items[].incomplete text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
items[].late text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identit... oneroster.results.late
items[].missing text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing

oneroster.result_score_scales.list

List Result Score Scales

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/resultScoreScales
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/resultScoreScales" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from resultScoreScales.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.result_score_scales
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_score_scales.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_score_scales.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this result score scales row. oneroster.result_score_scales.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_score_scales.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_score_scales.date_last_modified
items[].title text No Name of the related scoreScale. oneroster.result_score_scales.title
items[].resultSourcedId text Yes SourcedId of the reference Result. oneroster.result_score_scales.result_sourced_id
items[].scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.result_score_scales.score_scale_sourced_id

oneroster.roles.list

List Roles

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/roles
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/roles" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from roles.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.roles
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.roles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.roles.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.roles.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this roles row. oneroster.roles.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.roles.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.roles.date_last_modified
items[].userSourcedId text Yes The user whose role is being defined. oneroster.roles.user_sourced_id
items[].roleType text Yes Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window. oneroster.roles.role_type
items[].role text Yes Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a cl... oneroster.roles.role
items[].beginDate date No The start date on which the role became active (inclusive). oneroster.roles.begin_date
items[].endDate date No The end date on which the role ceased to be active (exclusive). oneroster.roles.end_date
items[].orgSourcedId text Yes SourcedId of the Org within which the User has the assigned role. oneroster.roles.org_sourced_id
items[].userProfileSourcedId text No SourcedId of the UserProfile for the User. oneroster.roles.user_profile_sourced_id

oneroster.score_scales.list

List Score Scales

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/scoreScales
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/scoreScales" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from scoreScales.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.score_scales
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.score_scales.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.score_scales.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this score scales row. oneroster.score_scales.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.score_scales.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.score_scales.date_last_modified
items[].title text Yes A human readable title for the score scale. oneroster.score_scales.title
items[].type text Yes The type of score scaling e.g. percent. oneroster.score_scales.type
items[].orgSourcedId text Yes The org for which the score scale is used. oneroster.score_scales.org_sourced_id
items[].courseSourcedId text Yes The course for which the score scale is used. oneroster.score_scales.course_sourced_id
items[].classSourcedId text Yes The class for which the score scale is used. oneroster.score_scales.class_sourced_id
items[].scoreScaleValue text Yes OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell. oneroster.score_scales.score_scale_value

oneroster.user_profiles.list

List User Profiles

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/userProfiles
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/userProfiles" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from userProfiles.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.user_profiles
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_profiles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_profiles.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_profiles.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this user profiles row. oneroster.user_profiles.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_profiles.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_profiles.date_last_modified
items[].userSourcedId text Yes Unique ID for the corresponding user. oneroster.user_profiles.user_sourced_id
items[].profileType text Yes The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc. oneroster.user_profiles.profile_type
items[].vendorId text Yes The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. oneroster.user_profiles.vendor_id
items[].applicationId text No The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. oneroster.user_profiles.application_id
items[].description text No A human readable description of the use of the account. This should not contain any security information for access to the account. oneroster.user_profiles.description
items[].credentialType text Yes The type of credentials for the user profile. This should be indicative of when this credential should be used. oneroster.user_profiles.credential_type
items[].username text Yes The username for this profile. oneroster.user_profiles.username
items[].password text No The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method. oneroster.user_profiles.password

oneroster.user_resources.list

List User Resources

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/userResources
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/userResources" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from userResources.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.user_resources
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_resources.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_resources.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this user resources row. oneroster.user_resources.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_resources.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_resources.date_last_modified
items[].userSourcedId text Yes SourcedId of the user who will have access to this resource. oneroster.user_resources.user_sourced_id
items[].orgSourcedId text No SourcedId of the reference Organization. oneroster.user_resources.org_sourced_id
items[].classSourcedId text No SourcedId of the reference Class. oneroster.user_resources.class_sourced_id
items[].resourceSourcedId text Yes SourcedId of the Resource associated with the User. oneroster.user_resources.resource_sourced_id

oneroster.users.list

List Users

Direct list projection over this CSV-derived table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/users
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/users" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from users.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.users
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.users
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.users.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.users.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this users row. oneroster.users.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
items[].enabledUser text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat th... oneroster.users.enabled_user
items[].username text Yes User name. oneroster.users.username
items[].userIds text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclos... oneroster.users.user_ids
items[].givenName text Yes User's first name. oneroster.users.given_name
items[].familyName text Yes User's surname. oneroster.users.family_name
items[].middleName text No User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
items[].identifier text No Identifier for the user with a human readable meaning. oneroster.users.identifier
items[].email text No Email address for the User. oneroster.users.email
items[].sms text No SMS address for the User. oneroster.users.sms
items[].phone text No Phone number for the User. oneroster.users.phone
items[].agentSourcedIds text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for i... oneroster.users.agent_sourced_ids
items[].grades text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
items[].password text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
items[].userMasterIdentifier text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is... oneroster.users.user_master_identifier
items[].preferredGivenName text No The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
items[].preferredMiddleName text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
items[].preferredFamilyName text No The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
items[].primaryOrgSourcedId text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the prim... oneroster.users.primary_org_sourced_id
items[].pronouns text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a stateme... oneroster.users.pronouns

oneroster.grading_periods.list

List Grading Periods

Virtual list projection where academic_sessions.type = gradingPeriod; no separate oneroster.grading_periods table. Current live reads apply supported filter, sort, limit, cursor, and modifiedSince controls; unsupported or invalid query controls return typed 400 Problems.

#
Method
GET
Path
/gradingPeriods
Auth
Bearer JWT with matching tenant_id; scoped claims may narrow visibility
Status
200400401403429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-103 OITD-107 OITD-112 OITD-011 OITD-014

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS "$BASE_URL/gradingPeriods" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from academicSessions.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.academic_sessions
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
items[].title text Yes Name or title of the academic session. oneroster.academic_sessions.title
items[].type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
items[].startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
items[].endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
items[].parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
items[].schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.academic_sessions.get

Get one Academic Sessions record

Reads one tenant-scoped /academicSessions record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/academicSessions/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/academicSessions/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.categories.get

Get one Categories record

Reads one tenant-scoped /categories record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/categories/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/categories/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One categories.csv record using OneRoster source field names and _platform metadata. oneroster.categories
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.categories
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.categories.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.categories.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this categories row. oneroster.categories.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.categories.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.categories.date_last_modified
item.title text Yes The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. oneroster.categories.title
item.weight integer No Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2. oneroster.categories.weight

oneroster.classes.get

Get one Classes record

Reads one tenant-scoped /classes record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/classes/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/classes/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classes.csv record using OneRoster source field names and _platform metadata. oneroster.classes
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.classes
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.classes.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.classes.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
item.title text Yes Name of this class. oneroster.classes.title
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
item.courseSourcedId text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
item.classCode text No Human readable code used to help identify this class. oneroster.classes.class_code
item.classType text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
item.location text No Human readable description of where the class is physically located. oneroster.classes.location
item.schoolSourcedId text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
item.termSourcedIds text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.classes.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.classes.subject_codes
item.periods text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods

oneroster.class_resources.get

Get one Class Resources record

Reads one tenant-scoped /classResources record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/classResources/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/classResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classResources.csv record using OneRoster source field names and _platform metadata. oneroster.class_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.class_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.class_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.class_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this class resources row. oneroster.class_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.class_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.class_resources.date_last_modified
item.title text No Name of the related class. oneroster.class_resources.title
item.classSourcedId text Yes SourcedId of the reference Class. oneroster.class_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Class. oneroster.class_resources.resource_sourced_id

oneroster.course_resources.get

Get one Course Resources record

Reads one tenant-scoped /courseResources record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/courseResources/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/courseResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courseResources.csv record using OneRoster source field names and _platform metadata. oneroster.course_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.course_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.course_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.course_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this course resources row. oneroster.course_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.course_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.course_resources.date_last_modified
item.title text No Name of the related class. oneroster.course_resources.title
item.courseSourcedId text Yes SourcedId of the reference Course. oneroster.course_resources.course_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Course. oneroster.course_resources.resource_sourced_id

oneroster.courses.get

Get one Courses record

Reads one tenant-scoped /courses record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/courses/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/courses/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courses.csv record using OneRoster source field names and _platform metadata. oneroster.courses
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.courses
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.courses.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.courses.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this courses row. oneroster.courses.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.courses.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.courses.date_last_modified
item.schoolYearSourcedId text No SourcedId of the associated AcademicSession with type of 'schoolYear'. oneroster.courses.school_year_sourced_id
item.title text Yes Name of this course. oneroster.courses.title
item.courseCode text No Human readable code used to help identify this course. oneroster.courses.course_code
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.courses.grades
item.orgSourcedId text Yes SourcedId of an org to which this course belongs. oneroster.courses.org_sourced_id
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.courses.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.courses.subject_codes

oneroster.demographics.get

Get one Demographics record

Reads one tenant-scoped /demographics record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/demographics/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/demographics/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One demographics.csv record using OneRoster source field names and _platform metadata. oneroster.demographics
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.demographics
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.demographics.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.demographics.import_batch_id
item.sourcedId text Yes The user's sourcedId; in demographics.csv this is the same identifier as the user whose demographics are being described. oneroster.demographics.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.demographics.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.demographics.date_last_modified
item.birthDate date No The date of birth. ISO 861 format: 'YYYY-MM-DD'. oneroster.demographics.birth_date
item.sex text No Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source... oneroster.demographics.sex
item.americanIndianOrAlaskaNative text No Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is... oneroster.demographics.american_indian_or_alaska_native
item.asian text No Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as... oneroster.demographics.asian
item.blackOrAfricanAmerican text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race... oneroster.demographics.black_or_african_american
item.nativeHawaiianOrOtherPacificIslander text No Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a sing... oneroster.demographics.native_hawaiian_or_other_pacific_islander
item.white text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect eac... oneroster.demographics.white
item.demographicRaceTwoOrMoreRaces text No OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the... oneroster.demographics.demographic_race_two_or_more_races
item.hispanicOrLatinoEthnicity text No Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is... oneroster.demographics.hispanic_or_latino_ethnicity
item.countryOfBirthCode text No Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.country_of_birth_code
item.stateOfBirthAbbreviation text No State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.state_of_birth_abbreviation
item.cityOfBirth text No City where the user was born. oneroster.demographics.city_of_birth
item.publicSchoolResidenceStatus text No An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted... oneroster.demographics.public_school_residence_status

oneroster.enrollments.get

Get one Enrollments record

Reads one tenant-scoped /enrollments record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/enrollments/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/enrollments/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One enrollments.csv record using OneRoster source field names and _platform metadata. oneroster.enrollments
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.enrollments
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.enrollments.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.enrollments.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this enrollments row. oneroster.enrollments.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
item.classSourcedId text Yes SourcedId of the Class. oneroster.enrollments.class_sourced_id
item.schoolSourcedId text Yes SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
item.userSourcedId text Yes SourcedId of the User. oneroster.enrollments.user_sourced_id
item.role text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and mus... oneroster.enrollments.role
item.primary text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proc... oneroster.enrollments.primary
item.beginDate date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
item.endDate date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date

oneroster.line_item_learning_objective_ids.get

Get one Line Item Learning Objective IDs record

Reads one tenant-scoped /lineItemLearningObjectiveIds record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/lineItemLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/lineItemLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item learning objective ids row. oneroster.line_item_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_learning_objective_ids.date_last_modified
item.lineItemSourcedId text Yes SourcedId of the parent LineItem for this learning objective. oneroster.line_item_learning_objective_ids.line_item_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender va... oneroster.line_item_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. oneroster.line_item_learning_objective_ids.learning_objective_id

oneroster.line_items.get

Get one Line Items record

Reads one tenant-scoped /lineItems record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/lineItems/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/lineItems/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItems.csv record using OneRoster source field names and _platform metadata. oneroster.line_items
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_items
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_items.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_items.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line items row. oneroster.line_items.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
item.title text Yes The title assigned to the lineItem. oneroster.line_items.title
item.description text No Short description of the role of the lineItem. oneroster.line_items.description
item.assignDate date Yes Date the associated activity was assigned. oneroster.line_items.assign_date
item.dueDate date Yes Date the associated activity is due to be completed. oneroster.line_items.due_date
item.classSourcedId text Yes SourcedId of the Class. oneroster.line_items.class_sourced_id
item.categorySourcedId text Yes SourcedId of the Category. oneroster.line_items.category_sourced_id
item.academicSessionSourcedId text Yes SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
item.resultValueMin double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
item.resultValueMax double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
item.schoolSourcedId text Yes SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id

oneroster.line_item_score_scales.get

Get one Line Item Score Scales record

Reads one tenant-scoped /lineItemScoreScales record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/lineItemScoreScales/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/lineItemScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item score scales row. oneroster.line_item_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.line_item_score_scales.title
item.lineItemSourcedId text Yes SourcedId of the reference LineItem. oneroster.line_item_score_scales.line_item_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.line_item_score_scales.score_scale_sourced_id

oneroster.orgs.get

Get one Organizations record

Reads one tenant-scoped /orgs record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/orgs/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/orgs/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One orgs.csv record using OneRoster source field names and _platform metadata. oneroster.orgs
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.orgs
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.orgs.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.orgs.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this orgs row. oneroster.orgs.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.orgs.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.orgs.date_last_modified
item.name text Yes Name of the organization. oneroster.orgs.name
item.type text Yes Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, an... oneroster.orgs.type
item.identifier text No Human readable identifier for this org e.g. NCES ID. oneroster.orgs.identifier
item.parentSourcedId text No SourcedId of an Org representing the Parent organization. oneroster.orgs.parent_sourced_id

oneroster.resources.get

Get one Resources record

Reads one tenant-scoped /resources record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/resources/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/resources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resources.csv record using OneRoster source field names and _platform metadata. oneroster.resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this resources row. oneroster.resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.resources.date_last_modified
item.vendorResourceId text Yes Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. oneroster.resources.vendor_resource_id
item.title text No Name of this resource. oneroster.resources.title
item.roles text No Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows. oneroster.resources.roles
item.importance text No Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. oneroster.resources.importance
item.vendorId text No Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. oneroster.resources.vendor_id
item.applicationId text No Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. oneroster.resources.application_id

oneroster.result_learning_objective_ids.get

Get one Result Learning Objective IDs record

Reads one tenant-scoped /resultLearningObjectiveIds record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/resultLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/resultLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.result_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result learning objective ids row. oneroster.result_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_learning_objective_ids.date_last_modified
item.resultSourcedId text Yes SourcedId of the parent Result for this learning objective. oneroster.result_learning_objective_ids.result_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value... oneroster.result_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. oneroster.result_learning_objective_ids.learning_objective_id
item.score double precision No The optional mastery score supplied as a numeric value. oneroster.result_learning_objective_ids.score
item.textScore text No The optional mastery score supplied as a string. oneroster.result_learning_objective_ids.text_score

oneroster.results.get

Get one Results record

Reads one tenant-scoped /results record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/results/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/results/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One results.csv record using OneRoster source field names and _platform metadata. oneroster.results
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.results
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.results.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.results.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
item.lineItemSourcedId text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
item.studentSourcedId text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
item.scoreStatus text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
item.score double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with l... oneroster.results.score
item.scoreDate date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
item.comment text No Human readable comment about the result. oneroster.results.comment
item.textScore text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot... oneroster.results.text_score
item.classSourcedId text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
item.inProgress text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
item.incomplete text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
item.late text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identit... oneroster.results.late
item.missing text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing

oneroster.result_score_scales.get

Get one Result Score Scales record

Reads one tenant-scoped /resultScoreScales record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/resultScoreScales/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/resultScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.result_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result score scales row. oneroster.result_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.result_score_scales.title
item.resultSourcedId text Yes SourcedId of the reference Result. oneroster.result_score_scales.result_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.result_score_scales.score_scale_sourced_id

oneroster.roles.get

Get one Roles record

Reads one tenant-scoped /roles record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/roles/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/roles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One roles.csv record using OneRoster source field names and _platform metadata. oneroster.roles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.roles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.roles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.roles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this roles row. oneroster.roles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.roles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.roles.date_last_modified
item.userSourcedId text Yes The user whose role is being defined. oneroster.roles.user_sourced_id
item.roleType text Yes Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window. oneroster.roles.role_type
item.role text Yes Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a cl... oneroster.roles.role
item.beginDate date No The start date on which the role became active (inclusive). oneroster.roles.begin_date
item.endDate date No The end date on which the role ceased to be active (exclusive). oneroster.roles.end_date
item.orgSourcedId text Yes SourcedId of the Org within which the User has the assigned role. oneroster.roles.org_sourced_id
item.userProfileSourcedId text No SourcedId of the UserProfile for the User. oneroster.roles.user_profile_sourced_id

oneroster.score_scales.get

Get one Score Scales record

Reads one tenant-scoped /scoreScales record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/scoreScales/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/scoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One scoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this score scales row. oneroster.score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.score_scales.date_last_modified
item.title text Yes A human readable title for the score scale. oneroster.score_scales.title
item.type text Yes The type of score scaling e.g. percent. oneroster.score_scales.type
item.orgSourcedId text Yes The org for which the score scale is used. oneroster.score_scales.org_sourced_id
item.courseSourcedId text Yes The course for which the score scale is used. oneroster.score_scales.course_sourced_id
item.classSourcedId text Yes The class for which the score scale is used. oneroster.score_scales.class_sourced_id
item.scoreScaleValue text Yes OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell. oneroster.score_scales.score_scale_value

oneroster.user_profiles.get

Get one User Profiles record

Reads one tenant-scoped /userProfiles record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/userProfiles/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/userProfiles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userProfiles.csv record using OneRoster source field names and _platform metadata. oneroster.user_profiles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_profiles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_profiles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_profiles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user profiles row. oneroster.user_profiles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_profiles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_profiles.date_last_modified
item.userSourcedId text Yes Unique ID for the corresponding user. oneroster.user_profiles.user_sourced_id
item.profileType text Yes The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc. oneroster.user_profiles.profile_type
item.vendorId text Yes The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. oneroster.user_profiles.vendor_id
item.applicationId text No The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. oneroster.user_profiles.application_id
item.description text No A human readable description of the use of the account. This should not contain any security information for access to the account. oneroster.user_profiles.description
item.credentialType text Yes The type of credentials for the user profile. This should be indicative of when this credential should be used. oneroster.user_profiles.credential_type
item.username text Yes The username for this profile. oneroster.user_profiles.username
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method. oneroster.user_profiles.password

oneroster.user_resources.get

Get one User Resources record

Reads one tenant-scoped /userResources record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/userResources/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/userResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userResources.csv record using OneRoster source field names and _platform metadata. oneroster.user_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user resources row. oneroster.user_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_resources.date_last_modified
item.userSourcedId text Yes SourcedId of the user who will have access to this resource. oneroster.user_resources.user_sourced_id
item.orgSourcedId text No SourcedId of the reference Organization. oneroster.user_resources.org_sourced_id
item.classSourcedId text No SourcedId of the reference Class. oneroster.user_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the User. oneroster.user_resources.resource_sourced_id

oneroster.users.get

Get one Users record

Reads one tenant-scoped /users record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/users/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/users/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One users.csv record using OneRoster source field names and _platform metadata. oneroster.users
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.users
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.users.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.users.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this users row. oneroster.users.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
item.enabledUser text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat th... oneroster.users.enabled_user
item.username text Yes User name. oneroster.users.username
item.userIds text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclos... oneroster.users.user_ids
item.givenName text Yes User's first name. oneroster.users.given_name
item.familyName text Yes User's surname. oneroster.users.family_name
item.middleName text No User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
item.identifier text No Identifier for the user with a human readable meaning. oneroster.users.identifier
item.email text No Email address for the User. oneroster.users.email
item.sms text No SMS address for the User. oneroster.users.sms
item.phone text No Phone number for the User. oneroster.users.phone
item.agentSourcedIds text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for i... oneroster.users.agent_sourced_ids
item.grades text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
item.userMasterIdentifier text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is... oneroster.users.user_master_identifier
item.preferredGivenName text No The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
item.preferredMiddleName text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
item.preferredFamilyName text No The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
item.primaryOrgSourcedId text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the prim... oneroster.users.primary_org_sourced_id
item.pronouns text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a stateme... oneroster.users.pronouns

oneroster.grading_periods.get

Get one Grading Periods record

Reads one tenant-scoped /gradingPeriods record by OneRoster sourcedId and returns an ETag for later If-Match writes.

#
Method
GET
Path
/gradingPeriods/{sourcedId}
Auth
Bearer JWT with matching tenant_id and relationship scope
Status
200401403404429

Trace: OITD-001 OITD-007 OITD-010 OITD-102 OITD-104 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -i -fsS "$BASE_URL/gradingPeriods/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId for this collection. OITD-102
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.schools.classes.list

List classes for a school

Alias for school-oriented clients; returns classes whose school sourcedId matches the supplied school org.

#
Method
GET
Path
/schools/{sourcedId}/classes
Auth
Bearer JWT with matching tenant_id and relationship-scoped claims
Status
200400401403404429

Trace: OITD-010 OITD-102 OITD-103 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -fsS "$BASE_URL/schools/$RESOURCE_ID/classes" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped parent school org sourcedId. OITD-102
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from classes.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.classes
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.classes
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.classes.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.classes.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
items[].title text Yes Name of this class. oneroster.classes.title
items[].grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
items[].courseSourcedId text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
items[].classCode text No Human readable code used to help identify this class. oneroster.classes.class_code
items[].classType text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
items[].location text No Human readable description of where the class is physically located. oneroster.classes.location
items[].schoolSourcedId text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
items[].termSourcedIds text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
items[].subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.classes.subjects
items[].subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.classes.subject_codes
items[].periods text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods

oneroster.orgs.classes.list

List classes for a school organization

Returns classes whose school or owning organization matches the supplied org sourcedId.

#
Method
GET
Path
/orgs/{sourcedId}/classes
Auth
Bearer JWT with matching tenant_id and relationship-scoped claims
Status
200400401403404429

Trace: OITD-010 OITD-102 OITD-103 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -fsS "$BASE_URL/orgs/$RESOURCE_ID/classes" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped parent school org sourcedId. OITD-102
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from classes.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.classes
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.classes
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.classes.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.classes.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
items[].title text Yes Name of this class. oneroster.classes.title
items[].grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
items[].courseSourcedId text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
items[].classCode text No Human readable code used to help identify this class. oneroster.classes.class_code
items[].classType text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
items[].location text No Human readable description of where the class is physically located. oneroster.classes.location
items[].schoolSourcedId text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
items[].termSourcedIds text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
items[].subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.classes.subjects
items[].subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.classes.subject_codes
items[].periods text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods

oneroster.classes.students.list

List students in a class

Returns users with student enrollments in the supplied class.

#
Method
GET
Path
/classes/{sourcedId}/students
Auth
Bearer JWT with matching tenant_id and relationship-scoped claims
Status
200400401403404429

Trace: OITD-010 OITD-102 OITD-103 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -fsS "$BASE_URL/classes/$RESOURCE_ID/students" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped parent class sourcedId. OITD-102
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from users.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.users
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.users
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.users.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.users.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this users row. oneroster.users.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
items[].enabledUser text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat th... oneroster.users.enabled_user
items[].username text Yes User name. oneroster.users.username
items[].userIds text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclos... oneroster.users.user_ids
items[].givenName text Yes User's first name. oneroster.users.given_name
items[].familyName text Yes User's surname. oneroster.users.family_name
items[].middleName text No User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
items[].identifier text No Identifier for the user with a human readable meaning. oneroster.users.identifier
items[].email text No Email address for the User. oneroster.users.email
items[].sms text No SMS address for the User. oneroster.users.sms
items[].phone text No Phone number for the User. oneroster.users.phone
items[].agentSourcedIds text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for i... oneroster.users.agent_sourced_ids
items[].grades text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
items[].password text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
items[].userMasterIdentifier text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is... oneroster.users.user_master_identifier
items[].preferredGivenName text No The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
items[].preferredMiddleName text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
items[].preferredFamilyName text No The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
items[].primaryOrgSourcedId text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the prim... oneroster.users.primary_org_sourced_id
items[].pronouns text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a stateme... oneroster.users.pronouns

oneroster.classes.line_items.list

List line items for a class

Returns gradebook line items attached to the supplied class.

#
Method
GET
Path
/classes/{sourcedId}/lineItems
Auth
Bearer JWT with matching tenant_id and relationship-scoped claims
Status
200400401403404429

Trace: OITD-010 OITD-102 OITD-103 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -fsS "$BASE_URL/classes/$RESOURCE_ID/lineItems" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped parent class sourcedId. OITD-102
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from lineItems.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.line_items
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_items
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_items.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_items.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this line items row. oneroster.line_items.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
items[].title text Yes The title assigned to the lineItem. oneroster.line_items.title
items[].description text No Short description of the role of the lineItem. oneroster.line_items.description
items[].assignDate date Yes Date the associated activity was assigned. oneroster.line_items.assign_date
items[].dueDate date Yes Date the associated activity is due to be completed. oneroster.line_items.due_date
items[].classSourcedId text Yes SourcedId of the Class. oneroster.line_items.class_sourced_id
items[].categorySourcedId text Yes SourcedId of the Category. oneroster.line_items.category_sourced_id
items[].academicSessionSourcedId text Yes SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
items[].resultValueMin double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
items[].resultValueMax double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
items[].schoolSourcedId text Yes SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id

oneroster.users.enrollments.list

List enrollments for a user

Returns enrollments where the supplied user is the enrolled person.

#
Method
GET
Path
/users/{sourcedId}/enrollments
Auth
Bearer JWT with matching tenant_id and relationship-scoped claims
Status
200400401403404429

Trace: OITD-010 OITD-102 OITD-103 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -fsS "$BASE_URL/users/$RESOURCE_ID/enrollments" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped parent user sourcedId. OITD-102
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from enrollments.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.enrollments
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.enrollments
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.enrollments.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.enrollments.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this enrollments row. oneroster.enrollments.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
items[].classSourcedId text Yes SourcedId of the Class. oneroster.enrollments.class_sourced_id
items[].schoolSourcedId text Yes SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
items[].userSourcedId text Yes SourcedId of the User. oneroster.enrollments.user_sourced_id
items[].role text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and mus... oneroster.enrollments.role
items[].primary text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proc... oneroster.enrollments.primary
items[].beginDate date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
items[].endDate date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date

oneroster.users.results.list

List results for a user

Returns gradebook results visible for the supplied user.

#
Method
GET
Path
/users/{sourcedId}/results
Auth
Bearer JWT with matching tenant_id and relationship-scoped claims
Status
200400401403404429

Trace: OITD-010 OITD-102 OITD-103 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -fsS "$BASE_URL/users/$RESOURCE_ID/results" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped parent user sourcedId. OITD-102
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from results.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.results
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.results
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.results.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.results.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
items[].lineItemSourcedId text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
items[].studentSourcedId text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
items[].scoreStatus text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
items[].score double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with l... oneroster.results.score
items[].scoreDate date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
items[].comment text No Human readable comment about the result. oneroster.results.comment
items[].textScore text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot... oneroster.results.text_score
items[].classSourcedId text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
items[].inProgress text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
items[].incomplete text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
items[].late text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identit... oneroster.results.late
items[].missing text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing

oneroster.students.results.list

List results for a student

Alias for student-oriented clients; returns gradebook results visible for the supplied student user.

#
Method
GET
Path
/students/{sourcedId}/results
Auth
Bearer JWT with matching tenant_id and relationship-scoped claims
Status
200400401403404429

Trace: OITD-010 OITD-102 OITD-103 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
curl -fsS "$BASE_URL/students/$RESOURCE_ID/results" \
  -H "Authorization: Bearer $TOKEN"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
sourcedId Path text Yes Tenant-scoped parent student user sourcedId. OITD-102
filter Query string No Narrows a list endpoint to documented field comparisons. Unsupported fields or operators return a typed 400 Problem rather than being ignored. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
sort Query string No Orders a list endpoint by documented sortable fields. Unsupported sort fields return a typed 400 Problem. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
limit Query integer No Caps the number of returned rows. Must be positive and within the published maximum for the endpoint. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
cursor Query opaque string No Continues a paged list from the server-provided continuation token. Client code must treat the value as opaque and tenant-scoped. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
modifiedSince Query ISO 8601 DateTime No Requests rows changed after the supplied instant for polling-based sync. Invalid timestamps return a typed 400 Problem; this is the shipped sync primitive instead of webhooks. Current live: Current live deployment: list query validation is fail-loud. Unknown query parameters return a 400 Problem with code oneroster:unsupported_parameter; invalid filter, sort, limit, cursor, or modifiedSince controls return a 400 Problem with code oneroster:validation_failed. OITD-103-QUERY-MODEL
Response schema
FieldTypeRequiredDescriptionTrace
items[] array<object> Yes Rows from results.csv projected with OneRoster field names and platform metadata kept visibly separate. oneroster.results
count integer Yes Total number of rows matching tenant scope and supported query controls before any limit page is cut. OITD-103
links.next string No Continuation link present only when a limit page has more matching rows. Treat the cursor as opaque and tenant-scoped. OITD-103
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.results
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
items[]._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.results.tenant_id
items[]._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.results.import_batch_id
items[].sourcedId text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
items[].status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
items[].dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
items[].lineItemSourcedId text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
items[].studentSourcedId text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
items[].scoreStatus text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
items[].score double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with l... oneroster.results.score
items[].scoreDate date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
items[].comment text No Human readable comment about the result. oneroster.results.comment
items[].textScore text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot... oneroster.results.text_score
items[].classSourcedId text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
items[].inProgress text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
items[].incomplete text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
items[].late text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identit... oneroster.results.late
items[].missing text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing

oneroster.academic_sessions.create

Create a Academic Sessions record

Creates one /academicSessions resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/academicSessions
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/academicSessions" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-academic-sessions-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
title Body text Yes Name or title of the academic session. oneroster.academic_sessions.title
type Body text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
startDate Body date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
endDate Body date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
parentSourcedId Body text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
schoolYear Body integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.categories.create

Create a Categories record

Creates one /categories resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/categories
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/categories" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-categories-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this categories row. oneroster.categories.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.categories.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.categories.date_last_modified
title Body text Yes The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. oneroster.categories.title
weight Body integer No Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2. oneroster.categories.weight
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One categories.csv record using OneRoster source field names and _platform metadata. oneroster.categories
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.categories
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.categories.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.categories.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this categories row. oneroster.categories.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.categories.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.categories.date_last_modified
item.title text Yes The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. oneroster.categories.title
item.weight integer No Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2. oneroster.categories.weight

oneroster.classes.create

Create a Classes record

Creates one /classes resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/classes
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/classes" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-classes-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
title Body text Yes Name of this class. oneroster.classes.title
grades Body text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
courseSourcedId Body text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
classCode Body text No Human readable code used to help identify this class. oneroster.classes.class_code
classType Body text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
location Body text No Human readable description of where the class is physically located. oneroster.classes.location
schoolSourcedId Body text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
termSourcedIds Body text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
subjects Body text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance. The permit... oneroster.classes.subjects
subjectCodes Body text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is present the t... oneroster.classes.subject_codes
periods Body text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classes.csv record using OneRoster source field names and _platform metadata. oneroster.classes
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.classes
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.classes.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.classes.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
item.title text Yes Name of this class. oneroster.classes.title
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
item.courseSourcedId text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
item.classCode text No Human readable code used to help identify this class. oneroster.classes.class_code
item.classType text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
item.location text No Human readable description of where the class is physically located. oneroster.classes.location
item.schoolSourcedId text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
item.termSourcedIds text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.classes.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.classes.subject_codes
item.periods text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods

oneroster.class_resources.create

Create a Class Resources record

Creates one /classResources resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/classResources
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/classResources" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-class-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this class resources row. oneroster.class_resources.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.class_resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.class_resources.date_last_modified
title Body text No Name of the related class. oneroster.class_resources.title
classSourcedId Body text Yes SourcedId of the reference Class. oneroster.class_resources.class_sourced_id
resourceSourcedId Body text Yes SourcedId of the Resource associated with the Class. oneroster.class_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classResources.csv record using OneRoster source field names and _platform metadata. oneroster.class_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.class_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.class_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.class_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this class resources row. oneroster.class_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.class_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.class_resources.date_last_modified
item.title text No Name of the related class. oneroster.class_resources.title
item.classSourcedId text Yes SourcedId of the reference Class. oneroster.class_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Class. oneroster.class_resources.resource_sourced_id

oneroster.course_resources.create

Create a Course Resources record

Creates one /courseResources resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/courseResources
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/courseResources" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-course-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this course resources row. oneroster.course_resources.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.course_resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.course_resources.date_last_modified
title Body text No Name of the related class. oneroster.course_resources.title
courseSourcedId Body text Yes SourcedId of the reference Course. oneroster.course_resources.course_sourced_id
resourceSourcedId Body text Yes SourcedId of the Resource associated with the Course. oneroster.course_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courseResources.csv record using OneRoster source field names and _platform metadata. oneroster.course_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.course_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.course_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.course_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this course resources row. oneroster.course_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.course_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.course_resources.date_last_modified
item.title text No Name of the related class. oneroster.course_resources.title
item.courseSourcedId text Yes SourcedId of the reference Course. oneroster.course_resources.course_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Course. oneroster.course_resources.resource_sourced_id

oneroster.courses.create

Create a Courses record

Creates one /courses resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/courses
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/courses" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-courses-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this courses row. oneroster.courses.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.courses.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.courses.date_last_modified
schoolYearSourcedId Body text No SourcedId of the associated AcademicSession with type of 'schoolYear'. oneroster.courses.school_year_sourced_id
title Body text Yes Name of this course. oneroster.courses.title
courseCode Body text No Human readable code used to help identify this course. oneroster.courses.course_code
grades Body text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.courses.grades
orgSourcedId Body text Yes SourcedId of an org to which this course belongs. oneroster.courses.org_sourced_id
subjects Body text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance. The permit... oneroster.courses.subjects
subjectCodes Body text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is present the t... oneroster.courses.subject_codes
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courses.csv record using OneRoster source field names and _platform metadata. oneroster.courses
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.courses
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.courses.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.courses.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this courses row. oneroster.courses.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.courses.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.courses.date_last_modified
item.schoolYearSourcedId text No SourcedId of the associated AcademicSession with type of 'schoolYear'. oneroster.courses.school_year_sourced_id
item.title text Yes Name of this course. oneroster.courses.title
item.courseCode text No Human readable code used to help identify this course. oneroster.courses.course_code
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.courses.grades
item.orgSourcedId text Yes SourcedId of an org to which this course belongs. oneroster.courses.org_sourced_id
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.courses.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.courses.subject_codes

oneroster.demographics.create

Create a Demographics record

Creates one /demographics resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/demographics
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/demographics" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-demographics-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes The user's sourcedId; in demographics.csv this is the same identifier as the user whose demographics are being described. oneroster.demographics.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.demographics.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.demographics.date_last_modified
birthDate Body date No The date of birth. ISO 861 format: 'YYYY-MM-DD'. oneroster.demographics.birth_date
sex Body text No Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source value rath... oneroster.demographics.sex
americanIndianOrAlaskaNative Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is demograph... oneroster.demographics.american_indian_or_alaska_native
asian Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as sensitive... oneroster.demographics.asian
blackOrAfricanAmerican Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race_two_or_mo... oneroster.demographics.black_or_african_american
nativeHawaiianOrOtherPacificIslander Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a single display... oneroster.demographics.native_hawaiian_or_other_pacific_islander
white Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect each race cat... oneroster.demographics.white
demographicRaceTwoOrMoreRaces Body text No OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the individual... oneroster.demographics.demographic_race_two_or_more_races
hispanicOrLatinoEthnicity Body text No Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is high-risk... oneroster.demographics.hispanic_or_latino_ethnicity
countryOfBirthCode Body text No Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.country_of_birth_code
stateOfBirthAbbreviation Body text No State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.state_of_birth_abbreviation
cityOfBirth Body text No City where the user was born. oneroster.demographics.city_of_birth
publicSchoolResidenceStatus Body text No An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted vocabulary... oneroster.demographics.public_school_residence_status
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One demographics.csv record using OneRoster source field names and _platform metadata. oneroster.demographics
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.demographics
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.demographics.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.demographics.import_batch_id
item.sourcedId text Yes The user's sourcedId; in demographics.csv this is the same identifier as the user whose demographics are being described. oneroster.demographics.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.demographics.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.demographics.date_last_modified
item.birthDate date No The date of birth. ISO 861 format: 'YYYY-MM-DD'. oneroster.demographics.birth_date
item.sex text No Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source... oneroster.demographics.sex
item.americanIndianOrAlaskaNative text No Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is... oneroster.demographics.american_indian_or_alaska_native
item.asian text No Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as... oneroster.demographics.asian
item.blackOrAfricanAmerican text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race... oneroster.demographics.black_or_african_american
item.nativeHawaiianOrOtherPacificIslander text No Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a sing... oneroster.demographics.native_hawaiian_or_other_pacific_islander
item.white text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect eac... oneroster.demographics.white
item.demographicRaceTwoOrMoreRaces text No OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the... oneroster.demographics.demographic_race_two_or_more_races
item.hispanicOrLatinoEthnicity text No Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is... oneroster.demographics.hispanic_or_latino_ethnicity
item.countryOfBirthCode text No Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.country_of_birth_code
item.stateOfBirthAbbreviation text No State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.state_of_birth_abbreviation
item.cityOfBirth text No City where the user was born. oneroster.demographics.city_of_birth
item.publicSchoolResidenceStatus text No An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted... oneroster.demographics.public_school_residence_status

oneroster.enrollments.create

Create a Enrollments record

Creates one /enrollments resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/enrollments
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/enrollments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-enrollments-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this enrollments row. oneroster.enrollments.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
classSourcedId Body text Yes SourcedId of the Class. oneroster.enrollments.class_sourced_id
schoolSourcedId Body text Yes SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
userSourcedId Body text Yes SourcedId of the User. oneroster.enrollments.user_sourced_id
role Body text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and must match th... oneroster.enrollments.role
primary Body text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proctor, and a... oneroster.enrollments.primary
beginDate Body date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
endDate Body date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One enrollments.csv record using OneRoster source field names and _platform metadata. oneroster.enrollments
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.enrollments
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.enrollments.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.enrollments.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this enrollments row. oneroster.enrollments.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
item.classSourcedId text Yes SourcedId of the Class. oneroster.enrollments.class_sourced_id
item.schoolSourcedId text Yes SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
item.userSourcedId text Yes SourcedId of the User. oneroster.enrollments.user_sourced_id
item.role text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and mus... oneroster.enrollments.role
item.primary text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proc... oneroster.enrollments.primary
item.beginDate date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
item.endDate date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date

oneroster.line_item_learning_objective_ids.create

Create a Line Item Learning Objective IDs record

Creates one /lineItemLearningObjectiveIds resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/lineItemLearningObjectiveIds
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/lineItemLearningObjectiveIds" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-line-item-learning-objective-ids-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this line item learning objective ids row. oneroster.line_item_learning_objective_ids.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_learning_objective_ids.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_learning_objective_ids.date_last_modified
lineItemSourcedId Body text Yes SourcedId of the parent LineItem for this learning objective. oneroster.line_item_learning_objective_ids.line_item_sourced_id
source Body text Yes Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value whose... oneroster.line_item_learning_objective_ids.source
learningObjectiveId Body text Yes Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. oneroster.line_item_learning_objective_ids.learning_objective_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item learning objective ids row. oneroster.line_item_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_learning_objective_ids.date_last_modified
item.lineItemSourcedId text Yes SourcedId of the parent LineItem for this learning objective. oneroster.line_item_learning_objective_ids.line_item_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender va... oneroster.line_item_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. oneroster.line_item_learning_objective_ids.learning_objective_id

oneroster.line_items.create

Create a Line Items record

Creates one /lineItems resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/lineItems
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/lineItems" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-line-items-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this line items row. oneroster.line_items.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
title Body text Yes The title assigned to the lineItem. oneroster.line_items.title
description Body text No Short description of the role of the lineItem. oneroster.line_items.description
assignDate Body date Yes Date the associated activity was assigned. oneroster.line_items.assign_date
dueDate Body date Yes Date the associated activity is due to be completed. oneroster.line_items.due_date
classSourcedId Body text Yes SourcedId of the Class. oneroster.line_items.class_sourced_id
categorySourcedId Body text Yes SourcedId of the Category. oneroster.line_items.category_sourced_id
academicSessionSourcedId Body text Yes SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
resultValueMin Body double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
resultValueMax Body double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
schoolSourcedId Body text Yes SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItems.csv record using OneRoster source field names and _platform metadata. oneroster.line_items
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_items
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_items.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_items.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line items row. oneroster.line_items.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
item.title text Yes The title assigned to the lineItem. oneroster.line_items.title
item.description text No Short description of the role of the lineItem. oneroster.line_items.description
item.assignDate date Yes Date the associated activity was assigned. oneroster.line_items.assign_date
item.dueDate date Yes Date the associated activity is due to be completed. oneroster.line_items.due_date
item.classSourcedId text Yes SourcedId of the Class. oneroster.line_items.class_sourced_id
item.categorySourcedId text Yes SourcedId of the Category. oneroster.line_items.category_sourced_id
item.academicSessionSourcedId text Yes SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
item.resultValueMin double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
item.resultValueMax double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
item.schoolSourcedId text Yes SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id

oneroster.line_item_score_scales.create

Create a Line Item Score Scales record

Creates one /lineItemScoreScales resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/lineItemScoreScales
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/lineItemScoreScales" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-line-item-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this line item score scales row. oneroster.line_item_score_scales.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_score_scales.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_score_scales.date_last_modified
title Body text No Name of the related scoreScale. oneroster.line_item_score_scales.title
lineItemSourcedId Body text Yes SourcedId of the reference LineItem. oneroster.line_item_score_scales.line_item_sourced_id
scoreScaleSourcedId Body text Yes SourcedId of the reference ScoreScale. oneroster.line_item_score_scales.score_scale_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item score scales row. oneroster.line_item_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.line_item_score_scales.title
item.lineItemSourcedId text Yes SourcedId of the reference LineItem. oneroster.line_item_score_scales.line_item_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.line_item_score_scales.score_scale_sourced_id

oneroster.orgs.create

Create a Organizations record

Creates one /orgs resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/orgs
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/orgs" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-orgs-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this orgs row. oneroster.orgs.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.orgs.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.orgs.date_last_modified
name Body text Yes Name of the organization. oneroster.orgs.name
type Body text Yes Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, and line_ite... oneroster.orgs.type
identifier Body text No Human readable identifier for this org e.g. NCES ID. oneroster.orgs.identifier
parentSourcedId Body text No SourcedId of an Org representing the Parent organization. oneroster.orgs.parent_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One orgs.csv record using OneRoster source field names and _platform metadata. oneroster.orgs
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.orgs
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.orgs.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.orgs.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this orgs row. oneroster.orgs.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.orgs.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.orgs.date_last_modified
item.name text Yes Name of the organization. oneroster.orgs.name
item.type text Yes Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, an... oneroster.orgs.type
item.identifier text No Human readable identifier for this org e.g. NCES ID. oneroster.orgs.identifier
item.parentSourcedId text No SourcedId of an Org representing the Parent organization. oneroster.orgs.parent_sourced_id

oneroster.resources.create

Create a Resources record

Creates one /resources resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/resources
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/resources" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this resources row. oneroster.resources.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.resources.date_last_modified
vendorResourceId Body text Yes Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. oneroster.resources.vendor_resource_id
title Body text No Name of this resource. oneroster.resources.title
roles Body text No Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows. oneroster.resources.roles
importance Body text No Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. oneroster.resources.importance
vendorId Body text No Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. oneroster.resources.vendor_id
applicationId Body text No Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. oneroster.resources.application_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resources.csv record using OneRoster source field names and _platform metadata. oneroster.resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this resources row. oneroster.resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.resources.date_last_modified
item.vendorResourceId text Yes Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. oneroster.resources.vendor_resource_id
item.title text No Name of this resource. oneroster.resources.title
item.roles text No Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows. oneroster.resources.roles
item.importance text No Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. oneroster.resources.importance
item.vendorId text No Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. oneroster.resources.vendor_id
item.applicationId text No Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. oneroster.resources.application_id

oneroster.result_learning_objective_ids.create

Create a Result Learning Objective IDs record

Creates one /resultLearningObjectiveIds resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/resultLearningObjectiveIds
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/resultLearningObjectiveIds" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-result-learning-objective-ids-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this result learning objective ids row. oneroster.result_learning_objective_ids.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_learning_objective_ids.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_learning_objective_ids.date_last_modified
resultSourcedId Body text Yes SourcedId of the parent Result for this learning objective. oneroster.result_learning_objective_ids.result_sourced_id
source Body text Yes Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value whose sou... oneroster.result_learning_objective_ids.source
learningObjectiveId Body text Yes Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. oneroster.result_learning_objective_ids.learning_objective_id
score Body double precision No The optional mastery score supplied as a numeric value. oneroster.result_learning_objective_ids.score
textScore Body text No The optional mastery score supplied as a string. oneroster.result_learning_objective_ids.text_score
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.result_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result learning objective ids row. oneroster.result_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_learning_objective_ids.date_last_modified
item.resultSourcedId text Yes SourcedId of the parent Result for this learning objective. oneroster.result_learning_objective_ids.result_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value... oneroster.result_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. oneroster.result_learning_objective_ids.learning_objective_id
item.score double precision No The optional mastery score supplied as a numeric value. oneroster.result_learning_objective_ids.score
item.textScore text No The optional mastery score supplied as a string. oneroster.result_learning_objective_ids.text_score

oneroster.results.create

Create a Results record

Creates one /results resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/results
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/results" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-results-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
lineItemSourcedId Body text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
studentSourcedId Body text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
scoreStatus Body text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
score Body double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with lineItems r... oneroster.results.score
scoreDate Body date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
comment Body text No Human readable comment about the result. oneroster.results.comment
textScore Body text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot substitut... oneroster.results.text_score
classSourcedId Body text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
inProgress Body text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
incomplete Body text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
late Body text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identity. oneroster.results.late
missing Body text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One results.csv record using OneRoster source field names and _platform metadata. oneroster.results
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.results
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.results.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.results.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
item.lineItemSourcedId text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
item.studentSourcedId text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
item.scoreStatus text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
item.score double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with l... oneroster.results.score
item.scoreDate date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
item.comment text No Human readable comment about the result. oneroster.results.comment
item.textScore text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot... oneroster.results.text_score
item.classSourcedId text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
item.inProgress text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
item.incomplete text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
item.late text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identit... oneroster.results.late
item.missing text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing

oneroster.result_score_scales.create

Create a Result Score Scales record

Creates one /resultScoreScales resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/resultScoreScales
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/resultScoreScales" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-result-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this result score scales row. oneroster.result_score_scales.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_score_scales.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_score_scales.date_last_modified
title Body text No Name of the related scoreScale. oneroster.result_score_scales.title
resultSourcedId Body text Yes SourcedId of the reference Result. oneroster.result_score_scales.result_sourced_id
scoreScaleSourcedId Body text Yes SourcedId of the reference ScoreScale. oneroster.result_score_scales.score_scale_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.result_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result score scales row. oneroster.result_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.result_score_scales.title
item.resultSourcedId text Yes SourcedId of the reference Result. oneroster.result_score_scales.result_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.result_score_scales.score_scale_sourced_id

oneroster.roles.create

Create a Roles record

Creates one /roles resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/roles
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/roles" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-roles-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this roles row. oneroster.roles.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.roles.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.roles.date_last_modified
userSourcedId Body text Yes The user whose role is being defined. oneroster.roles.user_sourced_id
roleType Body text Yes Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window. oneroster.roles.role_type
role Body text Yes Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a class. oneroster.roles.role
beginDate Body date No The start date on which the role became active (inclusive). oneroster.roles.begin_date
endDate Body date No The end date on which the role ceased to be active (exclusive). oneroster.roles.end_date
orgSourcedId Body text Yes SourcedId of the Org within which the User has the assigned role. oneroster.roles.org_sourced_id
userProfileSourcedId Body text No SourcedId of the UserProfile for the User. oneroster.roles.user_profile_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One roles.csv record using OneRoster source field names and _platform metadata. oneroster.roles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.roles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.roles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.roles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this roles row. oneroster.roles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.roles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.roles.date_last_modified
item.userSourcedId text Yes The user whose role is being defined. oneroster.roles.user_sourced_id
item.roleType text Yes Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window. oneroster.roles.role_type
item.role text Yes Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a cl... oneroster.roles.role
item.beginDate date No The start date on which the role became active (inclusive). oneroster.roles.begin_date
item.endDate date No The end date on which the role ceased to be active (exclusive). oneroster.roles.end_date
item.orgSourcedId text Yes SourcedId of the Org within which the User has the assigned role. oneroster.roles.org_sourced_id
item.userProfileSourcedId text No SourcedId of the UserProfile for the User. oneroster.roles.user_profile_sourced_id

oneroster.score_scales.create

Create a Score Scales record

Creates one /scoreScales resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/scoreScales
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/scoreScales" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this score scales row. oneroster.score_scales.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.score_scales.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.score_scales.date_last_modified
title Body text Yes A human readable title for the score scale. oneroster.score_scales.title
type Body text Yes The type of score scaling e.g. percent. oneroster.score_scales.type
orgSourcedId Body text Yes The org for which the score scale is used. oneroster.score_scales.org_sourced_id
courseSourcedId Body text Yes The course for which the score scale is used. oneroster.score_scales.course_sourced_id
classSourcedId Body text Yes The class for which the score scale is used. oneroster.score_scales.class_sourced_id
scoreScaleValue Body text Yes OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell. oneroster.score_scales.score_scale_value
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One scoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this score scales row. oneroster.score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.score_scales.date_last_modified
item.title text Yes A human readable title for the score scale. oneroster.score_scales.title
item.type text Yes The type of score scaling e.g. percent. oneroster.score_scales.type
item.orgSourcedId text Yes The org for which the score scale is used. oneroster.score_scales.org_sourced_id
item.courseSourcedId text Yes The course for which the score scale is used. oneroster.score_scales.course_sourced_id
item.classSourcedId text Yes The class for which the score scale is used. oneroster.score_scales.class_sourced_id
item.scoreScaleValue text Yes OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell. oneroster.score_scales.score_scale_value

oneroster.user_profiles.create

Create a User Profiles record

Creates one /userProfiles resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/userProfiles
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/userProfiles" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-user-profiles-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this user profiles row. oneroster.user_profiles.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_profiles.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_profiles.date_last_modified
userSourcedId Body text Yes Unique ID for the corresponding user. oneroster.user_profiles.user_sourced_id
profileType Body text Yes The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc. oneroster.user_profiles.profile_type
vendorId Body text Yes The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. oneroster.user_profiles.vendor_id
applicationId Body text No The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. oneroster.user_profiles.application_id
description Body text No A human readable description of the use of the account. This should not contain any security information for access to the account. oneroster.user_profiles.description
credentialType Body text Yes The type of credentials for the user profile. This should be indicative of when this credential should be used. oneroster.user_profiles.credential_type
username Body text Yes The username for this profile. oneroster.user_profiles.username
password Body text No The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method. oneroster.user_profiles.password
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userProfiles.csv record using OneRoster source field names and _platform metadata. oneroster.user_profiles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_profiles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_profiles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_profiles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user profiles row. oneroster.user_profiles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_profiles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_profiles.date_last_modified
item.userSourcedId text Yes Unique ID for the corresponding user. oneroster.user_profiles.user_sourced_id
item.profileType text Yes The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc. oneroster.user_profiles.profile_type
item.vendorId text Yes The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. oneroster.user_profiles.vendor_id
item.applicationId text No The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. oneroster.user_profiles.application_id
item.description text No A human readable description of the use of the account. This should not contain any security information for access to the account. oneroster.user_profiles.description
item.credentialType text Yes The type of credentials for the user profile. This should be indicative of when this credential should be used. oneroster.user_profiles.credential_type
item.username text Yes The username for this profile. oneroster.user_profiles.username
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method. oneroster.user_profiles.password

oneroster.user_resources.create

Create a User Resources record

Creates one /userResources resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/userResources
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/userResources" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-user-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this user resources row. oneroster.user_resources.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_resources.date_last_modified
userSourcedId Body text Yes SourcedId of the user who will have access to this resource. oneroster.user_resources.user_sourced_id
orgSourcedId Body text No SourcedId of the reference Organization. oneroster.user_resources.org_sourced_id
classSourcedId Body text No SourcedId of the reference Class. oneroster.user_resources.class_sourced_id
resourceSourcedId Body text Yes SourcedId of the Resource associated with the User. oneroster.user_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userResources.csv record using OneRoster source field names and _platform metadata. oneroster.user_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user resources row. oneroster.user_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_resources.date_last_modified
item.userSourcedId text Yes SourcedId of the user who will have access to this resource. oneroster.user_resources.user_sourced_id
item.orgSourcedId text No SourcedId of the reference Organization. oneroster.user_resources.org_sourced_id
item.classSourcedId text No SourcedId of the reference Class. oneroster.user_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the User. oneroster.user_resources.resource_sourced_id

oneroster.users.create

Create a Users record

Creates one /users resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/users
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/users" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-users-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this users row. oneroster.users.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
enabledUser Body text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat the user as... oneroster.users.enabled_user
username Body text Yes User name. oneroster.users.username
userIds Body text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclosed in '{}'... oneroster.users.user_ids
givenName Body text Yes User's first name. oneroster.users.given_name
familyName Body text Yes User's surname. oneroster.users.family_name
middleName Body text No User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
identifier Body text No Identifier for the user with a human readable meaning. oneroster.users.identifier
email Body text No Email address for the User. oneroster.users.email
sms Body text No SMS address for the User. oneroster.users.sms
phone Body text No Phone number for the User. oneroster.users.phone
agentSourcedIds Body text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for indicating... oneroster.users.agent_sourced_ids
grades Body text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
password Body text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
userMasterIdentifier Body text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is a new col... oneroster.users.user_master_identifier
preferredGivenName Body text No The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
preferredMiddleName Body text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
preferredFamilyName Body text No The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
primaryOrgSourcedId Body text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the primary 'org'.... oneroster.users.primary_org_sourced_id
pronouns Body text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a statement that th... oneroster.users.pronouns
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One users.csv record using OneRoster source field names and _platform metadata. oneroster.users
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.users
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.users.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.users.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this users row. oneroster.users.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
item.enabledUser text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat th... oneroster.users.enabled_user
item.username text Yes User name. oneroster.users.username
item.userIds text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclos... oneroster.users.user_ids
item.givenName text Yes User's first name. oneroster.users.given_name
item.familyName text Yes User's surname. oneroster.users.family_name
item.middleName text No User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
item.identifier text No Identifier for the user with a human readable meaning. oneroster.users.identifier
item.email text No Email address for the User. oneroster.users.email
item.sms text No SMS address for the User. oneroster.users.sms
item.phone text No Phone number for the User. oneroster.users.phone
item.agentSourcedIds text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for i... oneroster.users.agent_sourced_ids
item.grades text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
item.userMasterIdentifier text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is... oneroster.users.user_master_identifier
item.preferredGivenName text No The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
item.preferredMiddleName text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
item.preferredFamilyName text No The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
item.primaryOrgSourcedId text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the prim... oneroster.users.primary_org_sourced_id
item.pronouns text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a stateme... oneroster.users.pronouns

oneroster.grading_periods.create

Create a Grading Periods record

Creates one /gradingPeriods resource without submitting a full CSV package. The body uses OneRoster source field names; _platform fields are generated by the API.

#
Method
POST
Path
/gradingPeriods
Auth
Bearer JWT with write scope; scoped claims may narrow writable schools/classes
Status
201400401403409422429

Trace: OITD-010 OITD-101 OITD-105 OITD-106 OITD-108 OITD-111

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
curl -fsS -X POST "$BASE_URL/gradingPeriods" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: create-grading-periods-001" \
  -H "Content-Type: application/json" \
  --data '{"sourcedId":"demo-resource-001","status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Body text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
title Body text Yes Name or title of the academic session. oneroster.academic_sessions.title
type Body text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
startDate Body date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
endDate Body date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
parentSourcedId Body text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
schoolYear Body integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.academic_sessions.replace

Replace a Academic Sessions record

Replaces one /academicSessions resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/academicSessions/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/academicSessions/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-academic-sessions-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.date_last_modified
title Body text Yes Name or title of the academic session. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.title
type Body text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebo... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.type
startDate Body date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.start_date
endDate Body date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.end_date
parentSourcedId Body text No SourcedId of the parent of this academic session. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.parent_sourced_id
schoolYear Body integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.school_year
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.categories.replace

Replace a Categories record

Replaces one /categories resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/categories/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/categories/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-categories-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.categories.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.categories.date_last_modified
title Body text Yes The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.categories.title
weight Body integer No Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column ad... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.categories.weight
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One categories.csv record using OneRoster source field names and _platform metadata. oneroster.categories
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.categories
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.categories.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.categories.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this categories row. oneroster.categories.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.categories.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.categories.date_last_modified
item.title text Yes The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. oneroster.categories.title
item.weight integer No Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2. oneroster.categories.weight

oneroster.classes.replace

Replace a Classes record

Replaces one /classes resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/classes/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/classes/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-classes-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.date_last_modified
title Body text Yes Name of this class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.title
grades Body text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specific... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.grades
courseSourcedId Body text Yes SourcedId of the course of which this class is an instance. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.course_sourced_id
classCode Body text No Human readable code used to help identify this class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.class_code
classType Body text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same cour... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.class_type
location Body text No Human readable description of where the class is physically located. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.location
schoolSourcedId Body text Yes SourcedId of the Org that teaches this class of OrgType 'school'. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.school_sourced_id
termSourcedIds Body text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.term_sourced_ids
subjects Body text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the s... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.subjects
subjectCodes Body text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC41... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.subject_codes
periods Body text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.classes.periods
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classes.csv record using OneRoster source field names and _platform metadata. oneroster.classes
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.classes
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.classes.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.classes.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
item.title text Yes Name of this class. oneroster.classes.title
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
item.courseSourcedId text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
item.classCode text No Human readable code used to help identify this class. oneroster.classes.class_code
item.classType text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
item.location text No Human readable description of where the class is physically located. oneroster.classes.location
item.schoolSourcedId text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
item.termSourcedIds text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.classes.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.classes.subject_codes
item.periods text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods

oneroster.class_resources.replace

Replace a Class Resources record

Replaces one /classResources resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/classResources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/classResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-class-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.class_resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.class_resources.date_last_modified
title Body text No Name of the related class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.class_resources.title
classSourcedId Body text Yes SourcedId of the reference Class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.class_resources.class_sourced_id
resourceSourcedId Body text Yes SourcedId of the Resource associated with the Class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.class_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classResources.csv record using OneRoster source field names and _platform metadata. oneroster.class_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.class_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.class_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.class_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this class resources row. oneroster.class_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.class_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.class_resources.date_last_modified
item.title text No Name of the related class. oneroster.class_resources.title
item.classSourcedId text Yes SourcedId of the reference Class. oneroster.class_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Class. oneroster.class_resources.resource_sourced_id

oneroster.course_resources.replace

Replace a Course Resources record

Replaces one /courseResources resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/courseResources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/courseResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-course-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.course_resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.course_resources.date_last_modified
title Body text No Name of the related class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.course_resources.title
courseSourcedId Body text Yes SourcedId of the reference Course. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.course_resources.course_sourced_id
resourceSourcedId Body text Yes SourcedId of the Resource associated with the Course. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.course_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courseResources.csv record using OneRoster source field names and _platform metadata. oneroster.course_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.course_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.course_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.course_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this course resources row. oneroster.course_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.course_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.course_resources.date_last_modified
item.title text No Name of the related class. oneroster.course_resources.title
item.courseSourcedId text Yes SourcedId of the reference Course. oneroster.course_resources.course_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Course. oneroster.course_resources.resource_sourced_id

oneroster.courses.replace

Replace a Courses record

Replaces one /courses resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/courses/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/courses/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-courses-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.date_last_modified
schoolYearSourcedId Body text No SourcedId of the associated AcademicSession with type of 'schoolYear'. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.school_year_sourced_id
title Body text Yes Name of this course. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.title
courseCode Body text No Human readable code used to help identify this course. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.course_code
grades Body text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specific... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.grades
orgSourcedId Body text Yes SourcedId of an org to which this course belongs. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.org_sourced_id
subjects Body text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the s... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.subjects
subjectCodes Body text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC41... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.courses.subject_codes
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courses.csv record using OneRoster source field names and _platform metadata. oneroster.courses
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.courses
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.courses.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.courses.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this courses row. oneroster.courses.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.courses.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.courses.date_last_modified
item.schoolYearSourcedId text No SourcedId of the associated AcademicSession with type of 'schoolYear'. oneroster.courses.school_year_sourced_id
item.title text Yes Name of this course. oneroster.courses.title
item.courseCode text No Human readable code used to help identify this course. oneroster.courses.course_code
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.courses.grades
item.orgSourcedId text Yes SourcedId of an org to which this course belongs. oneroster.courses.org_sourced_id
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.courses.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.courses.subject_codes

oneroster.demographics.replace

Replace a Demographics record

Replaces one /demographics resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/demographics/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/demographics/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-demographics-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.date_last_modified
birthDate Body date No The date of birth. ISO 861 format: 'YYYY-MM-DD'. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.birth_date
sex Body text No Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; un... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.sex
americanIndianOrAlaskaNative Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.american_indian_or_alaska_native
asian Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race ind... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.asian
blackOrAfricanAmerican Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race fla... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.black_or_african_american
nativeHawaiianOrOtherPacificIslander Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race fla... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.native_hawaiian_or_other_pacific_islander
white Body text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstr... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.white
demographicRaceTwoOrMoreRaces Body text No OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts m... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.demographic_race_two_or_more_races
hispanicOrLatinoEthnicity Body text No Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may b... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.hispanic_or_latino_ethnicity
countryOfBirthCode Body text No Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.country_of_birth_code
stateOfBirthAbbreviation Body text No State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.state_of_birth_abbreviation
cityOfBirth Body text No City where the user was born. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.city_of_birth
publicSchoolResidenceStatus Body text No An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.demographics.public_school_residence_status
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One demographics.csv record using OneRoster source field names and _platform metadata. oneroster.demographics
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.demographics
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.demographics.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.demographics.import_batch_id
item.sourcedId text Yes The user's sourcedId; in demographics.csv this is the same identifier as the user whose demographics are being described. oneroster.demographics.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.demographics.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.demographics.date_last_modified
item.birthDate date No The date of birth. ISO 861 format: 'YYYY-MM-DD'. oneroster.demographics.birth_date
item.sex text No Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source... oneroster.demographics.sex
item.americanIndianOrAlaskaNative text No Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is... oneroster.demographics.american_indian_or_alaska_native
item.asian text No Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as... oneroster.demographics.asian
item.blackOrAfricanAmerican text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race... oneroster.demographics.black_or_african_american
item.nativeHawaiianOrOtherPacificIslander text No Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a sing... oneroster.demographics.native_hawaiian_or_other_pacific_islander
item.white text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect eac... oneroster.demographics.white
item.demographicRaceTwoOrMoreRaces text No OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the... oneroster.demographics.demographic_race_two_or_more_races
item.hispanicOrLatinoEthnicity text No Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is... oneroster.demographics.hispanic_or_latino_ethnicity
item.countryOfBirthCode text No Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.country_of_birth_code
item.stateOfBirthAbbreviation text No State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.state_of_birth_abbreviation
item.cityOfBirth text No City where the user was born. oneroster.demographics.city_of_birth
item.publicSchoolResidenceStatus text No An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted... oneroster.demographics.public_school_residence_status

oneroster.enrollments.replace

Replace a Enrollments record

Replaces one /enrollments resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/enrollments/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/enrollments/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-enrollments-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.date_last_modified
classSourcedId Body text Yes SourcedId of the Class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.class_sourced_id
schoolSourcedId Body text Yes SourcedId of an Org with type 'school'. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.school_sourced_id
userSourcedId Body text Yes SourcedId of the User. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.user_sourced_id
role Body text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administra... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.role
primary Body text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for th... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.primary
beginDate Body date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.begin_date
endDate Body date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.enrollments.end_date
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One enrollments.csv record using OneRoster source field names and _platform metadata. oneroster.enrollments
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.enrollments
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.enrollments.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.enrollments.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this enrollments row. oneroster.enrollments.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
item.classSourcedId text Yes SourcedId of the Class. oneroster.enrollments.class_sourced_id
item.schoolSourcedId text Yes SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
item.userSourcedId text Yes SourcedId of the User. oneroster.enrollments.user_sourced_id
item.role text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and mus... oneroster.enrollments.role
item.primary text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proc... oneroster.enrollments.primary
item.beginDate date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
item.endDate date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date

oneroster.line_item_learning_objective_ids.replace

Replace a Line Item Learning Objective IDs record

Replaces one /lineItemLearningObjectiveIds resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/lineItemLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/lineItemLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-line-item-learning-objective-ids-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_learning_objective_ids.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_learning_objective_ids.date_last_modified
lineItemSourcedId Body text Yes SourcedId of the parent LineItem for this learning objective. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_learning_objective_ids.line_item_sourced_id
source Body text Yes Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE i... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_learning_objective_ids.source
learningObjectiveId Body text Yes Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_learning_objective_ids.learning_objective_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item learning objective ids row. oneroster.line_item_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_learning_objective_ids.date_last_modified
item.lineItemSourcedId text Yes SourcedId of the parent LineItem for this learning objective. oneroster.line_item_learning_objective_ids.line_item_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender va... oneroster.line_item_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. oneroster.line_item_learning_objective_ids.learning_objective_id

oneroster.line_items.replace

Replace a Line Items record

Replaces one /lineItems resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/lineItems/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/lineItems/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-line-items-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.date_last_modified
title Body text Yes The title assigned to the lineItem. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.title
description Body text No Short description of the role of the lineItem. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.description
assignDate Body date Yes Date the associated activity was assigned. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.assign_date
dueDate Body date Yes Date the associated activity is due to be completed. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.due_date
classSourcedId Body text Yes SourcedId of the Class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.class_sourced_id
categorySourcedId Body text Yes SourcedId of the Category. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.category_sourced_id
academicSessionSourcedId Body text Yes SourcedId of the academicSession to which the lineItem is based. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.academic_session_sourced_id
resultValueMin Body double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.result_value_min
resultValueMax Body double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.result_value_max
schoolSourcedId Body text Yes SourcedId of the School. This is a new column added in version 1.2. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_items.school_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItems.csv record using OneRoster source field names and _platform metadata. oneroster.line_items
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_items
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_items.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_items.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line items row. oneroster.line_items.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
item.title text Yes The title assigned to the lineItem. oneroster.line_items.title
item.description text No Short description of the role of the lineItem. oneroster.line_items.description
item.assignDate date Yes Date the associated activity was assigned. oneroster.line_items.assign_date
item.dueDate date Yes Date the associated activity is due to be completed. oneroster.line_items.due_date
item.classSourcedId text Yes SourcedId of the Class. oneroster.line_items.class_sourced_id
item.categorySourcedId text Yes SourcedId of the Category. oneroster.line_items.category_sourced_id
item.academicSessionSourcedId text Yes SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
item.resultValueMin double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
item.resultValueMax double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
item.schoolSourcedId text Yes SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id

oneroster.line_item_score_scales.replace

Replace a Line Item Score Scales record

Replaces one /lineItemScoreScales resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/lineItemScoreScales/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/lineItemScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-line-item-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_score_scales.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_score_scales.date_last_modified
title Body text No Name of the related scoreScale. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_score_scales.title
lineItemSourcedId Body text Yes SourcedId of the reference LineItem. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_score_scales.line_item_sourced_id
scoreScaleSourcedId Body text Yes SourcedId of the reference ScoreScale. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.line_item_score_scales.score_scale_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item score scales row. oneroster.line_item_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.line_item_score_scales.title
item.lineItemSourcedId text Yes SourcedId of the reference LineItem. oneroster.line_item_score_scales.line_item_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.line_item_score_scales.score_scale_sourced_id

oneroster.orgs.replace

Replace a Organizations record

Replaces one /orgs resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/orgs/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/orgs/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-orgs-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.orgs.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.orgs.date_last_modified
name Body text Yes Name of the organization. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.orgs.name
type Body text Yes Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourc... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.orgs.type
identifier Body text No Human readable identifier for this org e.g. NCES ID. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.orgs.identifier
parentSourcedId Body text No SourcedId of an Org representing the Parent organization. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.orgs.parent_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One orgs.csv record using OneRoster source field names and _platform metadata. oneroster.orgs
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.orgs
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.orgs.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.orgs.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this orgs row. oneroster.orgs.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.orgs.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.orgs.date_last_modified
item.name text Yes Name of the organization. oneroster.orgs.name
item.type text Yes Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, an... oneroster.orgs.type
item.identifier text No Human readable identifier for this org e.g. NCES ID. oneroster.orgs.identifier
item.parentSourcedId text No SourcedId of an Org representing the Parent organization. oneroster.orgs.parent_sourced_id

oneroster.resources.replace

Replace a Resources record

Replaces one /resources resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/resources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/resources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.date_last_modified
vendorResourceId Body text Yes Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.vendor_resource_id
title Body text No Name of this resource. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.title
roles Body text No Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource witho... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.roles
importance Body text No Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.importance
vendorId Body text No Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.vendor_id
applicationId Body text No Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.resources.application_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resources.csv record using OneRoster source field names and _platform metadata. oneroster.resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this resources row. oneroster.resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.resources.date_last_modified
item.vendorResourceId text Yes Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. oneroster.resources.vendor_resource_id
item.title text No Name of this resource. oneroster.resources.title
item.roles text No Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows. oneroster.resources.roles
item.importance text No Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. oneroster.resources.importance
item.vendorId text No Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. oneroster.resources.vendor_id
item.applicationId text No Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. oneroster.resources.application_id

oneroster.result_learning_objective_ids.replace

Replace a Result Learning Objective IDs record

Replaces one /resultLearningObjectiveIds resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/resultLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/resultLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-result-learning-objective-ids-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_learning_objective_ids.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_learning_objective_ids.date_last_modified
resultSourcedId Body text Yes SourcedId of the parent Result for this learning objective. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_learning_objective_ids.result_sourced_id
source Body text Yes Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE iden... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_learning_objective_ids.source
learningObjectiveId Body text Yes Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_learning_objective_ids.learning_objective_id
score Body double precision No The optional mastery score supplied as a numeric value. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_learning_objective_ids.score
textScore Body text No The optional mastery score supplied as a string. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_learning_objective_ids.text_score
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.result_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result learning objective ids row. oneroster.result_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_learning_objective_ids.date_last_modified
item.resultSourcedId text Yes SourcedId of the parent Result for this learning objective. oneroster.result_learning_objective_ids.result_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value... oneroster.result_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. oneroster.result_learning_objective_ids.learning_objective_id
item.score double precision No The optional mastery score supplied as a numeric value. oneroster.result_learning_objective_ids.score
item.textScore text No The optional mastery score supplied as a string. oneroster.result_learning_objective_ids.text_score

oneroster.results.replace

Replace a Results record

Replaces one /results resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/results/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/results/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-results-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.date_last_modified
lineItemSourcedId Body text Yes Unique identifier of the lineItem. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.line_item_sourced_id
studentSourcedId Body text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.student_sourced_id
scoreStatus Body text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing wo... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.score_status
score Body double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before per... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.score
scoreDate Body date Yes The date the result was submitted and/or the 'scoreStatus' was changed. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.score_date
comment Body text No Human readable comment about the result. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.comment
textScore Body text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale bef... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.text_score
classSourcedId Body text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.class_sourced_id
inProgress Body text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpret... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.in_progress
incomplete Body text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolve... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.incomplete
late Body text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not chang... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.late
missing Body text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score;... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.results.missing
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One results.csv record using OneRoster source field names and _platform metadata. oneroster.results
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.results
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.results.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.results.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
item.lineItemSourcedId text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
item.studentSourcedId text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
item.scoreStatus text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
item.score double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with l... oneroster.results.score
item.scoreDate date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
item.comment text No Human readable comment about the result. oneroster.results.comment
item.textScore text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot... oneroster.results.text_score
item.classSourcedId text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
item.inProgress text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
item.incomplete text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
item.late text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identit... oneroster.results.late
item.missing text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing

oneroster.result_score_scales.replace

Replace a Result Score Scales record

Replaces one /resultScoreScales resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/resultScoreScales/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/resultScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-result-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_score_scales.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_score_scales.date_last_modified
title Body text No Name of the related scoreScale. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_score_scales.title
resultSourcedId Body text Yes SourcedId of the reference Result. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_score_scales.result_sourced_id
scoreScaleSourcedId Body text Yes SourcedId of the reference ScoreScale. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.result_score_scales.score_scale_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.result_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result score scales row. oneroster.result_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.result_score_scales.title
item.resultSourcedId text Yes SourcedId of the reference Result. oneroster.result_score_scales.result_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.result_score_scales.score_scale_sourced_id

oneroster.roles.replace

Replace a Roles record

Replaces one /roles resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/roles/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/roles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-roles-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.date_last_modified
userSourcedId Body text Yes The user whose role is being defined. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.user_sourced_id
roleType Body text Yes Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date w... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.role_type
role Body text Yes Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enr... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.role
beginDate Body date No The start date on which the role became active (inclusive). Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.begin_date
endDate Body date No The end date on which the role ceased to be active (exclusive). Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.end_date
orgSourcedId Body text Yes SourcedId of the Org within which the User has the assigned role. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.org_sourced_id
userProfileSourcedId Body text No SourcedId of the UserProfile for the User. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.roles.user_profile_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One roles.csv record using OneRoster source field names and _platform metadata. oneroster.roles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.roles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.roles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.roles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this roles row. oneroster.roles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.roles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.roles.date_last_modified
item.userSourcedId text Yes The user whose role is being defined. oneroster.roles.user_sourced_id
item.roleType text Yes Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window. oneroster.roles.role_type
item.role text Yes Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a cl... oneroster.roles.role
item.beginDate date No The start date on which the role became active (inclusive). oneroster.roles.begin_date
item.endDate date No The end date on which the role ceased to be active (exclusive). oneroster.roles.end_date
item.orgSourcedId text Yes SourcedId of the Org within which the User has the assigned role. oneroster.roles.org_sourced_id
item.userProfileSourcedId text No SourcedId of the UserProfile for the User. oneroster.roles.user_profile_sourced_id

oneroster.score_scales.replace

Replace a Score Scales record

Replaces one /scoreScales resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/scoreScales/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/scoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.date_last_modified
title Body text Yes A human readable title for the score scale. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.title
type Body text Yes The type of score scaling e.g. percent. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.type
orgSourcedId Body text Yes The org for which the score scale is used. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.org_sourced_id
courseSourcedId Body text Yes The course for which the score scale is used. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.course_sourced_id
classSourcedId Body text Yes The class for which the score scale is used. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.class_sourced_id
scoreScaleValue Body text Yes OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.score_scales.score_scale_value
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One scoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this score scales row. oneroster.score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.score_scales.date_last_modified
item.title text Yes A human readable title for the score scale. oneroster.score_scales.title
item.type text Yes The type of score scaling e.g. percent. oneroster.score_scales.type
item.orgSourcedId text Yes The org for which the score scale is used. oneroster.score_scales.org_sourced_id
item.courseSourcedId text Yes The course for which the score scale is used. oneroster.score_scales.course_sourced_id
item.classSourcedId text Yes The class for which the score scale is used. oneroster.score_scales.class_sourced_id
item.scoreScaleValue text Yes OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell. oneroster.score_scales.score_scale_value

oneroster.user_profiles.replace

Replace a User Profiles record

Replaces one /userProfiles resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/userProfiles/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/userProfiles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-user-profiles-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.date_last_modified
userSourcedId Body text Yes Unique ID for the corresponding user. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.user_sourced_id
profileType Body text Yes The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool,... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.profile_type
vendorId Body text Yes The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.vendor_id
applicationId Body text No The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.application_id
description Body text No A human readable description of the use of the account. This should not contain any security information for access to the account. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.description
credentialType Body text Yes The type of credentials for the user profile. This should be indicative of when this credential should be used. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.credential_type
username Body text Yes The username for this profile. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.username
password Body text No The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_profiles.password
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userProfiles.csv record using OneRoster source field names and _platform metadata. oneroster.user_profiles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_profiles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_profiles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_profiles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user profiles row. oneroster.user_profiles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_profiles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_profiles.date_last_modified
item.userSourcedId text Yes Unique ID for the corresponding user. oneroster.user_profiles.user_sourced_id
item.profileType text Yes The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc. oneroster.user_profiles.profile_type
item.vendorId text Yes The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. oneroster.user_profiles.vendor_id
item.applicationId text No The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. oneroster.user_profiles.application_id
item.description text No A human readable description of the use of the account. This should not contain any security information for access to the account. oneroster.user_profiles.description
item.credentialType text Yes The type of credentials for the user profile. This should be indicative of when this credential should be used. oneroster.user_profiles.credential_type
item.username text Yes The username for this profile. oneroster.user_profiles.username
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method. oneroster.user_profiles.password

oneroster.user_resources.replace

Replace a User Resources record

Replaces one /userResources resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/userResources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/userResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-user-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_resources.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_resources.date_last_modified
userSourcedId Body text Yes SourcedId of the user who will have access to this resource. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_resources.user_sourced_id
orgSourcedId Body text No SourcedId of the reference Organization. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_resources.org_sourced_id
classSourcedId Body text No SourcedId of the reference Class. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_resources.class_sourced_id
resourceSourcedId Body text Yes SourcedId of the Resource associated with the User. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.user_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userResources.csv record using OneRoster source field names and _platform metadata. oneroster.user_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user resources row. oneroster.user_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_resources.date_last_modified
item.userSourcedId text Yes SourcedId of the user who will have access to this resource. oneroster.user_resources.user_sourced_id
item.orgSourcedId text No SourcedId of the reference Organization. oneroster.user_resources.org_sourced_id
item.classSourcedId text No SourcedId of the reference Class. oneroster.user_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the User. oneroster.user_resources.resource_sourced_id

oneroster.users.replace

Replace a Users record

Replaces one /users resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/users/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/users/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-users-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.date_last_modified
enabledUser Body text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster iden... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.enabled_user
username Body text Yes User name. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.username
userIds Body text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Ident... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.user_ids
givenName Body text Yes User's first name. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.given_name
familyName Body text Yes User's surname. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.family_name
middleName Body text No User's middle name(s). If more than one then they are separated by a space. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.middle_name
identifier Body text No Identifier for the user with a human readable meaning. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.identifier
email Body text No Email address for the User. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.email
sms Body text No SMS address for the User. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.sms
phone Body text No Phone number for the User. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.phone
agentSourcedIds Body text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.agent_sourced_ids
grades Body text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.grades
password Body text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption m... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.password
userMasterIdentifier Body text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc.... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.user_master_identifier
preferredGivenName Body text No The given name by which the User prefers to be known. This is a new column added in version 1.2. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.preferred_given_name
preferredMiddleName Body text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.preferred_middle_name
preferredFamilyName Body text No The family name by which the User prefers to be known. This is a new column added in version 1.2. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.preferred_family_name
primaryOrgSourcedId Body text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field ca... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.primary_org_sourced_id
pronouns Body text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/their... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.users.pronouns
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One users.csv record using OneRoster source field names and _platform metadata. oneroster.users
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.users
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.users.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.users.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this users row. oneroster.users.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
item.enabledUser text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat th... oneroster.users.enabled_user
item.username text Yes User name. oneroster.users.username
item.userIds text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclos... oneroster.users.user_ids
item.givenName text Yes User's first name. oneroster.users.given_name
item.familyName text Yes User's surname. oneroster.users.family_name
item.middleName text No User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
item.identifier text No Identifier for the user with a human readable meaning. oneroster.users.identifier
item.email text No Email address for the User. oneroster.users.email
item.sms text No SMS address for the User. oneroster.users.sms
item.phone text No Phone number for the User. oneroster.users.phone
item.agentSourcedIds text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for i... oneroster.users.agent_sourced_ids
item.grades text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
item.userMasterIdentifier text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is... oneroster.users.user_master_identifier
item.preferredGivenName text No The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
item.preferredMiddleName text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
item.preferredFamilyName text No The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
item.primaryOrgSourcedId text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the prim... oneroster.users.primary_org_sourced_id
item.pronouns text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a stateme... oneroster.users.pronouns

oneroster.grading_periods.replace

Replace a Grading Periods record

Replaces one /gradingPeriods resource. The client must first read the resource, keep its ETag, and send that value in If-Match.

#
Method
PUT
Path
/gradingPeriods/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PUT "$BASE_URL/gradingPeriods/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: replace-grading-periods-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text Conditional Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.status
dateLastModified Body timestamptz Conditional Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.date_last_modified
title Body text Yes Name or title of the academic session. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.title
type Body text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebo... Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.type
startDate Body date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.start_date
endDate Body date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.end_date
parentSourcedId Body text No SourcedId of the parent of this academic session. Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.parent_sourced_id
schoolYear Body integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). Path sourcedId identifies the row; body sourcedId is omitted to avoid mismatches. oneroster.academic_sessions.school_year
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.academic_sessions.patch

Patch a Academic Sessions record

Partially updates one /academicSessions resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/academicSessions/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/academicSessions/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-academic-sessions-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
title Body text No; at least one mutable field is required Name or title of the academic session. oneroster.academic_sessions.title
type Body text No; at least one mutable field is required Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
startDate Body date No; at least one mutable field is required Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
endDate Body date No; at least one mutable field is required Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
parentSourcedId Body text No; at least one mutable field is required SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
schoolYear Body integer No; at least one mutable field is required The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.categories.patch

Patch a Categories record

Partially updates one /categories resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/categories/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/categories/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-categories-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.categories.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.categories.date_last_modified
title Body text No; at least one mutable field is required The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. oneroster.categories.title
weight Body integer No; at least one mutable field is required Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2. oneroster.categories.weight
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One categories.csv record using OneRoster source field names and _platform metadata. oneroster.categories
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.categories
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.categories.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.categories.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this categories row. oneroster.categories.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.categories.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.categories.date_last_modified
item.title text Yes The title assigned to the set of lineItems to denote its nature e.g. homework, essays, etc. oneroster.categories.title
item.weight integer No Total weight of this grading category in calculation of course final score. This is a Percent value only, e.g. 80%. This is a new column added in version 1.2. oneroster.categories.weight

oneroster.classes.patch

Patch a Classes record

Partially updates one /classes resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/classes/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/classes/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-classes-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
title Body text No; at least one mutable field is required Name of this class. oneroster.classes.title
grades Body text No; at least one mutable field is required Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
courseSourcedId Body text No; at least one mutable field is required SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
classCode Body text No; at least one mutable field is required Human readable code used to help identify this class. oneroster.classes.class_code
classType Body text No; at least one mutable field is required Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
location Body text No; at least one mutable field is required Human readable description of where the class is physically located. oneroster.classes.location
schoolSourcedId Body text No; at least one mutable field is required SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
termSourcedIds Body text No; at least one mutable field is required SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
subjects Body text No; at least one mutable field is required Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance. The permit... oneroster.classes.subjects
subjectCodes Body text No; at least one mutable field is required Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is present the t... oneroster.classes.subject_codes
periods Body text No; at least one mutable field is required The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classes.csv record using OneRoster source field names and _platform metadata. oneroster.classes
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.classes
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.classes.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.classes.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this classes row. oneroster.classes.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.classes.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.classes.date_last_modified
item.title text Yes Name of this class. oneroster.classes.title
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.classes.grades
item.courseSourcedId text Yes SourcedId of the course of which this class is an instance. oneroster.classes.course_sourced_id
item.classCode text No Human readable code used to help identify this class. oneroster.classes.class_code
item.classType text Yes Class scheduling category. scheduled is an ordinary instructional section; homeroom is a homeroom grouping that may not carry the same course schedule semantics. oneroster.classes.class_type
item.location text No Human readable description of where the class is physically located. oneroster.classes.location
item.schoolSourcedId text Yes SourcedId of the Org that teaches this class of OrgType 'school'. oneroster.classes.school_sourced_id
item.termSourcedIds text Yes SourcedIds of the terms (the academicSessions) in which the class is taught. oneroster.classes.term_sourced_ids
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.classes.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.classes.subject_codes
item.periods text No The time slots in the day that the class will be given. If more than one period is needed, use double quotes, and separate with commas (per [RFC4180]). Examples: 1; "1,3,5" oneroster.classes.periods

oneroster.class_resources.patch

Patch a Class Resources record

Partially updates one /classResources resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/classResources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/classResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-class-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.class_resources.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.class_resources.date_last_modified
title Body text No; at least one mutable field is required Name of the related class. oneroster.class_resources.title
classSourcedId Body text No; at least one mutable field is required SourcedId of the reference Class. oneroster.class_resources.class_sourced_id
resourceSourcedId Body text No; at least one mutable field is required SourcedId of the Resource associated with the Class. oneroster.class_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One classResources.csv record using OneRoster source field names and _platform metadata. oneroster.class_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.class_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.class_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.class_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this class resources row. oneroster.class_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.class_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.class_resources.date_last_modified
item.title text No Name of the related class. oneroster.class_resources.title
item.classSourcedId text Yes SourcedId of the reference Class. oneroster.class_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Class. oneroster.class_resources.resource_sourced_id

oneroster.course_resources.patch

Patch a Course Resources record

Partially updates one /courseResources resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/courseResources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/courseResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-course-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.course_resources.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.course_resources.date_last_modified
title Body text No; at least one mutable field is required Name of the related class. oneroster.course_resources.title
courseSourcedId Body text No; at least one mutable field is required SourcedId of the reference Course. oneroster.course_resources.course_sourced_id
resourceSourcedId Body text No; at least one mutable field is required SourcedId of the Resource associated with the Course. oneroster.course_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courseResources.csv record using OneRoster source field names and _platform metadata. oneroster.course_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.course_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.course_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.course_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this course resources row. oneroster.course_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.course_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.course_resources.date_last_modified
item.title text No Name of the related class. oneroster.course_resources.title
item.courseSourcedId text Yes SourcedId of the reference Course. oneroster.course_resources.course_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the Course. oneroster.course_resources.resource_sourced_id

oneroster.courses.patch

Patch a Courses record

Partially updates one /courses resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/courses/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/courses/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-courses-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.courses.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.courses.date_last_modified
schoolYearSourcedId Body text No; at least one mutable field is required SourcedId of the associated AcademicSession with type of 'schoolYear'. oneroster.courses.school_year_sourced_id
title Body text No; at least one mutable field is required Name of this course. oneroster.courses.title
courseCode Body text No; at least one mutable field is required Human readable code used to help identify this course. oneroster.courses.course_code
grades Body text No; at least one mutable field is required Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.courses.grades
orgSourcedId Body text No; at least one mutable field is required SourcedId of an org to which this course belongs. oneroster.courses.org_sourced_id
subjects Body text No; at least one mutable field is required Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance. The permit... oneroster.courses.subjects
subjectCodes Body text No; at least one mutable field is required Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is present the t... oneroster.courses.subject_codes
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One courses.csv record using OneRoster source field names and _platform metadata. oneroster.courses
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.courses
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.courses.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.courses.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this courses row. oneroster.courses.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.courses.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.courses.date_last_modified
item.schoolYearSourcedId text No SourcedId of the associated AcademicSession with type of 'schoolYear'. oneroster.courses.school_year_sourced_id
item.title text Yes Name of this course. oneroster.courses.title
item.courseCode text No Human readable code used to help identify this course. oneroster.courses.course_code
item.grades text No Grade(s) for which the class is attended. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.courses.grades
item.orgSourcedId text Yes SourcedId of an org to which this course belongs. oneroster.courses.org_sourced_id
item.subjects text No Subject name(s) in human readable form. If the 'subjectCodes' attribute is present then the subjects and subjectCodes lists must have the same length and have order significance.... oneroster.courses.subjects
item.subjectCodes text No Subject codes(s) in machine readable form. If more than one subject code is needed, use double quotes, and separate with commas (per [RFC4180]). If the 'subjects' attribute is pre... oneroster.courses.subject_codes

oneroster.demographics.patch

Patch a Demographics record

Partially updates one /demographics resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/demographics/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/demographics/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-demographics-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.demographics.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.demographics.date_last_modified
birthDate Body date No; at least one mutable field is required The date of birth. ISO 861 format: 'YYYY-MM-DD'. oneroster.demographics.birth_date
sex Body text No; at least one mutable field is required Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source value rath... oneroster.demographics.sex
americanIndianOrAlaskaNative Body text No; at least one mutable field is required Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is demograph... oneroster.demographics.american_indian_or_alaska_native
asian Body text No; at least one mutable field is required Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as sensitive... oneroster.demographics.asian
blackOrAfricanAmerican Body text No; at least one mutable field is required Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race_two_or_mo... oneroster.demographics.black_or_african_american
nativeHawaiianOrOtherPacificIslander Body text No; at least one mutable field is required Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a single display... oneroster.demographics.native_hawaiian_or_other_pacific_islander
white Body text No; at least one mutable field is required Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect each race cat... oneroster.demographics.white
demographicRaceTwoOrMoreRaces Body text No; at least one mutable field is required OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the individual... oneroster.demographics.demographic_race_two_or_more_races
hispanicOrLatinoEthnicity Body text No; at least one mutable field is required Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is high-risk... oneroster.demographics.hispanic_or_latino_ethnicity
countryOfBirthCode Body text No; at least one mutable field is required Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.country_of_birth_code
stateOfBirthAbbreviation Body text No; at least one mutable field is required State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.state_of_birth_abbreviation
cityOfBirth Body text No; at least one mutable field is required City where the user was born. oneroster.demographics.city_of_birth
publicSchoolResidenceStatus Body text No; at least one mutable field is required An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted vocabulary... oneroster.demographics.public_school_residence_status
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One demographics.csv record using OneRoster source field names and _platform metadata. oneroster.demographics
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.demographics
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.demographics.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.demographics.import_batch_id
item.sourcedId text Yes The user's sourcedId; in demographics.csv this is the same identifier as the user whose demographics are being described. oneroster.demographics.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.demographics.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.demographics.date_last_modified
item.birthDate date No The date of birth. ISO 861 format: 'YYYY-MM-DD'. oneroster.demographics.birth_date
item.sex text No Sex value reported by the source system for the user described by demographics.sourced_id. It is a sensitive demographic exchange field; unspecified preserves a deliberate source... oneroster.demographics.sex
item.americanIndianOrAlaskaNative text No Race category flag reported by the source system for the user described by demographics.sourced_id. This is one of several race indicators that may be true at the same time; it is... oneroster.demographics.american_indian_or_alaska_native
item.asian text No Race category flag reported by the source system for the user described by demographics.sourced_id. It can be true alongside other race indicators, and consumers must treat it as... oneroster.demographics.asian
item.blackOrAfricanAmerican text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is independent of the other race flags and may coexist with demographic_race... oneroster.demographics.black_or_african_american
item.nativeHawaiianOrOtherPacificIslander text No Race category flag reported by the source system for the user described by demographics.sourced_id. It may be true alongside other race flags and must not be collapsed into a sing... oneroster.demographics.native_hawaiian_or_other_pacific_islander
item.white text No Race category flag reported by the source system for the user described by demographics.sourced_id. It is preserved exactly because downstream compliance reports often inspect eac... oneroster.demographics.white
item.demographicRaceTwoOrMoreRaces text No OneRoster's explicit indicator that the source reports the user in two or more race categories. It should be true when the source asserts multi-race status; it does not erase the... oneroster.demographics.demographic_race_two_or_more_races
item.hispanicOrLatinoEthnicity text No Ethnicity indicator reported by the source system for the user described by demographics.sourced_id. It is independent of race flags, may be true with any race combination, and is... oneroster.demographics.hispanic_or_latino_ethnicity
item.countryOfBirthCode text No Country where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.country_of_birth_code
item.stateOfBirthAbbreviation text No State where the user was born. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.demographics.state_of_birth_abbreviation
item.cityOfBirth text No City where the user was born. oneroster.demographics.city_of_birth
item.publicSchoolResidenceStatus text No An indication of the location of the users legal residence relative to (within or outside) the boundaries of the public school attended and its administrative unit. The permitted... oneroster.demographics.public_school_residence_status

oneroster.enrollments.patch

Patch a Enrollments record

Partially updates one /enrollments resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/enrollments/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/enrollments/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-enrollments-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
classSourcedId Body text No; at least one mutable field is required SourcedId of the Class. oneroster.enrollments.class_sourced_id
schoolSourcedId Body text No; at least one mutable field is required SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
userSourcedId Body text No; at least one mutable field is required SourcedId of the User. oneroster.enrollments.user_sourced_id
role Body text No; at least one mutable field is required The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and must match th... oneroster.enrollments.role
primary Body text No; at least one mutable field is required Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proctor, and a... oneroster.enrollments.primary
beginDate Body date No; at least one mutable field is required The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
endDate Body date No; at least one mutable field is required The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One enrollments.csv record using OneRoster source field names and _platform metadata. oneroster.enrollments
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.enrollments
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.enrollments.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.enrollments.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this enrollments row. oneroster.enrollments.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.enrollments.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.enrollments.date_last_modified
item.classSourcedId text Yes SourcedId of the Class. oneroster.enrollments.class_sourced_id
item.schoolSourcedId text Yes SourcedId of an Org with type 'school'. oneroster.enrollments.school_sourced_id
item.userSourcedId text Yes SourcedId of the User. oneroster.enrollments.user_sourced_id
item.role text Yes The user's class-level membership role for this enrollment. It drives whether the row represents a learner, teacher, proctor, or administrator in active-enrollment queries and mus... oneroster.enrollments.role
item.primary text No Teacher-primary marker for a class enrollment. It applies only when enrollments.role is teacher; true identifies the primary teacher for the class/date window, while student, proc... oneroster.enrollments.primary
item.beginDate date No The start date for the enrollment (inclusive). This date must align with the associated academic session (term) identified in the class. oneroster.enrollments.begin_date
item.endDate date No The end date for the enrollment (exclusive). This date must align with the associated academic session (term) identified for the class. oneroster.enrollments.end_date

oneroster.line_item_learning_objective_ids.patch

Patch a Line Item Learning Objective IDs record

Partially updates one /lineItemLearningObjectiveIds resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/lineItemLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/lineItemLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-line-item-learning-objective-ids-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_learning_objective_ids.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_learning_objective_ids.date_last_modified
lineItemSourcedId Body text No; at least one mutable field is required SourcedId of the parent LineItem for this learning objective. oneroster.line_item_learning_objective_ids.line_item_sourced_id
source Body text No; at least one mutable field is required Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value whose... oneroster.line_item_learning_objective_ids.source
learningObjectiveId Body text No; at least one mutable field is required Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. oneroster.line_item_learning_objective_ids.learning_objective_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item learning objective ids row. oneroster.line_item_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_learning_objective_ids.date_last_modified
item.lineItemSourcedId text Yes SourcedId of the parent LineItem for this learning objective. oneroster.line_item_learning_objective_ids.line_item_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a line item. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender va... oneroster.line_item_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If an 1EdTech CASE identifier then it MUST be a valid UUID URN. oneroster.line_item_learning_objective_ids.learning_objective_id

oneroster.line_items.patch

Patch a Line Items record

Partially updates one /lineItems resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/lineItems/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/lineItems/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-line-items-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
title Body text No; at least one mutable field is required The title assigned to the lineItem. oneroster.line_items.title
description Body text No; at least one mutable field is required Short description of the role of the lineItem. oneroster.line_items.description
assignDate Body date No; at least one mutable field is required Date the associated activity was assigned. oneroster.line_items.assign_date
dueDate Body date No; at least one mutable field is required Date the associated activity is due to be completed. oneroster.line_items.due_date
classSourcedId Body text No; at least one mutable field is required SourcedId of the Class. oneroster.line_items.class_sourced_id
categorySourcedId Body text No; at least one mutable field is required SourcedId of the Category. oneroster.line_items.category_sourced_id
academicSessionSourcedId Body text No; at least one mutable field is required SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
resultValueMin Body double precision No; at least one mutable field is required The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
resultValueMax Body double precision No; at least one mutable field is required The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
schoolSourcedId Body text No; at least one mutable field is required SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItems.csv record using OneRoster source field names and _platform metadata. oneroster.line_items
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_items
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_items.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_items.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line items row. oneroster.line_items.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_items.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_items.date_last_modified
item.title text Yes The title assigned to the lineItem. oneroster.line_items.title
item.description text No Short description of the role of the lineItem. oneroster.line_items.description
item.assignDate date Yes Date the associated activity was assigned. oneroster.line_items.assign_date
item.dueDate date Yes Date the associated activity is due to be completed. oneroster.line_items.due_date
item.classSourcedId text Yes SourcedId of the Class. oneroster.line_items.class_sourced_id
item.categorySourcedId text Yes SourcedId of the Category. oneroster.line_items.category_sourced_id
item.academicSessionSourcedId text Yes SourcedId of the academicSession to which the lineItem is based. oneroster.line_items.academic_session_sourced_id
item.resultValueMin double precision No The minimum value permitted for the score (inclusive) e.g. 0.0. oneroster.line_items.result_value_min
item.resultValueMax double precision No The maximum value permitted for the score (inclusive) e.g. 100.0. oneroster.line_items.result_value_max
item.schoolSourcedId text Yes SourcedId of the School. This is a new column added in version 1.2. oneroster.line_items.school_sourced_id

oneroster.line_item_score_scales.patch

Patch a Line Item Score Scales record

Partially updates one /lineItemScoreScales resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/lineItemScoreScales/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/lineItemScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-line-item-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_score_scales.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_score_scales.date_last_modified
title Body text No; at least one mutable field is required Name of the related scoreScale. oneroster.line_item_score_scales.title
lineItemSourcedId Body text No; at least one mutable field is required SourcedId of the reference LineItem. oneroster.line_item_score_scales.line_item_sourced_id
scoreScaleSourcedId Body text No; at least one mutable field is required SourcedId of the reference ScoreScale. oneroster.line_item_score_scales.score_scale_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One lineItemScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.line_item_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.line_item_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.line_item_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.line_item_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this line item score scales row. oneroster.line_item_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.line_item_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.line_item_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.line_item_score_scales.title
item.lineItemSourcedId text Yes SourcedId of the reference LineItem. oneroster.line_item_score_scales.line_item_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.line_item_score_scales.score_scale_sourced_id

oneroster.orgs.patch

Patch a Organizations record

Partially updates one /orgs resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/orgs/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/orgs/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-orgs-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.orgs.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.orgs.date_last_modified
name Body text No; at least one mutable field is required Name of the organization. oneroster.orgs.name
type Body text No; at least one mutable field is required Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, and line_ite... oneroster.orgs.type
identifier Body text No; at least one mutable field is required Human readable identifier for this org e.g. NCES ID. oneroster.orgs.identifier
parentSourcedId Body text No; at least one mutable field is required SourcedId of an Org representing the Parent organization. oneroster.orgs.parent_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One orgs.csv record using OneRoster source field names and _platform metadata. oneroster.orgs
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.orgs
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.orgs.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.orgs.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this orgs row. oneroster.orgs.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.orgs.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.orgs.date_last_modified
item.name text Yes Name of the organization. oneroster.orgs.name
item.type text Yes Organization classification that determines which references this org row can satisfy. school is the value required by classes.school_sourced_id, enrollments.school_sourced_id, an... oneroster.orgs.type
item.identifier text No Human readable identifier for this org e.g. NCES ID. oneroster.orgs.identifier
item.parentSourcedId text No SourcedId of an Org representing the Parent organization. oneroster.orgs.parent_sourced_id

oneroster.resources.patch

Patch a Resources record

Partially updates one /resources resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/resources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/resources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.resources.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.resources.date_last_modified
vendorResourceId Body text No; at least one mutable field is required Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. oneroster.resources.vendor_resource_id
title Body text No; at least one mutable field is required Name of this resource. oneroster.resources.title
roles Body text No; at least one mutable field is required Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows. oneroster.resources.roles
importance Body text No; at least one mutable field is required Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. oneroster.resources.importance
vendorId Body text No; at least one mutable field is required Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. oneroster.resources.vendor_id
applicationId Body text No; at least one mutable field is required Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. oneroster.resources.application_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resources.csv record using OneRoster source field names and _platform metadata. oneroster.resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this resources row. oneroster.resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.resources.date_last_modified
item.vendorResourceId text Yes Unique ID of this resource as allocated by the vendor. It is unique in the context of resource identifiers allocated by the vendor. oneroster.resources.vendor_resource_id
item.title text No Name of this resource. oneroster.resources.title
item.roles text No Audience roles for which a resource is intended. This is an enum list in one CSV cell, so several roles may receive the same resource without creating separate resource rows. oneroster.resources.roles
item.importance text No Resource priority inside its class, course, or user context. primary marks the main resource mapping; secondary marks supporting material. oneroster.resources.importance
item.vendorId text No Identifier of the vendor responsible for this resource. This unique ID will be assigned by 1EdTech during the OneRoster conformance process. oneroster.resources.vendor_id
item.applicationId text No Identifier of the application associated with this resource. This identifier is assigned by the creator/vendor of the resource. oneroster.resources.application_id

oneroster.result_learning_objective_ids.patch

Patch a Result Learning Objective IDs record

Partially updates one /resultLearningObjectiveIds resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/resultLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/resultLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-result-learning-objective-ids-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_learning_objective_ids.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_learning_objective_ids.date_last_modified
resultSourcedId Body text No; at least one mutable field is required SourcedId of the parent Result for this learning objective. oneroster.result_learning_objective_ids.result_sourced_id
source Body text No; at least one mutable field is required Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value whose sou... oneroster.result_learning_objective_ids.source
learningObjectiveId Body text No; at least one mutable field is required Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. oneroster.result_learning_objective_ids.learning_objective_id
score Body double precision No; at least one mutable field is required The optional mastery score supplied as a numeric value. oneroster.result_learning_objective_ids.score
textScore Body text No; at least one mutable field is required The optional mastery score supplied as a string. oneroster.result_learning_objective_ids.text_score
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultLearningObjectiveIds.csv record using OneRoster source field names and _platform metadata. oneroster.result_learning_objective_ids
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_learning_objective_ids
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_learning_objective_ids.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_learning_objective_ids.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result learning objective ids row. oneroster.result_learning_objective_ids.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_learning_objective_ids.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_learning_objective_ids.date_last_modified
item.resultSourcedId text Yes SourcedId of the parent Result for this learning objective. oneroster.result_learning_objective_ids.result_sourced_id
item.source text Yes Vocabulary source for the learning objective identifier attached to a result. case means the identifier should validate as an IMS CASE identifier; unknown preserves a sender value... oneroster.result_learning_objective_ids.source
item.learningObjectiveId text Yes Unique identifier for the associated learning objective. If a CASE identifier then it MUST be a valid UUID URN. oneroster.result_learning_objective_ids.learning_objective_id
item.score double precision No The optional mastery score supplied as a numeric value. oneroster.result_learning_objective_ids.score
item.textScore text No The optional mastery score supplied as a string. oneroster.result_learning_objective_ids.text_score

oneroster.results.patch

Patch a Results record

Partially updates one /results resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/results/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/results/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-results-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
lineItemSourcedId Body text No; at least one mutable field is required Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
studentSourcedId Body text No; at least one mutable field is required Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
scoreStatus Body text No; at least one mutable field is required Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
score Body double precision No; at least one mutable field is required Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with lineItems r... oneroster.results.score
scoreDate Body date No; at least one mutable field is required The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
comment Body text No; at least one mutable field is required Human readable comment about the result. oneroster.results.comment
textScore Body text No; at least one mutable field is required Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot substitut... oneroster.results.text_score
classSourcedId Body text No; at least one mutable field is required Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
inProgress Body text No; at least one mutable field is required Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
incomplete Body text No; at least one mutable field is required Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
late Body text No; at least one mutable field is required Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identity. oneroster.results.late
missing Body text No; at least one mutable field is required Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One results.csv record using OneRoster source field names and _platform metadata. oneroster.results
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.results
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.results.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.results.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this results row. oneroster.results.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.results.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.results.date_last_modified
item.lineItemSourcedId text Yes Unique identifier of the lineItem. oneroster.results.line_item_sourced_id
item.studentSourcedId text Yes Unique identifier of the student (user). References a record that is/was created in the users.csv file with type of 'student'. oneroster.results.student_sourced_id
item.scoreStatus text Yes Gradebook result state for the student's line item. It tells consumers whether the result is submitted, graded, exempt, or still missing work. oneroster.results.score_status
item.score double precision No Numeric result value for the student's line item. When present, it must resolve to exactly one same-tenant effective score scale before persistence and must stay consistent with l... oneroster.results.score
item.scoreDate date Yes The date the result was submitted and/or the 'scoreStatus' was changed. oneroster.results.score_date
item.comment text No Human readable comment about the result. oneroster.results.comment
item.textScore text No Non-numeric gradebook value for the student's line item. When present, it must align with exactly one same-tenant effective score scale before persistence; a read-time hint cannot... oneroster.results.text_score
item.classSourcedId text No Unique identifier of the class. References a record that is/was created in the classes.csv file. This is a new column added in version 1.2. oneroster.results.class_sourced_id
item.inProgress text No Workflow flag that says assigned work is still in progress and a submitted work product is not expected yet. It affects gradebook interpretation, not row lifecycle. oneroster.results.in_progress
item.incomplete text No Workflow flag that says submitted student work is present but incomplete. It can coexist with score_status values while the teacher resolves grading. oneroster.results.incomplete
item.late text No Workflow flag that says the work was submitted after the due date or is otherwise past due. It may affect scoring policy but does not change the result row's tenant-scoped identit... oneroster.results.late
item.missing text No Workflow flag that says expected work has not been submitted and is considered missing. It should not be inferred only from a blank score; the source must send the flag. oneroster.results.missing

oneroster.result_score_scales.patch

Patch a Result Score Scales record

Partially updates one /resultScoreScales resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/resultScoreScales/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/resultScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-result-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_score_scales.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_score_scales.date_last_modified
title Body text No; at least one mutable field is required Name of the related scoreScale. oneroster.result_score_scales.title
resultSourcedId Body text No; at least one mutable field is required SourcedId of the reference Result. oneroster.result_score_scales.result_sourced_id
scoreScaleSourcedId Body text No; at least one mutable field is required SourcedId of the reference ScoreScale. oneroster.result_score_scales.score_scale_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One resultScoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.result_score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.result_score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.result_score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.result_score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this result score scales row. oneroster.result_score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.result_score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.result_score_scales.date_last_modified
item.title text No Name of the related scoreScale. oneroster.result_score_scales.title
item.resultSourcedId text Yes SourcedId of the reference Result. oneroster.result_score_scales.result_sourced_id
item.scoreScaleSourcedId text Yes SourcedId of the reference ScoreScale. oneroster.result_score_scales.score_scale_sourced_id

oneroster.roles.patch

Patch a Roles record

Partially updates one /roles resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/roles/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/roles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-roles-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.roles.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.roles.date_last_modified
userSourcedId Body text No; at least one mutable field is required The user whose role is being defined. oneroster.roles.user_sourced_id
roleType Body text No; at least one mutable field is required Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window. oneroster.roles.role_type
role Body text No; at least one mutable field is required Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a class. oneroster.roles.role
beginDate Body date No; at least one mutable field is required The start date on which the role became active (inclusive). oneroster.roles.begin_date
endDate Body date No; at least one mutable field is required The end date on which the role ceased to be active (exclusive). oneroster.roles.end_date
orgSourcedId Body text No; at least one mutable field is required SourcedId of the Org within which the User has the assigned role. oneroster.roles.org_sourced_id
userProfileSourcedId Body text No; at least one mutable field is required SourcedId of the UserProfile for the User. oneroster.roles.user_profile_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One roles.csv record using OneRoster source field names and _platform metadata. oneroster.roles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.roles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.roles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.roles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this roles row. oneroster.roles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.roles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.roles.date_last_modified
item.userSourcedId text Yes The user whose role is being defined. oneroster.roles.user_sourced_id
item.roleType text Yes Primary/secondary marker for a user's role inside one organization. Only one role per user/org should be primary for the same active date window. oneroster.roles.role_type
item.role text Yes Organization-level role assigned to the user. It is separate from enrollments.role: this field says what the person is in an org, while enrollments.role says what they are in a cl... oneroster.roles.role
item.beginDate date No The start date on which the role became active (inclusive). oneroster.roles.begin_date
item.endDate date No The end date on which the role ceased to be active (exclusive). oneroster.roles.end_date
item.orgSourcedId text Yes SourcedId of the Org within which the User has the assigned role. oneroster.roles.org_sourced_id
item.userProfileSourcedId text No SourcedId of the UserProfile for the User. oneroster.roles.user_profile_sourced_id

oneroster.score_scales.patch

Patch a Score Scales record

Partially updates one /scoreScales resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/scoreScales/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/scoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-score-scales-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.score_scales.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.score_scales.date_last_modified
title Body text No; at least one mutable field is required A human readable title for the score scale. oneroster.score_scales.title
type Body text No; at least one mutable field is required The type of score scaling e.g. percent. oneroster.score_scales.type
orgSourcedId Body text No; at least one mutable field is required The org for which the score scale is used. oneroster.score_scales.org_sourced_id
courseSourcedId Body text No; at least one mutable field is required The course for which the score scale is used. oneroster.score_scales.course_sourced_id
classSourcedId Body text No; at least one mutable field is required The class for which the score scale is used. oneroster.score_scales.class_sourced_id
scoreScaleValue Body text No; at least one mutable field is required OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell. oneroster.score_scales.score_scale_value
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One scoreScales.csv record using OneRoster source field names and _platform metadata. oneroster.score_scales
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.score_scales
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.score_scales.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.score_scales.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this score scales row. oneroster.score_scales.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.score_scales.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.score_scales.date_last_modified
item.title text Yes A human readable title for the score scale. oneroster.score_scales.title
item.type text Yes The type of score scaling e.g. percent. oneroster.score_scales.type
item.orgSourcedId text Yes The org for which the score scale is used. oneroster.score_scales.org_sourced_id
item.courseSourcedId text Yes The course for which the score scale is used. oneroster.score_scales.course_sourced_id
item.classSourcedId text Yes The class for which the score scale is used. oneroster.score_scales.class_sourced_id
item.scoreScaleValue text Yes OneRoster score-scale mapping cell. Each {left:right} pair maps a source scale label or range to a target value and multiple mappings stay in the same CSV cell. oneroster.score_scales.score_scale_value

oneroster.user_profiles.patch

Patch a User Profiles record

Partially updates one /userProfiles resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/userProfiles/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/userProfiles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-user-profiles-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_profiles.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_profiles.date_last_modified
userSourcedId Body text No; at least one mutable field is required Unique ID for the corresponding user. oneroster.user_profiles.user_sourced_id
profileType Body text No; at least one mutable field is required The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc. oneroster.user_profiles.profile_type
vendorId Body text No; at least one mutable field is required The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. oneroster.user_profiles.vendor_id
applicationId Body text No; at least one mutable field is required The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. oneroster.user_profiles.application_id
description Body text No; at least one mutable field is required A human readable description of the use of the account. This should not contain any security information for access to the account. oneroster.user_profiles.description
credentialType Body text No; at least one mutable field is required The type of credentials for the user profile. This should be indicative of when this credential should be used. oneroster.user_profiles.credential_type
username Body text No; at least one mutable field is required The username for this profile. oneroster.user_profiles.username
password Body text No; at least one mutable field is required The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method. oneroster.user_profiles.password
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userProfiles.csv record using OneRoster source field names and _platform metadata. oneroster.user_profiles
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_profiles
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_profiles.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_profiles.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user profiles row. oneroster.user_profiles.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_profiles.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_profiles.date_last_modified
item.userSourcedId text Yes Unique ID for the corresponding user. oneroster.user_profiles.user_sourced_id
item.profileType text Yes The type of user profile. This should be a human readable label that has some significance in the context of the related system, app, tool, etc. oneroster.user_profiles.profile_type
item.vendorId text Yes The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this user profile. oneroster.user_profiles.vendor_id
item.applicationId text No The unique identifier for the vendor of the system, tool, app, etc. which requires the use of this account. oneroster.user_profiles.application_id
item.description text No A human readable description of the use of the account. This should not contain any security information for access to the account. oneroster.user_profiles.description
item.credentialType text Yes The type of credentials for the user profile. This should be indicative of when this credential should be used. oneroster.user_profiles.credential_type
item.username text Yes The username for this profile. oneroster.user_profiles.username
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted, the processing system must be aware of the encryption method. oneroster.user_profiles.password

oneroster.user_resources.patch

Patch a User Resources record

Partially updates one /userResources resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/userResources/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/userResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-user-resources-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_resources.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_resources.date_last_modified
userSourcedId Body text No; at least one mutable field is required SourcedId of the user who will have access to this resource. oneroster.user_resources.user_sourced_id
orgSourcedId Body text No; at least one mutable field is required SourcedId of the reference Organization. oneroster.user_resources.org_sourced_id
classSourcedId Body text No; at least one mutable field is required SourcedId of the reference Class. oneroster.user_resources.class_sourced_id
resourceSourcedId Body text No; at least one mutable field is required SourcedId of the Resource associated with the User. oneroster.user_resources.resource_sourced_id
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One userResources.csv record using OneRoster source field names and _platform metadata. oneroster.user_resources
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.user_resources
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.user_resources.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.user_resources.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this user resources row. oneroster.user_resources.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.user_resources.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.user_resources.date_last_modified
item.userSourcedId text Yes SourcedId of the user who will have access to this resource. oneroster.user_resources.user_sourced_id
item.orgSourcedId text No SourcedId of the reference Organization. oneroster.user_resources.org_sourced_id
item.classSourcedId text No SourcedId of the reference Class. oneroster.user_resources.class_sourced_id
item.resourceSourcedId text Yes SourcedId of the Resource associated with the User. oneroster.user_resources.resource_sourced_id

oneroster.users.patch

Patch a Users record

Partially updates one /users resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/users/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/users/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-users-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
enabledUser Body text No; at least one mutable field is required Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat the user as... oneroster.users.enabled_user
username Body text No; at least one mutable field is required User name. oneroster.users.username
userIds Body text No; at least one mutable field is required External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclosed in '{}'... oneroster.users.user_ids
givenName Body text No; at least one mutable field is required User's first name. oneroster.users.given_name
familyName Body text No; at least one mutable field is required User's surname. oneroster.users.family_name
middleName Body text No; at least one mutable field is required User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
identifier Body text No; at least one mutable field is required Identifier for the user with a human readable meaning. oneroster.users.identifier
email Body text No; at least one mutable field is required Email address for the User. oneroster.users.email
sms Body text No; at least one mutable field is required SMS address for the User. oneroster.users.sms
phone Body text No; at least one mutable field is required Phone number for the User. oneroster.users.phone
agentSourcedIds Body text No; at least one mutable field is required SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for indicating... oneroster.users.agent_sourced_ids
grades Body text No; at least one mutable field is required Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
password Body text No; at least one mutable field is required The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
userMasterIdentifier Body text No; at least one mutable field is required The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is a new col... oneroster.users.user_master_identifier
preferredGivenName Body text No; at least one mutable field is required The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
preferredMiddleName Body text No; at least one mutable field is required The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
preferredFamilyName Body text No; at least one mutable field is required The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
primaryOrgSourcedId Body text No; at least one mutable field is required The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the primary 'org'.... oneroster.users.primary_org_sourced_id
pronouns Body text No; at least one mutable field is required The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a statement that th... oneroster.users.pronouns
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One users.csv record using OneRoster source field names and _platform metadata. oneroster.users
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.users
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.users.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.users.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this users row. oneroster.users.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.users.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.users.date_last_modified
item.enabledUser text Yes Source-system account availability flag for the user row. true means the source considers the user enabled; false preserves the roster identity but tells platform3 not to treat th... oneroster.users.enabled_user
item.username text Yes User name. oneroster.users.username
item.userIds text No External machine-readable ID (e.g. LDAP id, LTI id) for this user. The ID must be accompanied by a type to indicate the nature of the Identifier. The Type and ID values are enclos... oneroster.users.user_ids
item.givenName text Yes User's first name. oneroster.users.given_name
item.familyName text Yes User's surname. oneroster.users.family_name
item.middleName text No User's middle name(s). If more than one then they are separated by a space. oneroster.users.middle_name
item.identifier text No Identifier for the user with a human readable meaning. oneroster.users.identifier
item.email text No Email address for the User. oneroster.users.email
item.sms text No SMS address for the User. oneroster.users.sms
item.phone text No Phone number for the User. oneroster.users.phone
item.agentSourcedIds text No SourcedIds of the Users to which this user has a relationship. If multiple IDs are required then use double quotes and separate with commas. Note: In most cases this will be for i... oneroster.users.agent_sourced_ids
item.grades text No Grade(s) for which a user with role 'student' is enrolled. The permitted vocabulary should be agreed as part of the definition of the usage of this specification. oneroster.users.grades
item.password text No The password for the user. This may or may not be an encrypted string. If encrypted the processing system must be aware of the encryption method. oneroster.users.password
item.userMasterIdentifier text No The master identifier that could be used to provide globally unique identification of the user across all of the tools, systems, apps, etc. available/accessed by the user. This is... oneroster.users.user_master_identifier
item.preferredGivenName text No The given name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_given_name
item.preferredMiddleName text No The middle names by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_middle_name
item.preferredFamilyName text No The family name by which the User prefers to be known. This is a new column added in version 1.2. oneroster.users.preferred_family_name
item.primaryOrgSourcedId text No The sourcedId of the primary 'org' for the 'user'. In OR 1.2 a user can have one or more 'roles' in one or more 'org's and so this field can be used for identification of the prim... oneroster.users.primary_org_sourced_id
item.pronouns text No The pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a stateme... oneroster.users.pronouns

oneroster.grading_periods.patch

Patch a Grading Periods record

Partially updates one /gradingPeriods resource. Current live accepts known OneRoster fields from the request schema below and ignores unknown JSON fields; stale validators return 412 or 409.

#
Method
PATCH
Path
/gradingPeriods/{sourcedId}
Auth
Bearer JWT with write scope and relationship visibility
Status
200400401403404409412428422429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X PATCH "$BASE_URL/gradingPeriods/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: patch-grading-periods-001" \
  -H "Content-Type: application/json" \
  --data '{"status":"active"}'
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
Content-Type Header application/json Yes when a JSON body is sent JSON mutation payload. CSV package import uses multipart/form-data instead. OITD-010
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId. The path value is authoritative. OITD-102
status Body text No; at least one mutable field is required Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
dateLastModified Body timestamptz No; at least one mutable field is required Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
title Body text No; at least one mutable field is required Name or title of the academic session. oneroster.academic_sessions.title
type Body text No; at least one mutable field is required Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
startDate Body date No; at least one mutable field is required Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
endDate Body date No; at least one mutable field is required Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
parentSourcedId Body text No; at least one mutable field is required SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
schoolYear Body integer No; at least one mutable field is required The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year
Response schema
FieldTypeRequiredDescriptionTrace
headers.ETag HTTP entity tag Yes on detail and mutation responses Validator to send back in If-Match before an update or delete. OITD-104
item object Yes One academicSessions.csv record using OneRoster source field names and _platform metadata. oneroster.academic_sessions
links.dataDictionary string Yes Stable deep link to the source table in the OneRoster data dictionary. oneroster.academic_sessions
links.architecture string Yes Stable deep link to the architecture decision that owns the route projection. OITD-010
links.customerWebsite string Yes Stable deep link back to this endpoint card. customer_website
item._platform.tenant_id uuid Yes Shared platform tenant that owns this OneRoster row. oneroster.academic_sessions.tenant_id
item._platform.import_batch_id text Yes Import/export evidence row that produced this generated OneRoster projection row. oneroster.academic_sessions.import_batch_id
item.sourcedId text Yes Tenant-scoped OneRoster identifier for this academic sessions row. oneroster.academic_sessions.sourced_id
item.status text Yes for Delta Delta-mode lifecycle marker for this row. active means the row is current; tobedeleted means the source system is deleting or retiring it. oneroster.academic_sessions.status
item.dateLastModified timestamptz Yes for Delta Delta-mode timestamp for the last source-system change to this row. It is deliberately absent in bulk files. oneroster.academic_sessions.date_last_modified
item.title text Yes Name or title of the academic session. oneroster.academic_sessions.title
item.type text Yes Calendar-window type for the academic session. Courses usually point at schoolYear, classes usually list term or semester rows, and gradebook reporting can use gradingPeriod. oneroster.academic_sessions.type
item.startDate date Yes Inclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.start_date
item.endDate date Yes Exclusive end date for the academic session. ISO 8601 format [ISO8601]. oneroster.academic_sessions.end_date
item.parentSourcedId text No SourcedId of the parent of this academic session. oneroster.academic_sessions.parent_sourced_id
item.schoolYear integer Yes The school year for which the academic session contributes. This year should be that in which the school year ends (Format is: YYYY). oneroster.academic_sessions.school_year

oneroster.academic_sessions.delete

Delete a Academic Sessions record

Deletes or tombstones one /academicSessions resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/academicSessions/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/academicSessions/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-academic-sessions-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.categories.delete

Delete a Categories record

Deletes or tombstones one /categories resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/categories/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/categories/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-categories-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.classes.delete

Delete a Classes record

Deletes or tombstones one /classes resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/classes/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/classes/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-classes-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.class_resources.delete

Delete a Class Resources record

Deletes or tombstones one /classResources resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/classResources/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/classResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-class-resources-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.course_resources.delete

Delete a Course Resources record

Deletes or tombstones one /courseResources resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/courseResources/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/courseResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-course-resources-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.courses.delete

Delete a Courses record

Deletes or tombstones one /courses resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/courses/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/courses/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-courses-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.demographics.delete

Delete a Demographics record

Deletes or tombstones one /demographics resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/demographics/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/demographics/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-demographics-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.enrollments.delete

Delete a Enrollments record

Deletes or tombstones one /enrollments resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/enrollments/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/enrollments/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-enrollments-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.line_item_learning_objective_ids.delete

Delete a Line Item Learning Objective IDs record

Deletes or tombstones one /lineItemLearningObjectiveIds resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/lineItemLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/lineItemLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-line-item-learning-objective-ids-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.line_items.delete

Delete a Line Items record

Deletes or tombstones one /lineItems resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/lineItems/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/lineItems/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-line-items-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.line_item_score_scales.delete

Delete a Line Item Score Scales record

Deletes or tombstones one /lineItemScoreScales resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/lineItemScoreScales/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/lineItemScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-line-item-score-scales-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.orgs.delete

Delete a Organizations record

Deletes or tombstones one /orgs resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/orgs/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/orgs/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-orgs-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.resources.delete

Delete a Resources record

Deletes or tombstones one /resources resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/resources/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/resources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-resources-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.result_learning_objective_ids.delete

Delete a Result Learning Objective IDs record

Deletes or tombstones one /resultLearningObjectiveIds resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/resultLearningObjectiveIds/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/resultLearningObjectiveIds/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-result-learning-objective-ids-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.results.delete

Delete a Results record

Deletes or tombstones one /results resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/results/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/results/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-results-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.result_score_scales.delete

Delete a Result Score Scales record

Deletes or tombstones one /resultScoreScales resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/resultScoreScales/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/resultScoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-result-score-scales-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.roles.delete

Delete a Roles record

Deletes or tombstones one /roles resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/roles/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/roles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-roles-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.score_scales.delete

Delete a Score Scales record

Deletes or tombstones one /scoreScales resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/scoreScales/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/scoreScales/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-score-scales-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.user_profiles.delete

Delete a User Profiles record

Deletes or tombstones one /userProfiles resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/userProfiles/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/userProfiles/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-user-profiles-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.user_resources.delete

Delete a User Resources record

Deletes or tombstones one /userResources resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/userResources/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/userResources/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-user-resources-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.users.delete

Delete a Users record

Deletes or tombstones one /users resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/users/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/users/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-users-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

oneroster.grading_periods.delete

Delete a Grading Periods record

Deletes or tombstones one /gradingPeriods resource according to the OneRoster status model and GDPR-style platform retention rules.

#
Method
DELETE
Path
/gradingPeriods/{sourcedId}
Auth
Bearer JWT with delete scope and relationship visibility
Status
204400401403404409412428429

Trace: OITD-010 OITD-101 OITD-104 OITD-105 OITD-106 OITD-111 OITD-108

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/implementation/api"
TOKEN_JSON="$(curl -fsS -X POST "$BASE_URL/dev/mint?tenantId=demo")"
TOKEN="$(node -e 'const fs=require("fs"); const body=JSON.parse(fs.readFileSync(0,"utf8")); console.log(body.token)' <<< "$TOKEN_JSON")"
RESOURCE_ID="replace-with-sourcedId-from-list-response"
ETAG="replace-with-etag-from-detail-response"
curl -fsS -X DELETE "$BASE_URL/gradingPeriods/$RESOURCE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-grading-periods-001"
Request schema
FieldLocationTypeRequiredDescriptionTrace
Authorization Header Bearer JWT Yes HS256 token signed with PLATFORM_JWT_SIGNING_SECRET and carrying iss, sub, iat, exp, tenant_id or tenantId, and role/roles/scopes. OITD-011
Idempotency-Key Header string Yes Required for retryable imports, exports, creates, updates, patches, and deletes. Same request hash replays; changed hash returns 409. OITD-105
If-Match Header HTTP entity tag Yes on update, patch, and delete Send the ETag from the most recent detail read. Missing precondition returns 428; stale validators return 412 or 409. OITD-104
sourcedId Path text Yes Tenant-scoped OneRoster sourcedId to delete or tombstone. OITD-102
body Body empty Yes No JSON request body. OITD-101
Response schema
FieldTypeRequiredDescriptionTrace
body empty Yes No JSON body is returned for this status. Use the HTTP status, ETag headers, and Problem JSON on failures. OITD-111

Data model

Every table and field links back to the approved data dictionary.

The implementation stores 3 inherited platform tables, one OneRoster batch-evidence table, and 21 generated OneRoster collection tables. The data dictionary is still the source for type, nullability, valid values, relationships, and invalid examples.

Allowed values

Finite vocabularies are source-linked.

Every enum below links to the dictionary row that explains meaning, when to use each value, and when the value is invalid.

Allowed-value fields
FieldAPI/source nameValuesTrace
platform.tenant.status status provisioningactivesuspendedarchived Platform shared
platform.idempotency_key.module module platformqtionerostercaliper Platform shared
platform.idempotency_key.surface surface platform1edtechalpha Platform shared
platform.idempotency_key.method method POSTPUTPATCHDELETE Platform shared
platform.idempotency_key.status status in_progresscompletedfailed_permanentfailed_transientexpired Platform shared
platform.audit_log.module module platformqtionerostercaliper Platform shared
platform.audit_log.surface surface platform1edtechalpha Platform shared
platform.audit_log.action action createupdatedeleteimportexportread_privilegedruntime_deleteconformance_change+3 more Platform shared
platform.audit_log.outcome outcome acceptedsucceededfailed_validationfailed_authorizationfailed_conflictfailed_not_foundfailed_server Platform shared
oneroster.import_batch.direction direction importexport oitd-006-import-export-evidence
oneroster.import_batch.mode mode bulkdelta oitd-006-import-export-evidence
oneroster.import_batch.status status acceptedvalidatedappliedrejectedexported oitd-006-import-export-evidence
oneroster.manifest_entry.file_academic_sessions file.academicSessions absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_categories file.categories absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_classes file.classes absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_class_resources file.classResources absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_courses file.courses absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_course_resources file.courseResources absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_demographics file.demographics absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_enrollments file.enrollments absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_line_item_learning_objective_ids file.lineItemLearningObjectiveIds absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_line_items file.lineItems absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_line_item_score_scales file.lineItemScoreScales absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_orgs file.orgs absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_resources file.resources absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_result_learning_objective_ids file.resultLearningObjectiveIds absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_results file.results absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_result_score_scales file.resultScoreScales absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_roles file.roles absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_score_scales file.scoreScales absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_user_profiles file.userProfiles absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_user_resources file.userResources absentbulkdelta oitd-001-source-authority
oneroster.manifest_entry.file_users file.users absentbulkdelta oitd-001-source-authority
oneroster.academic_sessions.status status activetobedeleted oitd-001-source-authority
oneroster.academic_sessions.type type gradingPeriodsemesterschoolYearterm oitd-001-source-authority
oneroster.categories.status status activetobedeleted oitd-001-source-authority
oneroster.classes.status status activetobedeleted oitd-001-source-authority
oneroster.classes.class_type classType homeroomscheduled oitd-001-source-authority
oneroster.class_resources.status status activetobedeleted oitd-001-source-authority
oneroster.course_resources.status status activetobedeleted oitd-001-source-authority
oneroster.courses.status status activetobedeleted oitd-001-source-authority
oneroster.demographics.status status activetobedeleted oitd-001-source-authority
oneroster.demographics.sex sex malefemaleunspecifiedother oitd-001-source-authority
oneroster.demographics.american_indian_or_alaska_native americanIndianOrAlaskaNative truefalse oitd-001-source-authority
oneroster.demographics.asian asian truefalse oitd-001-source-authority
oneroster.demographics.black_or_african_american blackOrAfricanAmerican truefalse oitd-001-source-authority
oneroster.demographics.native_hawaiian_or_other_pacific_islander nativeHawaiianOrOtherPacificIslander truefalse oitd-001-source-authority
oneroster.demographics.white white truefalse oitd-001-source-authority
oneroster.demographics.demographic_race_two_or_more_races demographicRaceTwoOrMoreRaces truefalse oitd-001-source-authority
oneroster.demographics.hispanic_or_latino_ethnicity hispanicOrLatinoEthnicity truefalse oitd-001-source-authority
oneroster.enrollments.status status activetobedeleted oitd-001-source-authority
oneroster.enrollments.role role administratorproctorstudentteacher oitd-001-source-authority
oneroster.enrollments.primary primary truefalse oitd-001-source-authority
oneroster.line_item_learning_objective_ids.status status activetobedeleted oitd-001-source-authority
oneroster.line_item_learning_objective_ids.source source caseunknown oitd-001-source-authority
oneroster.line_items.status status activetobedeleted oitd-001-source-authority
oneroster.line_item_score_scales.status status activetobedeleted oitd-001-source-authority
oneroster.orgs.status status activetobedeleted oitd-001-source-authority
oneroster.orgs.type type departmentschooldistrictlocalstatenational oitd-001-source-authority
oneroster.resources.status status activetobedeleted oitd-001-source-authority
oneroster.resources.roles roles administratoraideguardianparentproctorrelativestudentteacher oitd-001-source-authority
oneroster.resources.importance importance primarysecondary oitd-001-source-authority
oneroster.result_learning_objective_ids.status status activetobedeleted oitd-001-source-authority
oneroster.result_learning_objective_ids.source source caseunknown oitd-001-source-authority
oneroster.results.status status activetobedeleted oitd-001-source-authority
oneroster.results.score_status scoreStatus exemptfully gradednot submittedpartially gradedsubmitted oitd-001-source-authority
oneroster.results.in_progress inProgress truefalse oitd-001-source-authority
oneroster.results.incomplete incomplete truefalse oitd-001-source-authority
oneroster.results.late late truefalse oitd-001-source-authority
oneroster.results.missing missing truefalse oitd-001-source-authority
oneroster.result_score_scales.status status activetobedeleted oitd-001-source-authority
oneroster.roles.status status activetobedeleted oitd-001-source-authority
oneroster.roles.role_type roleType primarysecondary oitd-001-source-authority
oneroster.roles.role role aidecounselordistrictAdministratorguardianparentprincipalproctorrelative+4 more oitd-001-source-authority
oneroster.score_scales.status status activetobedeleted oitd-001-source-authority
oneroster.score_scales.score_scale_value scoreScaleValue Pass:50 oitd-001-source-authority
oneroster.user_profiles.status status activetobedeleted oitd-001-source-authority
oneroster.user_resources.status status activetobedeleted oitd-001-source-authority
oneroster.users.status status activetobedeleted oitd-001-source-authority
oneroster.users.enabled_user enabledUser truefalse oitd-001-source-authority
oneroster.users.user_ids userIds LDAP:Id oitd-001-source-authority

Source trail

What this page is derived from.

Benchmark

Built against Stripe's API reference for top-level authentication/errors, endpoint-local request/response schema tables, and working-client ergonomics.

Prior module pattern

The approved QTI customer website supplied the platform3 pattern for inline endpoint schemas, stable anchors, provenance links, and docs-as-implementation-spec behavior.

QTI customer website

Vendored files read

  • vendor/oneroster-prior-workspace/spec_bundle/MANIFEST.md
  • vendor/oneroster-prior-workspace/spec_bundle/source/oneroster-1.2-index.html
  • vendor/oneroster-prior-workspace/spec_bundle/source/oneroster-csv-binding-1.2.1.html
  • vendor/oneroster-prior-workspace/generated/spec/summary.md
  • vendor/oneroster-prior-workspace/generated/spec/oneroster-csv-tables.json
  • vendor/oneroster-prior-workspace/migrations/001_oneroster_core.sql
  • vendor/oneroster-prior-workspace/contracts/oneroster-boundary.openapi.yaml
  • vendor/oneroster-prior-workspace/docs/plain-english-guide.md
  • vendor/oneroster-prior-workspace/docs/1edtech-oneroster-package.md
  • vendor/oneroster-prior-workspace/docs/adr/0001-official-source-bundle.md
  • vendor/oneroster-prior-workspace/docs/adr/0002-postgresql-dictionary.md
  • vendor/oneroster-prior-workspace/docs/adr/0003-rest-json-is-a-projection.md
  • vendor/oneroster-prior-workspace/docs/adr/0004-import-export-evidence.md
  • vendor/oneroster-prior-workspace/docs/adr/0005-validation-and-rest-projection.md
  • vendor/oneroster-prior-workspace/docs/adr/0006-hosted-docs-and-release-evidence.md
  • vendor/oneroster-prior-workspace/site/llms.txt