Skip to content
Reference

Which error list does my code come from?

Which error list does my code come from?

Last updated

ICEGATE is one gateway in front of several customs systems, and each of them answers from its own list of error codes. A number on its own means nothing: 999 is reserved for internal use on a CSN and check the duty parameters on a Bill of Entry, and 101 is Incorrect Message Type on a legacy Sea IGM and a container problem on a CSN. So the first question about any code is not "what does it mean" but "which system said it" — and the reply itself tells you.

How do I tell which system answered me?

Read the message id in the reply, or the name of the file it came in. Then read the code in that list, and only that list.

What was filedThe reply's message idIts codesWhere to read them
A CSN (SACHM22)SACHM22, in a file ending _ACK.json453 numbered codes, 00–999, plus 700 and 705 which the table omitsEvery ICEGATE error code
A shipping line filing — SAM, SDM, SEI, SDN, SAA, SDA (SACHM23)SACHM23, _ACK.jsonthe CSN's numbered list since March 2025, plus manifest-only 369–379; a code may carry a block prefix, VGD020 being 20 — see error codes on a manifest replyEvery ICEGATE error code and the section below
A custodian or transhipper message — SF, ST, DT, AT, DP, AR, ASRthe message's own namealphanumeric — LCB12, TMB03, CDB08the table on this page
A legacy Sea IGM (the pre-SCMTR manifest)SACHI01, module IGMSEA196 numbered codes, 000–601 (000 is IGM Submitted)ICEGATE's Sea IGM list
A consol IGMCMCHI21, module CONSIGMSEA148 codes from 000 (000 is Consol IGM Submitted)ICEGATE's Sea Console list
An ICD IGMthe ICD IGM message172 codes to 901ICEGATE's ICD IGM list
A Bill of EntryCACHI01455 codes on a fresh submission, 391 on an amendment, 417 on the single-window filingICEGATE's Bill of Entry lists
A container-arrival reportCOCHI02ten codes, 31–42ICEGATE's container-arrival list
A vessel agent's rotation applicationSACHE01ten codes, 00 and 11–19 (00 is Rotn No Generated)Other message families
An export general manifest's shipping bills, as customs reads themSACHE18, a flat file SACHE18A_<date>_<time>.outone letter a shipping bill — S, Q, B, A …Other message families
An export transhipment permitSACHE21one letter a shipping bill — S is TP Validation is SuccessfullOther message families
An air export general manifestALCHE01one or two letters an air waybillOther message families
An entity's SCMTR registrationENCH0175 numbered codes — their own meanings, not the CSN'sOther message families
A custodian's CIMIECHE0158 numbered codes — their own meaningsOther message families
Any file that failed structural validationan _SFL.jsonno code — JSON-Schema words such as required and patternReading an acknowledgement
A file refused before it became a declarationan e-mailno code — proseReading an acknowledgement

Two things follow. A forwarder or consolidator filing a CSN will only ever be answered from the first row, so the CSN table is the one to keep open. And a code that is not in that table has almost certainly come from another row — read the message id before assuming customs invented a code.

Error codes on a manifest reply

A manifest reply's code can carry a three-letter prefix naming the block it was found in, in front of the ordinary SCMTR number. ICEGATE's own Message Filing FAQs and Common Errors prints them side by side: VGD020 beside 20 (Invalid Voyage Call Number, found in the voyage details), MTE119 beside 119, HCI264 beside 264. Read the number; the letters tell you where to look. No published table maps every prefix to its block, so the right-hand column below is read from where each was seen:

PrefixWhere the error was found
DRFthe manifest reference (job number, rotation)
APRthe line, agent and terminal (authorised person)
VSLthe vessel details
VGDthe voyage details, including the declared totals of lines and containers
PRD / PIDa person on board — their details / their identity document
MCR / MLC / MTD / MTE / MTR / MIDa master line — its reference / location customs / transport document / equipment / measurements / item details
HDR / HCI / HCT / HTD / HTE / HTR / HIDa house bill — the same blocks one level down

Which wording applies depends on the guide in force. Until the manifest guide's 2025 revision it carried its own list of 158 codes; since March 2025 it uses the CSN's list, and some numbers changed meaning in the switch. So an old explanation found online can be wrong for a 2026 reply:

CodeBefore 2025Since 2025
13Invalid Terminal Operator CodeMismatch in Terminal Optr Cd of SAM and VCN-NLP
119Mandatory MC-Object/Attribute MissingIMDG Code is not Matching With UNO Code
120Mandatory HC-Object/Attribute MissingUNO Code is not Matching With IMDG Code
150a different checkPAN Not Authorised To Submit Declaration
151a different checkIncorrect CSN Rep-Event Referred in MC
152a different checkIncorrect CSN Rep-Event Referred in HC
158a different checkConsolidator PAN Should be Same as Submitter PAN

The same drift runs through the CSN's own list: the 2022 SCMTR Error Codes v1.0 and the CSN guide v1.2 word some codes differently from today, and two of them now mean something else. Read the words in your own reply — the platform shows them beside the current ones whenever the two differ:

CodeOlder published wordingCurrent wording
124CIN_TYPE+CIN_NO Already UsedCIN_TYPE+CIN_NO Already Referenced
125CSN_No+CSN_Dt Already ExistsCSN_No+CSN_Dt Already Referenced
263Redundent MC-Object/Attribue — a different checkMC-MBL Should Have Split Cargo = Y
264Redundent HC-Object/Attribue — a different checkHC-HBL Should Have Split Cargo = Y
266Container Bond Flag Should be DContainer Bond Flag Should be N
268Container Bond Flag Should be HContainer Bond Flag Should be N

So the 2021 FAQ's HCI264 is the old 264 — a redundant house-bill object, the same fault a 2026 reply calls 370 with 118 — and not today's split-cargo check.

Codes only a manifest gets. Added by the manifest guide's May 2025 update, and not in the CSN guide:

CodeICEGATE's description
369Invalid Consignor PAN
370Redundent House Details for BL
371Consignor PassPort Number is Null
372Consignee PassPort Number is Null
373Entry Inward is Granted-CSN Amendment Not Alllowed
374Entry Inward is Granted-SAM/SDM Amendment Not Alllowed
375Duplicate Record in MC Ref-MBL+HBL
376Duplicate Record in MC Transport-MBL+HBL
377Cargo Description Code Should Be Frieght Container
378Incorrect Cargo Movement Type For Export-EX Cargo
379Incorrect Cargo Movement Type For Transit-TR Cargo

Other numbers a line meets often, in the current guide's words: 122 MC-MBL Details Already Exists (on a split bill — see the split indicator in Working with a vessel manifest), 206 SAM is Already Filed Against Given Rotation Number, 279 Total Lines and Equipment Not Found in SAM, 322 SAM/SDM Amendment is Already Pending for Approval, 323 SAM/SDM is Closed- Amendment is Not Allowed.

The codes ICEGATE's own sample refusal uses, with each code's number and the wording of the manifest guide's list at the time (2020–2024). A number whose meaning changed in 2025 is flagged in the table above; check the current wording in Every ICEGATE error code under the number.

CodeNumberWording in the sample (manifest list, 2020–2024)Where
DRF02424Invalid Rotation/Voyage Call Numbermanifest reference
APR01111Invalid Shipping Line Codeline, agent and terminal
APR01212Invalid Carrier Codeline, agent and terminal
APR01313Invalid Terminal Operator Code — since 2025, a mismatch between the terminal operator code in the SAM and in the port's VCNline, agent and terminal
VSL01414Invalid Mode of Transportvessel
VSL01616Invalid Transport Means Identityvessel
VSL01818Invalid Purpose of Callvessel
VGD01919Invalid Voyage Numbervoyage
VGD02020Invalid Voyage Call Numbervoyage
VGD02222Invalid Expected Time of Arrivalvoyage
VGD02323Invalid Expected Time of Departurevoyage
VGD08989Total Equipment in Vessel Less than Cargo Equipment — the voyage's declared container total is below the containers on its linesvoyage
VGD09090Total Lines in Vessel Not Match with Cargo Lines — the voyage's declared line total differs from the lines filedvoyage
PRD188188Incorrect Embarkment Port Codeperson on board
PRD189189Incorrect Disembarkment Port Codeperson on board
PID179179Incorrect Person Identityperson on board

One refused manifest reply from 2026 has been seen (an arrival manifest amendment, September 2026). Its codes — 164, 232 and 233 — came as bare numbers with no prefix, each on the block it failed (MCRef, trnsprtDocMsr) of the consignment line concerned, and each in the current shared list's wording. That settles those three; whether other codes, or other reporting events, ever carry the prefix is not yet confirmed on a real file. Every manifest reply seen since — refused SAAs, an SDM, accepted SAMs, September 2026 — has carried bare numbers too. Either way the platform reads a prefixed code as its number, so MTE749 is explained as 749.

Codes in no published list. Customs sends codes that are in none of these lists — 700, 705, the export 381/383/384/709, the seal codes 701/703 on CSNs, and on manifest amendments 385, 394, 398, 399, 707, 724, 748, 749 and 753 — and it words them the way it words the published ones. Each is in the app and in Every ICEGATE error code from the first reply that carried it; 724 (CIN No Should be Provided in Prev-Decln of SAA/IM-SCA, an SAA removing a line without the CIN it quoted) came by e-mail on 1 October 2026, outside every upload, and was missed until that reply was read. Since 2 October every acknowledgement the platform keeps — including one dropped on the free file check — is read for a code it cannot name, or a known number in other words, and staff see it the day it arrives. So when a code arrives that nobody has seen, its words are the best evidence of what it means: one saying "Not Exists For Update/Delete" is an amendment addressing a record by a number customs does not hold, and one saying "Already Exists For Addition" is an addition under a number customs already uses. The platform reads those two by their words and says it has done so; any other unknown code is shown with customs' wording and no guess. See An amendment names a record customs does not hold.

Other message families and their codes

ICEGATE's 2022 SCMTR Error Codes & Descriptions also lists codes for six messages that are not a CSN or a manifest. Their numbers collide with the CSN's — ENCH01's 59 is Incorrect Sequence Number, the CSN's 59 First Port is Not Same as Port of Reporting — so read the message id first, and never look a code from these up in the CSN table.

MessageWhat it isCodes
SACHE01the vessel agent's application for a rotation number00 Message Successfully Validated and Rotn No Generated, 11–19 (IMO code, master name, shipping line, agent, next port of call — or one the same as the customs site, 16 — arrival date, application or rotation already filed)
SACHE18customs' reading of the shipping bills on a sea export general manifest, sent back as a flat file (SACHE18A_<date>_<time>.out), one line a shipping bill with its PCIN and a letterthe letters below
SACHE21an export transhipment permitone letter a shipping bill: S TP Validation is Successfull with no Error, A not in ICES, B filed in another TP, Q not in the EGM queue, I/J/P/W/N/C port, nature, packages, gross weight, containers or a container number not matching, E no container details, H/K/U/O/Y mode, carrier, bond code, bond number, bond not global, D duplicate, Z SQL error, F forced removal
ALCHE01an air export general manifestS/SS submitted after validation (whole, part), A no shipping bill for the AWB, L LEO date after the EGM date, P packets mismatch, T transhipment — or a PCTM AWB, the list giving the letter both meanings — Z not T for a PCTM transhipment, or an exception, H part shipment accepted, FS forced submission, SG/G gate EGM
ENCH01an entity's SCMTR registration00 Success, then 74 numbered checks of the entity, its PAN, IEC, GSTIN, customs broker and container train operator
IECHE01a custodian's CIM00 CIM Accepted, then 57 numbered checks of the movement, containers, cargo and documents

Reading a SACHE18 file. On the one departure we have seen (Kolkata, 1 October 2026), after the line filed its departure notification (SDN) customs compiled the export general manifest and ICEGATE mailed the line a flat file, SACHE18A_<date>_<time>.out — a few minutes before the SDN's own Accepted reply — one line per shipping bill — port, rotation, shipping bill number and date, PCIN — ending in one letter. The letters, in ICEGATE's words (this is customs' current table; a 2018 Board circular's EGM letters overlap it but are not the same — there T is a nature-of-cargo mismatch):

LetterICEGATE's words
SSB Submitted With Validation
QSB is Not IN EGM/EGM_ERR Que
ASB Does Not Exists in ICES
BSB Already Filed in Another EGM No.
CContainer No. Mismatch in c_container
DDuplicate SB No/Cntr No in c_egm_master/c_egmcont
FForceFull EGM Error Removal of SB
GSailing Report Not Entered
IInvalid Origin/Destination/Gateway Port
JNature of Cargo in EGM Does Not Match With C_SB
LLEO Date is Greater Than Sail Date
MGateWay Port <> Custom Port
NTotal No.of Container Does Not Match With C_Container
PPackets Mentioned in EGM Does Not Match With C_SB
RRecord Does Not Exists in C_sb_rotn For That EGM
TTranshipment SB
WTotal Qty in EGM Does Not Match With Gross Wt.C_SB
ZSome Error Occured during validation

It is about the shipping bills on the vessel's departure, not the import manifest, and not a refusal of the SDM, which has its own reply. What S and Q meant on customs' record when they were checked (every Q was a shipping bill customs still showed at stuffing, no stuffing report on record), and what to do about one, is in Exports: who files and when. Only S and Q have been seen on a real file.

Why does 999 mean three different things?

Because every one of these lists reserves its top band for the system rather than the filing, and each system describes its own failures. What is published:

ListCodeWhat ICEGATE says
CSN and manifest999Reserved for Internal Use for Amendment
CSN and manifest700Error-Refile — a refusal with no reason attached, in real acknowledgements and in no published table
Bill of Entry995INTERNAL ERROR IN INSERTING DATA IN QUE
Bill of Entry998ERROR IN TRANSFERRING DATA
Bill of Entry999CHECK DATA/DUTY RELATED PARAMETERS LIKE CTH/CETH/RSP/NOTN ETC.
ICD IGM900Loading Problem
ICD IGM901Mandatory Key Fields Missing
Air IGM999Not Submitted

A code in that band is telling you about the system's handling of the file, not about a field in it. The practical reading is the same in every list: do not edit the declaration on the strength of a 9xx code alone. Keep the reply, wait a short while, send the same file again with a fresh control number where the message needs one, and raise it with the ICEGATE helpdesk if it repeats — the same order of steps as for 700.

What does error code 994 mean?

As of September 2026, nobody outside customs can say. 994 appears in none of the eighteen lists and guides ICEGATE publishes — not the CSN table in any revision, not the manifest guide, not the custodian, transhipper or port guides, not the 2022 SCMTR Error Codes & Descriptions, and not the Sea IGM, Consol IGM, ICD IGM, Bill of Entry (fresh, amendment or single-window), container-arrival, Air IGM or Land EGM lists. The message-filing FAQ does not mention it, and neither do the trade's own compilations.

So a reader can check that claim rather than take it, these are the eighteen, all ICEGATE's own: the six guides on its Message Implementation Guide page (SACHM22 CSN, SACHIM23 manifest, Transhipper, CIM Custodian, Customs–Port integration, ICES ITP); the 2022 SCMTR Error Codes & Descriptions; the Sea IGM, Sea Console, Consol IGM, ICD IGM, Bill of Entry fresh-submission, Bill of Entry amendment, Bill of Entry single-window, container-arrival, Air IGM and Land EGM lists; and the UN/IMCO hazardous-cargo code list. Searched beyond those, and equally empty: the superseded March 2025 manifest guide, the ICES custodian and DGFT message formats, SEZ Online's consolidated Bill of Entry workbook, ICEGATE's message-filing FAQ, and the trade's compilations.

What can be said, and how sure it is:

    Where it sits. In every list that publishes its 99x band, that band is system-side (the table above). By position, 994 is most likely a sibling of 995 and 998 — an internal handling error rather than a fault in a field. That is an inference from the pattern, not a published meaning.Which system. The one filer who has reported it here said it came on a Bill of Entry, whose replies are CACHI01 and whose list is where 995, 998 and 999 live. If yours came the same way, it is ICES's code, not SCMTR's, and no CSN table will ever explain it.One list could not be checked. The IDPMS list — the bank-side import-data matching that a Bill of Entry also passes through — is no longer served by ICEGATE and was never archived. If the 994 arrived from your bank's system rather than from customs, it may be theirs.

What to do: keep the reply exactly as it arrived — file name, message id, control number and all — and send it to the ICEGATE helpdesk with those identifiers, asking which system issued it. Do not change the declaration to make a 994 go away; nothing published says which field, if any, it is about. If you receive one and learn what it meant, the answer belongs here.

Every custodian and transhipment code

The custodian's reports (SF stuffing, ST stripping, DT departure time, AT arrival time) and the transhipper's messages (DP departure, AR arrival, ASR allowed-for-shipment request) are answered with a code made of the block that failed and a number. ICEGATE published the list once, in the 2022 SCMTR Error Codes & Descriptions v1.0; it is transcribed here in full, in ICEGATE's own wording, spelling included. Where the same code carries a slightly different wording per message, both are given.

These are explained in the app as well as here. Ask the assistant about one, or open the acknowledgement itself on SCMTR JSON upload, and the code arrives with ICEGATE's wording and the events that use it rather than as four characters. See Reading a transhipper or custodian file.

The letters name the block, per the transhipper guide: HF header, LC location and party, DC declaration, CD cargo details, CC cargo container, IT itinerary, SD supporting documents. TM and CI are not expanded in any published guide; by their rows they are the transport means and the control checks — an inference.

CodeWhich messagesWhat ICEGATE says
CCB01DT, AT, ARAdditional container in that message which is not available in DP / Container available in that message but not in DP
CCM02SF, ASR, DPDuplicate record in Container
CCM03ASRDuplicate record in cargo
CCB14DPContainer number is not ready for DP
CCB15SF, DPOnly one container is allowed per stuffing message / DP is already filed for container
CCB16SF, DPContainer is already stuffed / Container type is different in stuffing and DP
CDM03SF, DPDuplicate record in cargo
CDB04SFMandatory MCIN/PCIN is missing
CDB05SF, ASRPCIN is not valid / Only one PCIN is allowed in ASR message
CDB06SF, ASR, DPShipping Bill is not ready for Stuffing / Invalid PCIN / Invalid CIN No
CDB07SF, ASRStripping message is not received for cargo / SB is not ready for ASR
CDB08SF, ASRNumber of packages are more than declared in SB / Reporting location does not tally with Cargo location
CDB09SF, ASR, DPCargo is not available at reporting site for stuffing / Cin is not ready for ASR / Invalid Cargo Location
CDB10SF, ASRInvalid package range / Container number is not avilable in CIN
CDB11SF, ASR, DPPackage is already stuffed / Less containers are declared in ASR / Internal Error
CDB12ASRInvalid Document details
CDB15SFPackage numbers are not correct
CDB18SFShipment Type is not valid
CDB19SFShipment Type is not valid for all records for PCIN
CDB20SFCustodian Code is not valid
CIB01DT, AT, ARDP Message is not yet received
CIB02DT, AT, ARthat message message is already received
CIB03AT, DTInvalid Location Code
DCB14ASRReporting Site is not operational
HFB02DT, AT, AR, SF, ASR, DPInvalid Reporting Event / Invalid Reporting event Valid values are (SF,ST,AT,DT)
HFB10DPRep event in control and manifest does tally
HFB13ASRRep event in control and manifest does tally
ITM05ASRDuplicate record in Itinerary
LCB03DT, AT, AR, SF, ASR, DPInvalid Party type / Invalid Party Type / Party type Should be 'C'- Custodian
LCB04ASR, DPInvalid person pan
LCB05ASR, DPWarehouse is not operational for 'ASR' / Invalid Bond details
LCB06DPInvalid Bond number
LCB07DPInvalid Bond Type
LCB08DPInsufficient Bond Balance
LCB09DPInternal Error - Bond amt cannot be calculated
LCB12DT, AT, AR, SFParty type is null / Party Type is null / Party Type is not valid
LCB13DT, AT, AR, SFParty Code is null / Party Code is not valid
LCB14DT, AT, AR, SFInvalid Authorised Pan / Authorized Person PAN is not valid
SDM04SF, ASR, DPDuplicate record in Supporting Document
TMB01DT, AT, ARMismatch between transport Number between DP and that message
TMB02DT, AT, ARMismatch between transport type between DP and that message
TMB03DT, AT, ARContainer available in DP but not in that message ie Container missing in that message
TMB04ARLocation code mismatch

The transhipper guide (v1.5, March 2026) adds a short list of its own, written with a space before the number:

CodeLevelWhat the guide says
M 01messageThere is duplicate records in master tag
CCM 02messageDuplicate records in container
CDM 03messageDuplicate records in Cargo
SDM 04messageDuplicate records in supporting Document
ITM05messageDuplicate records in Itnary
M 06messageIf a record present in control table there should be a record in master table
HFB02businessReporting event not in (ASR, DP, AR)
DCB03businessReporting event not in (ASR, DP, AR)
LCB04businessParty type should be 'ATP'
CDB05businessIf rep_event is 'ASR' then MCIN/PCIN must be populated
CDB06businessPCIN is not valid
CDB07businessIf pcin and rep_event site is same then the Current Queue of the Shipping Bill should be 'EGM'

Two of these matter to a forwarder even though the message is not theirs. CDB05 and CDB06 are the transhipper being refused because the PCIN your CSN earned is missing or not valid on their request — which means your CSN, or its amendment, is what to check. And LCB08 Insufficient Bond Balance on a DP is the transhipper's bond, never yours: see Transhippers, CFSs and bond numbers.

Is there a separate error list for SAM, SDM, SAA, SDA, SEI or SDN?

No published one, as of 24 September 2026, beyond what is already here. The manifest guide's own list was replaced by the CSN's in March 2025 (with the manifest-only 369–379 added that May), and a manifest reply's code is a block prefix in front of that number. ICEGATE's SCMTR advisories index, its "changes made in recent past" page (which has no body), the 2026 JNCH and Chennai public notices, the carriers' advisories and the third-party "ICEGATE error code" pages were all read again for the manifest family alone: none adds a code, and the unpublished 7xx refusals (700, 705, 707, 724, 748, 749, 753) still exist only in real acknowledgements. The twenty-first pass (2 October 2026) read every published list again against the app's catalogue — all 463 codes of the current guides, word for word — and every reply on file: nothing was missing; the only gap was a reply that never reached the platform. docs/sources.md's thirteenth and fourteenth passes list what was searched, so the search is not repeated without a new lead.

Where do these lists come from?

All from ICEGATE. The CSN and manifest guides and the transhipper, custodian and port guides are the six documents on ICEGATE's Message Implementation Guide page. The custodian and transhipment codes are from SCMTR Error Codes & Descriptions v1.0 (February 2022), still published. The Sea IGM, Consol IGM, ICD IGM, Bill of Entry and container-arrival lists were published on ICEGATE's old portal's Error Code List page, which no longer exists; they are quoted from its July 2022 copy in the Internet Archive. Counts are counts of rows in those documents, not of codes anyone has seen in practice.

Still stuck on this?

The assistant answers from this exact page and the rest of our reference material, and names the documents behind every answer.

Have the file? Check it free — no sign-in

General information only — not legal or customs-compliance advice, and it may not reflect the most current ICEGATE/CBIC requirements. Verify against the official sources, or a licensed customs broker, before filing.