This page covers the first hop: the code/message helps 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.
...
that currently answers WIPO DAS over the legacy TDA/PDX XML protocol figure out what to return instead if it implements the modern "OFF Services" REST interface.
This only concerns the OFF↔DAS exchange. 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
...
reaches the requesting office (OSF)Sample exchange over the new REST interface
Instead of a numeric TDA/PDX code, an OFF implementing REST reports status with plain fields:
| Code Block |
|---|
|
POST /v1/requests/notifications
{
"systemId": "<office code>",
"notificationCategory": "document availability",
"dateTime": "2026-02-25T12:23:24Z",
"totalQuantity": 1,
"documentNotificationRetrievalStatusBag": [
{
"requestAckId": "USIB20210523120902",
"requestStatusCategory": "error",
"errorCode": null,
"statusMessage": "unmatched access code"
}
]
} |
TDA/PDX code → REST equivalent
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 | Status type | TDA/PDX meaning as supplied |
|---|
DAS canonical message | DAS sub-code | DAS errorCode category | REST requestStatusCategory | REST statusMessage to send | Notes |
|---|
| 0 | FWA-status, PDX-status | No Error / Successful |
Successful. | 0 | SUCCESS | success | ready for download → delivered (two-stage) | Report ready for download once the file/URL is available, delivered once retrieved |
code 0 is reused for 0 / 14 / 15 |
| 1 | FWA/PDX/DAS-status | Application number provided was not found | error |
Application provided was 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)available | This code may also represent "document withdrawn" or a generic missing-field condition — send the message matching the actual situation |
| 2 | FWA-status, PDX-status | File is not available |
File is not available. (security clearance not granted) | -8 | OPERATION_FORBIDDEN | | error | document awaiting security clearance | Closest available match; the REST vocabulary does not distinguish a temporary "awaiting clearance" from a permanent refusal |
| 3 | PDX-status | Documents was not found |
Document(s) was not found. | -9 | OPERATION_FORBIDDEN | error | document incomplete |
|
| 4 | FWA-status | Document content could not be retrieved |
— | (not mapped) | (none) | | n/a | n/a | Not used in practice — TDA Error |
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 | | error | document awaiting security clearance | Same REST phrase as code 2 — no separate "not authorized for public access" message exists |
| 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| n/a | n/a | Not used in practice |
| 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| n/a | (no equivalent) | Not applicable under REST: large files are handled via presigned-URL upload/download |
| 8 | FWA-status | Request less than 1000 pages per transaction |
— | (not mapped) | (none) | | n/a | n/a | Not used in practice |
Not wired up; probably unused | — TDA code 7 is reported instead |
| 9 | DAS-status | Registered |
— | DAS-internal | Internal status only, not a counterpart reply code from an OFF |
| 10 | DAS-status | Not Registered |
—DAS-internal | Internal only |
| 11 | PDX-status | Das Access Code invalid |
ACC invalid. | -4 | error | unmatched access code |
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"(not mapped) | pending | awaiting off response | Default pending state while the OFF works on the request |
| 13 | PDX-status | Application number does not correspond with bibliographic data |
— | — 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 | | n/a | n/a | Registration-only — |
not applicable to retrieval| out of scope (this interface covers retrieval only) |
| 15 | DAS-status | Successfully Updated DAS to OFF only |
Successfully Updated. | 0 | SUCCESS | | n/a | n/a | Registration-only — |
not applicable to retrieval| out of scope |
| 16 | DAS-status | Das Access Code and Priority Date did not match |
ACC and Priority Date did not match. | -15 | error | unmatched document date and access code |
INVALID_INPUT_DATA |
|
| 17 | DAS-status | Priority Date did not match |
Priority Date did not match. | -12 | INVALID_INPUT_DATA | error | unmatched document date |
|
| 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 error | unmatched access code |
"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 | error | invalid document details | Closest available match — there is no separate "missing" vs. "mismatched" date message |
INVALID_INPUT_DATA |
| -1 | FWA-fault, PDX-fault | System not available, scheduled downtime |
System is not available due to scheduled downtime. | -101 | | (reported as a system error, not this vocabulary) | — | Use code: TDA_SYSTEM_ERROR, message: "TDA SYSTEM ERROR" on the request itself (HTTP 500) |
DAS_SYSTEM_ERROR |
| -2 | FWA-fault, PDX-fault | System not available, back-end problem |
System is not available due to system problem. | -101 | | (reported as a system error, not this vocabulary) | — | Same as -1 |
DAS_SYSTEM_ERROR |
| -3 | PDX-fault | Received document cannot be imported |
The received document can not be imported. | -2 | INVALID_INPUT_DATA | | n/a | (no equivalent) | No longer applicable: the REST interface exchanges plain identification data, not document content |
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 | | n/a | (no equivalent) | Same as -3 |
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.operationCategory only allows retrieval — 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:
| Code Block |
|---|
|
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
...
| n/a | (no equivalent) | Same as -3 |
Sample of a system-level error (request rejected before it is even processed)
| Code Block |
|---|
|
{
"code": "TDA_SYSTEM_ERROR",
"message": "TDA SYSTEM ERROR",
"details": [
{ "message": "Unexpected internal error", "code": 500 }
]
} |
Other examples of this shape:
...
{
"code": 400,
"message": "Invalid input data or document",
"errorMessage": "DAS Access Code cannot be blank"
} |
...