<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kristi Hampson</title>
    <description>The latest articles on DEV Community by Kristi Hampson (@kristi-hampson).</description>
    <link>https://dev.to/kristi-hampson</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4022300%2F178cd4ff-b80f-4dfa-92d5-76750cd01286.png</url>
      <title>DEV Community: Kristi Hampson</title>
      <link>https://dev.to/kristi-hampson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kristi-hampson"/>
    <language>en</language>
    <item>
      <title>TSS API for Freight Forwarders: A Technical Overview</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Fri, 11 Sep 2026 06:43:38 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-api-for-freight-forwarders-a-technical-overview-3o37</link>
      <guid>https://dev.to/kristi-hampson/tss-api-for-freight-forwarders-a-technical-overview-3o37</guid>
      <description>&lt;h2&gt;
  
  
  What the TSS API actually offers
&lt;/h2&gt;

&lt;p&gt;The Trader Support Service exposes an API that allows authorised customs agents to submit declarations programmatically instead of through the portal. For freight forwarders with repeat-lane volume, this is where scaling stops meaning more people and starts meaning cleaner pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;You need an agent account (converted from trader, one-way), individual client authorisations, MFA-capable service accounts, and source data clean enough to survive schema validation without hand-repair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the 99-item limit
&lt;/h2&gt;

&lt;p&gt;A single TSS declaration is capped at 99 items. Consolidated loads exceeding that must be split before submission. This &lt;a href="https://www.icustoms.ai/blogs/tss-software-freight-forwarders/" rel="noopener noreferrer"&gt;TSS software for freight forwarders&lt;/a&gt; guide covers the splitting decision as part of the portal-vs-API choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Client-scoped identifiers
&lt;/h2&gt;

&lt;p&gt;Every declaration must carry the correct client EORI and, where relevant, the client UKIMS authorisation. Hard-coding these into shared config is where multi-client integrations most often fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exception handling in code
&lt;/h2&gt;

&lt;p&gt;The API returns rejections and amendments that must be routed back to the right client. Design your exception queue with the client context attached, not the submission ID alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  When API is the wrong answer
&lt;/h2&gt;

&lt;p&gt;Ad-hoc consolidated loads, low-volume clients, and new movement types often submit faster through the portal. Automation earns its keep on repeat shapes.&lt;/p&gt;

&lt;p&gt;See a multi-client TSS integration in production. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tss</category>
      <category>api</category>
      <category>ai</category>
      <category>freightforwarders</category>
    </item>
    <item>
      <title>TSS API Integration: A Practical Technical Guide</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Thu, 10 Sep 2026 09:07:10 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-api-integration-a-practical-technical-guide-27na</link>
      <guid>https://dev.to/kristi-hampson/tss-api-integration-a-practical-technical-guide-27na</guid>
      <description>&lt;h2&gt;
  
  
  What the TSS API actually is
&lt;/h2&gt;

&lt;p&gt;The TSS API is a JSON-based submission channel to the Trader Support Service. It accepts the same declarations the portal accepts, from a system rather than a human. TSS charges nothing for access and the endpoints are the same for every registered trader.&lt;/p&gt;

&lt;h2&gt;
  
  
  Field mapping is where projects live or die
&lt;/h2&gt;

&lt;p&gt;Every declaration field must be sourced from an authoritative system. If a value appears in two places, decide which one wins before writing any code. The &lt;a href="https://www.icustoms.ai/blogs/tss-api-vs-manual/" rel="noopener noreferrer"&gt;TSS API integration guide&lt;/a&gt; sets out the sequence: register, locate fields, map to TSS specifications, build, test, validate failure paths, run in parallel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a test environment first
&lt;/h2&gt;

&lt;p&gt;Do not integrate against production. Build in the dedicated environment TSS provides, run the full lifecycle including rejections, and only then plan cutover.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rejection handling is the real design
&lt;/h2&gt;

&lt;p&gt;Success cases are easy. Rejections need a defined path: which system logs the failure, which team sees it, what the retry pattern is, and how long a submission can sit in an error state before it violates a deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Progressive assembly
&lt;/h2&gt;

&lt;p&gt;The API supports adding information incrementally as consignment details arrive. Model that in your queue design; do not treat every declaration as a single atomic post.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run both channels during migration
&lt;/h2&gt;

&lt;p&gt;Parallel running is not optional. Keep the portal live for the same movements until API submissions have produced clean results across a full month cycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See a working TSS API integration inside iCustoms. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>tss</category>
      <category>api</category>
      <category>integration</category>
      <category>technicalguide</category>
    </item>
    <item>
      <title>TSS Automation Software: A Technical Buyer's Checklist</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Wed, 09 Sep 2026 07:42:10 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-automation-software-a-technical-buyers-checklist-37je</link>
      <guid>https://dev.to/kristi-hampson/tss-automation-software-a-technical-buyers-checklist-37je</guid>
      <description>&lt;p&gt;If you are the engineer being asked to sign off on a TSS tool, the marketing decks will not help. Six technical checks will.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Submission API surface
&lt;/h2&gt;

&lt;p&gt;Which declaration types are live in production today: ENS, simplified frontier, supplementary, full frontier? Does UKIMS internal market movement work end to end? Can port movement references be created programmatically?&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Validation contract
&lt;/h2&gt;

&lt;p&gt;What checks run pre-submission, and can they be triggered independently of submission? A useful walk-through of validation depth sits in this &lt;a href="https://www.icustoms.ai/blogs/tss-automation-software/" rel="noopener noreferrer"&gt;iTSS automation guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Throughput and back-pressure
&lt;/h2&gt;

&lt;p&gt;Batch limits, per-declaration item caps, rate limits, and behaviour under the 10th-of-month spike.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Error contract
&lt;/h2&gt;

&lt;p&gt;Structured error codes, remediation hints, webhook or queue delivery, and idempotency on retry.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Integration surface
&lt;/h2&gt;

&lt;p&gt;File pickups, ERP connectors, OCR handoff, and clean interfaces for supplier invoice ingestion.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Audit export
&lt;/h2&gt;

&lt;p&gt;Full history export as machine-readable data, not just PDFs, retained for the periods your movements require.&lt;/p&gt;

&lt;p&gt;Test the API surface against your workload. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tss</category>
      <category>api</category>
      <category>customs</category>
      <category>automation</category>
    </item>
    <item>
      <title>TSS to GVMS: The Data Flow Behind a GMR</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Tue, 08 Sep 2026 07:19:39 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-to-gvms-the-data-flow-behind-a-gmr-4j35</link>
      <guid>https://dev.to/kristi-hampson/tss-to-gvms-the-data-flow-behind-a-gmr-4j35</guid>
      <description>&lt;h2&gt;
  
  
  What the systems actually do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TSS (Trader Support Service):&lt;/strong&gt; produces the customs declarations and issues the MRNs for GB to NI and NI to GB movements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GVMS (Goods Vehicle Movement Service):&lt;/strong&gt; the vehicle-facing system at Roll-on Roll-off ports. Holds the GMR that ties declarations to a vehicle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDS (Customs Declaration Service):&lt;/strong&gt; the underlying declaration system whose MRN format appears on GMRs.
## The reference formats you will see&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;GVMS declaration type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CDS...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CDS format MRN&lt;/td&gt;
&lt;td&gt;Customs declaration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;YYGB...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Year-plus-GB format MRN&lt;/td&gt;
&lt;td&gt;Customs declaration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;XI...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Entry Summary Declaration made in ICS2&lt;/td&gt;
&lt;td&gt;Entry in Declarant's Records (plus trader EORI)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The build sequence
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Register for GVMS on GOV.UK (GB EORI required).&lt;/li&gt;
&lt;li&gt;Start a new GMR and enter movement information.&lt;/li&gt;
&lt;li&gt;Select the declaration type based on the reference format.&lt;/li&gt;
&lt;li&gt;Add customs references from TSS notifications.&lt;/li&gt;
&lt;li&gt;Add additional consignments.&lt;/li&gt;
&lt;li&gt;Include any non-TSS consignments with MRN and safety and security data.&lt;/li&gt;
&lt;li&gt;Review.&lt;/li&gt;
&lt;li&gt;Save or print the GMR barcode.
The full annotated sequence is in this &lt;a href="https://www.icustoms.ai/blogs/tss-gvms-gmr/" rel="noopener noreferrer"&gt;technical TSS to GVMS reference&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Update semantics
&lt;/h2&gt;

&lt;p&gt;A GMR is mutable until the boarding barcode is scanned. After that, the reference is fixed for that movement.&lt;/p&gt;

&lt;p&gt;Connect TSS, CDS and GVMS into a single API-driven flow. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>customs</category>
      <category>api</category>
      <category>tss</category>
      <category>gvms</category>
    </item>
    <item>
      <title>Technical Guide: Filing ENS to Northern Ireland Through TSS</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Mon, 07 Sep 2026 08:10:49 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/technical-guide-filing-ens-to-northern-ireland-through-tss-1kki</link>
      <guid>https://dev.to/kristi-hampson/technical-guide-filing-ens-to-northern-ireland-through-tss-1kki</guid>
      <description>&lt;h2&gt;
  
  
  What the ENS actually is
&lt;/h2&gt;

&lt;p&gt;An ENS is a structured safety and security data message, not a customs declaration. Since 31 December 2025 it terminates in ICS2, replacing the older ICS endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filing chain
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Trader provides consignment data.&lt;/li&gt;
&lt;li&gt;Carrier holds legal responsibility for submission.&lt;/li&gt;
&lt;li&gt;Forwarder or intermediary often submits on the carrier's behalf.&lt;/li&gt;
&lt;li&gt;ICS2 acknowledges and issues a Movement Reference.&lt;/li&gt;
&lt;li&gt;Vehicle uses the Movement Reference at port check-in.
The full data flow is documented in the &lt;a href="https://www.icustoms.ai/blogs/tss-ens-northern-ireland/" rel="noopener noreferrer"&gt;ENS filing for NI movements&lt;/a&gt; reference.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Required data fields
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Consignor and consignee identifiers&lt;/li&gt;
&lt;li&gt;Plain-language goods description&lt;/li&gt;
&lt;li&gt;Transport mode, vehicle, carrier ID&lt;/li&gt;
&lt;li&gt;Routing details&lt;/li&gt;
&lt;li&gt;Security-relevant consignment data&lt;/li&gt;
&lt;li&gt;XI-prefixed EORI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Common technical failures
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GB EORI on a Northern Ireland ENS&lt;/li&gt;
&lt;li&gt;Missing routing data on multimodal legs&lt;/li&gt;
&lt;li&gt;Generic descriptions rejected by validation&lt;/li&gt;
&lt;li&gt;Corrections applied only to downstream customs data, not the source ENS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Downstream integration
&lt;/h3&gt;

&lt;p&gt;Under the simplified customs route, supplementary declarations auto-generate from ENS data. That coupling means a bad ENS produces a bad supplementary. Validate upstream.&lt;/p&gt;

&lt;p&gt;Wire ENS submissions into your ops stack — &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technicalguide</category>
      <category>customs</category>
      <category>api</category>
      <category>trade</category>
    </item>
    <item>
      <title>A Developer's Guide to TSS Declaration Data Structure</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Fri, 04 Sep 2026 06:58:59 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/a-developers-guide-to-tss-declaration-data-structure-2pgi</link>
      <guid>https://dev.to/kristi-hampson/a-developers-guide-to-tss-declaration-data-structure-2pgi</guid>
      <description>&lt;h2&gt;
  
  
  Why This Matters for Engineers
&lt;/h2&gt;

&lt;p&gt;If you are building anything that touches TSS submissions, you are modelling five data groups: parties, goods, customs treatment, transport, and safety &amp;amp; security. Get the schema right up front and the rest of the pipeline is straightforward.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Model
&lt;/h2&gt;

&lt;p&gt;Parties: EORI, importer, exporter, declarant, intermediary. Goods: commodity code, description, quantity, gross and net mass, value, currency, origin, packaging. Customs treatment: procedure, customs value, duty position, preference, reliefs, authorisations, scheme status. Transport: mode, carrier, vehicle, route, port, arrival/departure. Safety &amp;amp; security: consignor, consignee, description, routing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consignment vs Item Level
&lt;/h2&gt;

&lt;p&gt;Consignment-level fields describe the shipment. Item-level fields repeat per goods line. A 15-product shipment carries 15 item objects. Model this as a one-to-many, not a flattened row.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validation Rules Worth Encoding
&lt;/h2&gt;

&lt;p&gt;Gross mass &amp;gt; net mass. Sum of item values equals invoice total. Currency matches invoice. Commodity code exists and is current. Digit count matches goods category. Origin is a country, not "country of despatch".&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.icustoms.ai/blogs/prepare-customs-data-for-tss/" rel="noopener noreferrer"&gt;prepare customs data for TSS&lt;/a&gt; walkthrough sets out each rule in the same shape you would encode it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship the Schema First
&lt;/h2&gt;

&lt;p&gt;Constraints belong in the model, not in the UI. Enforce them at ingestion and you push rejections back to source.&lt;/p&gt;

&lt;p&gt;See how validated customs data is produced upstream of the portal. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tss</category>
      <category>api</category>
      <category>customsdata</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>TSS Declaration Field Validation: A Technical Reference for Ten Common Errors</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:52:41 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-declaration-field-validation-a-technical-reference-for-ten-common-errors-hmi</link>
      <guid>https://dev.to/kristi-hampson/tss-declaration-field-validation-a-technical-reference-for-ten-common-errors-hmi</guid>
      <description>&lt;p&gt;TSS declarations are a structured data problem. Each rejection has a specific field, a specific rule, and a specific validation that would have caught it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Field-Level Failure Points
&lt;/h2&gt;

&lt;p&gt;Vague goods descriptions fail free-text validation. Entry summary declarations run a stop-word list rejecting values like "goods" and "gifts." Commodity codes at eight or ten digits require an annual freshness check against the current tariff. Document codes at DE 2/3 must be present, unique per record, correctly paired with reference details and status codes, and consistent with the Tariff Requirements for the commodity.&lt;/p&gt;

&lt;p&gt;Weight fields — gross mass, net mass, package count, supplementary unit — must reconcile against each other and against the invoice, packing list, and transport document. Currency and value fields require the customs value calculation, not the invoice total. EORI fields need format and check-digit validation to catch transpositions. The &lt;a href="https://www.icustoms.ai/blogs/tss-data-entry-errors/" rel="noopener noreferrer"&gt;TSS data entry errors reference&lt;/a&gt; enumerates each field with examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Validation Can and Cannot Do
&lt;/h2&gt;

&lt;p&gt;Automated validation handles the mechanical layer: presence, format, cross-reference, arithmetic, and freshness. It cannot evaluate whether a description is honest, whether a preference claim is substantiated, or whether goods risk classification is correct. The split between mechanical and judgment work drives where automation adds value.&lt;/p&gt;

&lt;p&gt;See the validation stack running against live TSS submissions. &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; of iCustoms.&lt;/p&gt;

</description>
      <category>tss</category>
      <category>errors</category>
      <category>declaration</category>
      <category>ai</category>
    </item>
    <item>
      <title>Understanding the Structure of an Automated TSS Declaration Workflow</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Wed, 02 Sep 2026 08:35:56 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/understanding-the-structure-of-an-automated-tss-declaration-workflow-3ggp</link>
      <guid>https://dev.to/kristi-hampson/understanding-the-structure-of-an-automated-tss-declaration-workflow-3ggp</guid>
      <description>&lt;h2&gt;
  
  
  The Six Building Blocks
&lt;/h2&gt;

&lt;p&gt;An automated TSS declaration workflow can be broken into six defined stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion.&lt;/strong&gt; Trade documents and system feeds are collected: invoices, packing lists, transport paperwork, ERP records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extraction.&lt;/strong&gt; Fields are read from documents: parties, goods lines, quantities, weights, values, origin, references.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation.&lt;/strong&gt; The record is checked for completeness, cross-document consistency, format and rule compliance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enrichment.&lt;/strong&gt; Fields the source documents do not carry (commodity codes, authorisations, internal identifiers) are added from approved sources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submission.&lt;/strong&gt; The validated record is sent to TSS through an API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status handling.&lt;/strong&gt; Accepted responses are logged. Rejections are routed with context for a person to resolve.
### Where the Structure Matters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each stage is designed so a failure at that point can be inspected, corrected and re-run without breaking the ones before it. That is what makes the pipeline maintainable. For a step-by-step walkthrough, see &lt;a href="https://www.icustoms.ai/blogs/how-to-automate-tss-declarations/" rel="noopener noreferrer"&gt;How Customs Declaration Automation Works&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Boundary Between Software and Human
&lt;/h3&gt;

&lt;p&gt;Software handles the mechanical stages. People handle the interpretive ones: new product classification, risk judgement and final accountability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Principles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Validate early; do not submit uncertain data.&lt;/li&gt;
&lt;li&gt;Enrich from reference sources, not from guesses.&lt;/li&gt;
&lt;li&gt;Treat rejections as first-class events, not error logs.&lt;/li&gt;
&lt;li&gt;Keep exception ownership explicit.
See how the structure plays out inside a working system and &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; of iCustoms.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>customs</category>
      <category>apiintegration</category>
      <category>api</category>
      <category>tss</category>
    </item>
    <item>
      <title>TSS API: A Developer's Introduction to Customs Declarations</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Tue, 01 Sep 2026 07:06:43 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-api-a-developers-introduction-to-customs-declarations-7ec</link>
      <guid>https://dev.to/kristi-hampson/tss-api-a-developers-introduction-to-customs-declarations-7ec</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;The Trader Support Service (TSS) API is a submission channel for customs declarations moving goods into Northern Ireland. Your system builds a payload, sends it to TSS, and gets back a JSON response — accepted, or an error list.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaration types you can submit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Entry Summary Declarations&lt;/li&gt;
&lt;li&gt;Simplified Frontier Declarations&lt;/li&gt;
&lt;li&gt;Supplementary Declarations&lt;/li&gt;
&lt;li&gt;Full Frontier Declarations&lt;/li&gt;
&lt;li&gt;Port movement references (authorisation-dependent)
Payloads can be built progressively, so partial state is normal. The &lt;a href="https://www.icustoms.ai/blogs/tss-api-integration-guide/" rel="noopener noreferrer"&gt;TSS API technical guide&lt;/a&gt; explains how this maps to real workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Request and response shape
&lt;/h3&gt;

&lt;p&gt;Requests carry declaration data. Responses are JSON with either an acceptance confirmation or an errors array. Design your client to treat both as first-class outcomes.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you still have to build
&lt;/h3&gt;

&lt;p&gt;The API does not extract invoice data, validate commodity codes, confirm weights or resolve missing documents. That is your upstream problem.&lt;/p&gt;

&lt;p&gt;See a working TSS integration from data ingest to submission — &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>tss</category>
      <category>declarations</category>
    </item>
    <item>
      <title>TSS Declaration Types: A Technical Breakdown for Trade Systems</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Mon, 31 Aug 2026 07:22:18 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-declaration-types-a-technical-breakdown-for-trade-systems-1b</link>
      <guid>https://dev.to/kristi-hampson/tss-declaration-types-a-technical-breakdown-for-trade-systems-1b</guid>
      <description>&lt;h2&gt;
  
  
  Why "TSS" is not one API
&lt;/h2&gt;

&lt;p&gt;If you are building or integrating a customs stack for Northern Ireland trade, "TSS" is not one endpoint. It is five declaration types, each with its own payload, owner and lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Declaration inventory
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ESD&lt;/strong&gt;: safety and security data, carrier-submitted, pre-arrival.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SFD&lt;/strong&gt;: minimal commercial data, trader-submitted, at movement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supplementary&lt;/strong&gt;: full commercial + duty + at-risk data, due 10th of following month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMMI&lt;/strong&gt;: reduced data set, UKIMS-gated, non-Category 1, pre or post movement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full Frontier&lt;/strong&gt;: complete data set, inventory-linked port/airport movements.
The &lt;a href="https://www.icustoms.ai/blogs/tss-declaration-types/" rel="noopener noreferrer"&gt;TSS declaration process breakdown&lt;/a&gt; has the field-level detail worth mapping into your data model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integration takeaways
&lt;/h2&gt;

&lt;p&gt;Model declarations as separate entities, not as states of one form. Model the SFD → supplementary link as a parent-child relationship, not as an update. Guard the supplementary submission against auto-population defaults so commodity codes require explicit sign-off. And expose a UKIMS flag on the trader entity so IMMI eligibility can be computed at movement time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deadlines as scheduler events
&lt;/h2&gt;

&lt;p&gt;Handle the 10th-of-month deadline as a hard scheduler event with escalation, not as a soft reminder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want a ready-built engine for all five declarations?&lt;/strong&gt; &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; of iCustoms.&lt;/p&gt;

</description>
      <category>tss</category>
      <category>ai</category>
      <category>declaration</category>
      <category>technicalbreakdown</category>
    </item>
    <item>
      <title>The TSS Data Model for GB to NI Movements</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Fri, 28 Aug 2026 07:03:51 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/the-tss-data-model-for-gb-to-ni-movements-3add</link>
      <guid>https://dev.to/kristi-hampson/the-tss-data-model-for-gb-to-ni-movements-3add</guid>
      <description>&lt;p&gt;The Trader Support Service isn't a monolith. It's a sequence of data submissions with strict ordering: safety and security data, customs information, then movement reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core entities
&lt;/h2&gt;

&lt;p&gt;Every GB to NI move needs a trader EORI, party data for the consignor and consignee, a goods table with commodity codes (6 digits standard, 8 for Category 2), an at-risk flag, and a UKIMS authorisation reference where claimed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ordering constraints
&lt;/h2&gt;

&lt;p&gt;The movement reference cannot exist before the customs entry. Build the pipeline to enforce this — do not rely on humans catching it.&lt;/p&gt;

&lt;p&gt;The full sequence and the field-level dependencies sit in this &lt;a href="https://www.icustoms.ai/blogs/tss-gb-to-ni-guide/" rel="noopener noreferrer"&gt;engineer-friendly guide to TSS for GB to NI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where integrations usually break
&lt;/h2&gt;

&lt;p&gt;Vehicle details typed twice. Container numbers absent. Trailer swaps not reflected downstream. Every one is a data-sync problem, not a customs problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design recommendation
&lt;/h2&gt;

&lt;p&gt;Model the eight TSS stages as a state machine. Each transition validates the payload before the next call. Reject early, log verbosely, and surface the specific failing field.&lt;/p&gt;

&lt;p&gt;To see how iCustoms exposes this data model through an API-first customs platform, &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;watch a demo&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tss</category>
      <category>customs</category>
      <category>api</category>
      <category>integration</category>
    </item>
    <item>
      <title>TSS, ICS2, GVMS and NCTS: A Technical Overview</title>
      <dc:creator>Kristi Hampson</dc:creator>
      <pubDate>Thu, 27 Aug 2026 08:30:55 +0000</pubDate>
      <link>https://dev.to/kristi-hampson/tss-ics2-gvms-and-ncts-a-technical-overview-5b5e</link>
      <guid>https://dev.to/kristi-hampson/tss-ics2-gvms-and-ncts-a-technical-overview-5b5e</guid>
      <description>&lt;p&gt;TSS, CDS, ICS2, GVMS and NCTS are best understood as a small distributed system with a shared input layer and four specialised backends.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline
&lt;/h2&gt;

&lt;p&gt;The trader submits movement information once. TSS validates and enriches it, then routes structured messages to the correct downstream system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CDS receives the customs declaration payload.&lt;/li&gt;
&lt;li&gt;ICS2 receives the safety and security payload.&lt;/li&gt;
&lt;li&gt;GVMS receives declaration references bundled into a Goods Movement Reference.&lt;/li&gt;
&lt;li&gt;NCTS receives the transit declaration when the movement runs under the Common Transit Convention.
## Shared identifiers
All four backends describe the same consignment. They share EORI numbers, commodity codes and transport identifiers. That shared vocabulary is what lets TSS route once and reconcile later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where the pipeline breaks
&lt;/h2&gt;

&lt;p&gt;Historical development created inconsistencies in formatting expectations. A commodity code entered one way in CDS may be accepted differently by another system, and a vehicle registration mismatch will fail GVMS check-in. Most production incidents are data quality issues at the entry point. The &lt;a href="https://www.icustoms.ai/blogs/tss-ics2-gvms-ncts/" rel="noopener noreferrer"&gt;TSS routing to HMRC systems&lt;/a&gt; walkthrough covers the flow in more detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical takeaway
&lt;/h2&gt;

&lt;p&gt;Treat the entry layer as the schema-of-record. Normalise once, validate at the boundary, and rely on TSS to route.&lt;/p&gt;

&lt;p&gt;Want to see this pipeline running end to end? &lt;a href="https://www.icustoms.ai/book-a-demo/" rel="noopener noreferrer"&gt;Watch a demo&lt;/a&gt; to see iCustoms.ai orchestrate the flow.&lt;/p&gt;

</description>
      <category>tss</category>
      <category>ics2</category>
      <category>gvms</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
