Summary
A developer integrating with the Chase Orbital XML API encountered a DTD validation error when attempting to create a Customer Information File (CIT) or Merchant Information Token (MIT) profile using the Auth + Create Profile (CGEN) message flow. The failure occurred specifically when including MIT-specific fields such as <MITMsgType> and <MITStoredCredentialInd> in the XML payload, despite the request being well-formed and credentials being valid. The root cause was identified as an incorrect Message Type selection for the specific requirement of “Auth + Create Profile.” The developer likely attempted to use a standard Auth message type and manually appended profile fields, a pattern supported by the API but restricted to specific field sets per message type. The fix involves using the dedicated New Order Message Type (M) which natively supports the CGEN instruction and the necessary MIT indicators for this specific flow.
Root Cause
The root cause of the DTD validation error is a mismatch between the Message Type (MsgType) used in the request and the fields included in the payload.
- Strict DTD Enforcement: Chase Orbital is highly sensitive to its Document Type Definition (DTD). Even if the XML is well-formed (valid syntax), it will be rejected if the data structure violates the schema rules defined for the specific
MsgType. - Unauthorized Fields: The developer likely sent a request with a generic
MsgType(e.g.,Afor standard Auth) orM(New Order) but included fields like<MITMsgType>CGEN</MITMsgType>or<MITStoredCredentialInd>Y</MITStoredCredentialInd>. In the Orbital DTD, these fields are likely restricted to specific message type definitions or require a specific transaction type code that triggers the profile creation logic implicitly. - Confusion of Workflows: The requirement to “Auth + Create Profile” triggers a specific transaction flow. If the developer explicitly added the MIT fields under a message type that doesn’t support them for that specific operation (or if they were omitted in a context where they are required), the DTD validator flags the request as invalid.
Why This Happens in Real Systems
This issue is common in legacy enterprise payment gateways and is driven by three factors:
- Schema Rigidity: Older payment protocols (like Orbital’s XML implementation) often rely on strict DTDs rather than flexible JSON schemas. If a field is not explicitly defined in the DTD for a specific
MsgTypeor transaction block, the parser throws a fatal error. - Documentation Ambiguity: The Chase Orbital documentation distinguishes between “Profile Creation” (CGEN) and “MIT” (Merchant Initiated) flows. While they are related, the API requires the developer to know that
MsgType="M"(New Order) is the standard vehicle for “Auth + Create Profile.” - Implicit vs. Explicit Indicators: In some implementations, the mere presence of the
CGENtransaction type implies the creation of a profile. Explicitly adding<MITMsgType>CGEN</MITMsgType>inside a standard Auth request might be syntactically valid in a general sense but invalid for that specificMsgType‘s DTD rules.
Real-World Impact
- Blocked Certification: The immediate impact is that the developer cannot pass the certification test cases required to go live.
- Operational Deadlock: Development halts on the payment integration module, delaying the project timeline and potentially blocking other dependent features.
- Resource Drain: The developer spends significant time debugging valid XML syntax rather than addressing the logic of the API interaction.
- Transaction Failures: In a production scenario, this would result in Transaction Declined or System Error responses, leading to lost revenue and poor user experience.
Example or Code
To resolve this, the developer must construct a request using the correct MsgType and TransactionType. Below is the correct XML structure for a New Order (Auth + Create Profile / CGEN) request suitable for MIT flows.
USER
PASS
M
000001
MerchantID
001
4111111111111111
1225
100
123456
AC
Y
CGEN
How Senior Engineers Fix It
Senior engineers approach this by ignoring the syntax and focusing on the transaction logic:
- Identify the Intent: The goal is “Auth + Create Profile.” In Orbital, the
NewOrderMsgwithTransactionTypeset to AC (Auth and Capture) or A (Auth) combined with profile flags is the standard approach. - Isolate the Message Type: They ensure
MessageTypeis set to M. This is the most versatile message type that supports profile generation. - Remove Manual Indicators (If Necessary): If the DTD persists in failing, a senior engineer will test removing the
<MITMsgType>and<MITStoredCredentialInd>tags and rely solely on theTransactionType="AC"if the documentation implies thatAChandles profile creation for first-time tokens. - Consult the Correct Guide: They differentiate between the QuickResp (basic response) and the full API. The error “Request does not adhere to the DTD” usually means the developer is looking at a schema meant for a different
MsgType(e.g., trying to useT(Reversal) fields in anM(New Order) request).
Why Juniors Miss It
- Syntax over Schema: Junior developers often validate XML using standard linters (checking for closing tags and encoding). They assume that “Valid XML” equals “Valid API Request,” missing that the DTD imposes business rules on top of syntax.
- Copy-Paste Reliance: They copy fields from different sections of the documentation (e.g., taking MIT fields from a “Recurring Payment” example and pasting them into a “New Customer Profile” example) without realizing the underlying
MsgTypechanged. - Over-Specification: They tend to include every field mentioned in the documentation for a specific feature, whereas the API often requires only a subset of fields depending on the
MsgTypeandTransactionTypecombination.