Changelog
Version history for CWR-JSON.
Schema stability (read first)
CWR-JSON format version 1.00 / revision 0 remains the current interchange schema. Field names, object shapes, and JSON Schema (cwr-json-schema-v1.0.schema.json) are frozen unless this changelog records an explicit format bump.
| Change type | Affects your integration? |
|---|---|
Format (new works[] fields, renamed properties, new required fields) | Yes — plan migration; we will announce here in advance |
| Documentation (terminology, pipeline description, examples) | No — same JSON output |
| Validation (stricter JSON Schema, lookup tables, semantic rules) | Maybe — same field shapes; hand-edited JSON may fail where it previously passed |
Integrators (including downstream export pipelines) should treat this page as the source of truth for format and validation changes. Contact the SPF committee for advance notice of any planned format revision.
2026-07-26 — Parser 1.5.0 (format additive)
Additive only. Existing
nwr/revshapes unchanged.MessageTypegains"ack"; optional ACK fields and richermsgs[]properties documented.
Parser 1.5.0
ACK/MSGfixed-width layouts inrecordDefinitions(field-level EDI preview).- GRH
TransactionType=ACK→ work blocks start on eachACKrow (nestedNWR/REVstay in the same block). - Flat ACK fields on
works[].messages(type: "ack",transactionStatus, dates, creation numbers, …). MSG→messages.msgs[]withstatus,message, plusoriginalRecordSequence,recordType,messageLevel,validationNumber.- Nested
NWRafter ACK no longer overwritesmessages.type. - Sample:
test/files/151708_CW260050035_MDW.V22.
Validation
MessageTypeenum includes"ack".msgs[]allows the extra MSG columns listed above.
2026-06-30 — Parser 1.4.3 (no format bump)
No change to CWR-JSON v1.00 r0 object shapes.
works[].identifiers[]gains rows fromXRFrecords; JSON SchemaidentifierSourcesenum widened.
Parser 1.4.3
XRF(Work ID Cross Reference) →works[].identifiers[]:OrganisationCodebecomessource,Identifierbecomesvalue.- Special org codes:
ISW→source: "iswc";ISR→source: "isrc". - Society codes (e.g.
035) and CWR submitter IDs (e.g.EMI) are validsourcevalues; org000/099rows are skipped. - Duplicate
{source, value}pairs are deduplicated (including overlap withNWRISWC). - Sample file:
test/files/XRF-identifiers-sample.V22.
Validation
identifierSourceslookup set merges canonical sources with CISAC society codes andisrc.identifiers[].sourceaccepts the enum or^[A-Z]{2,3}$for publisher submitter codes.- ISRC format enforced on
identifiers[]whensourceisisrc.
2026-06-22 — Parser 1.4.2 (no format bump)
No change to CWR-JSON v1.00 r0 field shapes. Collection territory mapping and sub-publisher chain deduplication fixes.
Parser 1.4.2
- Zero-share
SPT/SWTrecords merge TISinclude/excludeinto the activecollterritory instead of spawning a separate territory with zero-value shares. - Share arrays omit
value: 0entries (aligned with Territories & Shares). - Duplicate
SPUfor the same sub-publisher under oneEchain is deduplicated; samepartyIdunder differentEparents remains separate (KEY008, KEY044).
2026-06-17 — Society code normalization (no format bump)
No change to CWR-JSON v1.00 r0 field shapes.
Validation 1.1.2 (patch)
- Optional normalization strips empty and
000society codes on shares before validation. - Parser output omits blank/
000society fields (matches CWR EDI semantics).
2026-06-15 — Validation 1.1.2 (no format bump)
No change to CWR-JSON v1.00 r0 field shapes.
Validation 1.1.2
- Lookup revision r1: CISAC society, character set, language, revocation, and anomalous-work enums in published lookup + JSON Schema.
- JSON Schema validates
shares[].society,header.characterSet,revocation.reason,flags.anomalousReason. - EDI validators on npm package (
validateCwrEdi, etc.) for raw CWR text before parse — see package README.
2026-06-03 — Validation UX & normalization (no format bump)
No change to CWR-JSON v1.00 r0 field shapes. Validation ergonomics and optional pre-validation cleanup.
Validation 1.1.1
- Optional normalization before validation: compact ISWC →
T-NNNNNNNNN-C, split combinedown/collterritory rows, strip invalidownon sub-publishers. - Validation results may include warnings for auto-fixed items; strict checks on raw exports can skip normalization.
- Clearer error output: rule codes and deduplicated messages instead of repeated
[if]/[maxItems]noise. - TIS lookup sourced from CISAC TIS export (see TIS Territory Codes and the published lookup table).
2026-06-03 — Validation 1.1.0 (no format bump)
No change to CWR-JSON v1.00 r0 field shapes. Stricter JSON Schema and semantic validation only.
Validation 1.1.0
- Published lookup table (
cwr_lookup_data_types_v1.0_r0.json): role codes, title types, identifier sources, full TIS table (CISAC groups + ISO 3166-1 numeric). - JSON Schema (
cwr-json-schema-v1.0.schema.json) injects lookup enums and field patterns. - Semantic rules in strict mode: TIS include/exclude overlap, sub-publisher no
own, publisherownonly forE, uniquesubmitterWorkNumberper file. - Advisory validation mode unchanged (warnings without failing).
- See Schema Validation and TIS Territory Codes.
2026-06-03 — Documentation errata (no format bump)
No change to CWR-JSON v1.0 output. Specification and validation documentation only.
- Removed incorrect “CWR 3.x” wording throughout the spec. There is no separate CWR 3.x EDI format; features such as publisher relinquishment come from CWR 2.2 Revision 3 (
PWRrecords). - Pipeline description aligned with the reference implementation:
buildWorkModel→projectCanonicalFromModel→schemaV1.convert()(see Introduction). - Schema Validation updated: published schema and lookup URLs, structural vs semantic validation rules.
Ownership vs collection territory placement (see Territories & Shares)
shareTypes[].type: "own"(fromSWR/OWR/SPU/OPU) is not scoped to TIS codes. It is stored in aterritories[]entry withterritory.include: []andterritory.exclude: [].shareTypes[].type: "coll"(fromSWT/OWT/SPT/OPT) is scoped to TIS include/exclude on the same or separateterritories[]entries.- Sub-publishers (
SE,AM,PA) do not receive ownership shares in JSON — only original publishers (E) emitown. Sub-publishers may havecollterritories only. - Integrators must not assume
ownandcollshare the sameterritory.includearray, or that sub-publishers mirrorSPUownership percentages.
v1.00 r0 — Initial Release (current format)
First public specification draft for CWR-JSON v1.0.
Architecture
- Two-phase mapper:
buildWorkModel→projectCanonicalFromModel PublisherRegistryfor publisher chain and PWR resolution- Territory helpers:
upsertOwnTerritory,upsertCollectionTerritory
Format
- JSON encoding of CWR 2.x work-registration records (primary target: CWR 2.2 Revision 3 EDI)
- JSON Schema: cwr-json-schema-v1.0.schema.json (draft-07)
- Lookup table: cwr_lookup_data_types_v1.0_r0.json
- Optional root
$schemafor interchange (not emitted by Playground today)
Supported CWR record types (→ JSON)
HDR NWR REV ACK ALT NAT NWN NOW NPN SPU OPU SWR OWR PWR SWT OWT SPT OPT REC ARI XRF MSG
Data model
parties: writers at top level; publishers inrepresentedBy[]; unlinkedEpublishers may appear at top levelparties[].territories[]:shareTypesown/collrecordings[]with ISRC dedupe andreleases[].identifiers(ean,catalogNumber)identifiers[]fromNWR/REVandXRF(society, submitter, ISWC, ISRC cross-refs)- GEMA
ARI(035/GW) →roleSplitM/roleSplitTonCAwriters NWN/NOW/NPN→nameDomestic/nameScript- CWR 2.2 Rev3
PWRrelinquishment on publisher participants
HDR → header (populated fields)
senderIdentifier, senderName, creationDate, creationTime, version (CWR EDI version, e.g. "2.1"), softwarePackage
Updated about 1 month ago