This page covers the first hop: the code/message an Office of First Filing (OFF) sends back to WIPO DAS when DAS forwards it a live retrieval or registration-acknowledgement request. An OFF can do this over two different protocols, covered in two sections below.
An OSF / REST API caller never sees any of this directly. DAS always translates it before passing it on — see 5.1.2.- Responses from DAS to OSF via notification endpoint and 5.1.3.- Responses from DAS to OSF via GET for what actually reaches the caller.
Part A — Legacy TDA/PDX XML protocol (numeric codes)
Source of truth (code, not documentation): - das-app/src/app/das-tda-error-messages.ts — literal TDA/PDX message text - das-app/src/app/das-error-code-mappings.ts — the tdaSystemCodes[] arrays that map a TDA code to a DAS canonical message - das-app/src/app/das-error-codes.ts — the 6 top-level errorCode categories
TDA/PDX code → DAS canonical message
| TDA/PDX code | Status type | TDA/PDX meaning as supplied | DAS canonical message | DAS sub-code | DAS errorCode category | Notes |
|---|---|---|---|---|---|---|
| 0 | FWA-status, PDX-status | No Error / Successful | Successful. | 0 | SUCCESS | code 0 is reused for 0 / 14 / 15 |
| 1 | FWA/PDX/DAS-status | Application number provided was not found | Application number provided was not found. | -4, -7, or -5 (see note) | INVALID_INPUT_DATA or OPERATION_FORBIDDEN | ⚠️ Overloaded: the backend reuses TDA code 1 for three different outcomes depending on internal context: generic invalid input (-4), "document not found" (-7), and "document withdrawn" (-5, under OPERATION_FORBIDDEN) |
| 2 | FWA-status, PDX-status | File is not available | File is not available. (security clearance not granted) | -8 | OPERATION_FORBIDDEN | |
| 3 | PDX-status | Documents was not found | Document(s) was not found. | -9 | OPERATION_FORBIDDEN | |
| 4 | FWA-status | Document content could not be retrieved | — | (not mapped) | (none) | Not wired up in code; probably unused, as TDA 3 covers the same situation |
| 5 | PDX-status | Not published, no authorization to permit access filed | File is not available to the public, and no authorization to permit access has been filed. | -6 | OPERATION_FORBIDDEN | |
| 6 | FWA-status | Delay in translation | — | (not mapped) | (none) | Not wired up in code; probably never used (do not confuse with code -6 below, which is a different, negative code) |
| -6 | (missing from the original table entirely) | XML output processing failure (reused as a generic technical-error code) | Duplicate document received / File already uploaded and registered | -1 or -107 | INVALID_INPUT_DATA or OPERATION_FORBIDDEN | ⚠️ Actively used by the backend for two different outcomes (duplicate document vs. already-registered file), but was never documented on the old matching table. Registration-only — not applicable to retrieval |
| 7 | PDX-status | Oversize document/CD will be mailed | Oversize Document – CD will be mailed. | -201 | OPERATION_IN_PROGRESS | See 5.1.2 — no EDI translation exists for this code, so it isn't actually forwarded via the notification webhook today |
| 8 | FWA-status | Request less than 1000 pages per transaction | — | (not mapped) | (none) | Not wired up; probably unused — TDA code 7 is reported instead |
| 9 | DAS-status | Registered | — | n/a | n/a | DAS-internal status only, not a counterpart reply code from an OFF |
| 10 | DAS-status | Not Registered | — | n/a | n/a | DAS-internal only |
| 11 | PDX-status | Das Access Code invalid | ACC invalid. | -4 | INVALID_INPUT_DATA | |
| 12 | PDX-status | Request under processing, response sent later | The request is under processing, the response will be sent later. | -202 | OPERATION_IN_PROGRESS | Code comment marks this "obsolete now... not implemented on DAS side, also we don't expect it from TDA side" |
| 13 | PDX-status | Application number does not correspond with bibliographic data | — | (not mapped) | n/a | Rarely used — DAS rejects an OSF request with mismatched data before it would reach this point |
| 14 | DAS-status | Successfully Registered DAS to OFF only | Successfully Registered. | 0 | SUCCESS | Registration-only — not applicable to retrieval |
| 15 | DAS-status | Successfully Updated DAS to OFF only | Successfully Updated. | 0 | SUCCESS | Registration-only — not applicable to retrieval |
| 16 | DAS-status | Das Access Code and Priority Date did not match | ACC and Priority Date did not match. | -15 | INVALID_INPUT_DATA | |
| 17 | DAS-status | Priority Date did not match | Priority Date did not match. | -12 | INVALID_INPUT_DATA | |
| 18 | DAS-status | Das Access Code did not match | ACC did not match. | -14 or -13 (see note) | INVALID_INPUT_DATA | ⚠️ Overloaded: same TDA code used both for "mismatched access code" (-14) and "missing access code" (-13) |
| 19 | DAS-status | Priority Date was not provided by OFF | Priority Date was not provided by OFF. | -13 | INVALID_INPUT_DATA | |
| -1 | FWA-fault, PDX-fault | System not available, scheduled downtime | System is not available due to scheduled downtime. | -101 | DAS_SYSTEM_ERROR | |
| -2 | FWA-fault, PDX-fault | System not available, back-end problem | System is not available due to system problem. | -101 | DAS_SYSTEM_ERROR | |
| -3 | PDX-fault | Received document cannot be imported | The received document can not be imported. | -2 | INVALID_INPUT_DATA | Resolves to the "invalid document file format" sub-code, not a generic -3 |
| -4 | FWA-fault, PDX-fault | XML input processing failure | XML input processing failure | -3 | INVALID_INPUT_DATA | Covers corrupted file / invalid ST.26 package / checksum mismatch / virus infected |
| -5 | FWA-fault, PDX-fault | XML output processing failure | XML output processing failure | -3 | INVALID_INPUT_DATA | Used specifically for the "file not available" sub-case |
Known gaps / things to keep in mind when testing
- Overloaded codes (1, 18, -6) can't be told apart just from the TDA code — the real outcome depends on internal state DAS already has about the request. Don't assume a 1:1 mapping when writing test assertions.
- Unmapped codes (4, 6, 8, 9, 10, 13) exist in the ST.36/TDA specification but have no corresponding entry in
das-error-code-mappings.ts— if an OFF ever sends one of these, DAS has no specific translation for it. - Codes with no onward translation (7, 12) reach DAS but have an empty
ediSystemCodes[]entry, meaning there is currently no EDI message to forward to an OSF via the notification webhook (see 5.1.2). Code 12 is explicitly commented as obsolete.
Part B — Migrating to the modern "OFF Services" REST interface: what replaces each TDA/PDX code
Source:das/documents/postman/sampleYamlFileOffServices-draftSample_20260225.yaml — a draft spec for OFFs that want to answer DAS over plain REST/JSON instead of legacy TDA/PDX XML.
⚠️ Status: draft, not yet live. In the current DAS backend, the only code touching this interface is a mock/test harness (
forward-retrieval-request-mock-service.ts, used by the internal automation-test suite) — no production office implements it yet. Treat the table below as "what an OFF should implement", not as a confirmed, already-observed behaviour like Part A.⚠️ Scope: retrieval only. The draft's
PdxRequest.operationCategoryonly allowsretrieval— registration-related TDA codes (9, 10, 14, 15, -6) have no place in this interface at all and are out of scope for this mapping.
How the REST interface replaces the numeric code
Instead of a numeric TDA/PDX code, the OFF's REST endpoint reports status with:
requestStatusCategory: pending | success | error # coarse bucket statusMessage: free text # the actual "reason", e.g. "unmatched access code" errorCode: string (loosely typed, no fixed enum)
POST /v1/requests/notifications (DocumentNotificationRetrievalStatus), or returned directly on GET /v1/requests/retrievals (PdxResponse). The statusMessage vocabulary documented in the draft is word-for-word identical to the literal strings DAS already uses internally in das-status.ts (see 5.1.3, section B) — so an OFF implementing this spec should reuse exactly those strings.TDA/PDX code → REST equivalent an OFF should implement
| TDA/PDX code | Legacy meaning | REST requestStatusCategory | REST statusMessage to send | Notes |
|---|---|---|---|---|
| 0 (retrieval success) | No Error / Successful | success | ready for download → delivered (two-stage) | Report ready for download once the file/URL is available, delivered once retrieved |
| 1 | Application number provided was not found | error | document number not available | Direct equivalent |
| 2 | File is not available (security clearance not granted) | error | document awaiting security clearance | ⚠️ Gap: this REST phrase reads as "pending", but TDA 2 is a permanent refusal. The draft vocabulary doesn't distinguish "awaiting clearance" (temporary) from "clearance permanently denied" — OFFs will need to reuse the same phrase for both until the draft is refined |
| 3 | Documents was not found (incomplete set) | error | document incomplete | Direct equivalent |
| 5 | Not published, no authorization to permit access filed | error | document awaiting security clearance(best available match) | ⚠️ Gap: same phrase as TDA 2 above — the draft has no separate "not authorized for public access" status, so this and TDA 2 collapse into one REST message |
| 7 | Oversize document, CD will be mailed | n/a | (no equivalent — see note) | Not applicable under REST: large files are handled via presigned-URL upload/download (as in the registration/retrieval Postman collections), so there is no "oversize/CD mailed" concept any more |
| 11 | Das Access Code invalid | error | unmatched access code | Direct equivalent |
| 12 | Request under processing, response sent later | pending | awaiting off response | This is really just the default pending state while the OFF works on the request, not a distinct error |
| 16 | Das Access Code and Priority Date did not match | error | unmatched document date and access code | Exact equivalent — the draft vocabulary has a dedicated phrase for this combined case |
| 17 | Priority Date did not match | error | unmatched document date | Direct equivalent |
| 18 | Das Access Code did not match | error | unmatched access code | Direct equivalent |
| 19 | Priority Date was not provided by OFF | error | invalid document details(closest match) | ⚠️ Gap: the draft vocabulary doesn't distinguish "missing" from "mismatched" date — unmatched document date would also be defensible; needs clarification with DAS Support before an OFF implements it |
| -1 / -2 | System not available (scheduled downtime / back-end problem) | n/a — not part of the async statusMessage vocabulary | — | Report via the synchronous error shape instead: code: TDA_SYSTEM_ERROR, message: "TDA SYSTEM ERROR" (HTTP 500), per the draft's exampleOfError500 |
| -3 / -4 / -5 | Received document cannot be imported / XML input / output processing failure | n/a | (no equivalent — see note) | Not applicable under REST: these codes exist only because the legacy protocol exchanges XML payloads. The REST interface exchanges structured JSON with no embedded document content, so there is nothing to "fail to import/parse" in this sense. If sample data genuinely can't be matched, use invalid document details instead |
| 4, 6, 8, 9, 10, 13 | (already unmapped/unused in Part A) | — | — | Remain unmapped; no REST equivalent needed |
Synchronous (request-level) errors — not part of the TDA code family
Separately from the status-message vocabulary above, the draft defines a plain request-validation error shape for when DAS calls the OFF's endpoint with bad/missing parameters (this is plumbing-level, not a translation of a TDA business code):
{
"code": 400,
"message": "Invalid input data or document",
"errorMessage": "DAS Access Code cannot be blank"
}
requesterOffice, documentNumber, documentDate, dasAccessCode, and requestAckId. Note the schema types code as an integer (echoing the HTTP status: 400/401/500), while the file's own notification-endpoint examples inconsistently use string codes (INVALID_INPUT_DATA, INVALID_TOKEN, TDA_SYSTEM_ERROR) for the same concept — flagged here as a draft inconsistency to resolve before this spec is finalized, not something to replicate.