ISF module page - how it works, an interactive test form, and the
endpoint reference, all in one place. Set your tenant API Key in the Setup
block below; every request sends the ApiKey header. See
All Forms for the combined surface or Home for the module index.
How it works
Importer Security Filing (10+2) end to end.
ISF (Importer Security Filing “10+2”)
The ISF module mirrors the legacy ASCI screens IPISF1-IPISF6: an entry
header (IPISF1), commercial entities / parties (IPISF5), tariff lines (IPISF6), bills of lading (IPISF2),
containers (IPISF4) and additional references (IPISF3). The form below is a six-step wizard; each multi-row
section is a repeater - use + Add to add rows.
Submit posts the assembled { document: { header, parties, tariff, bills_of_lading, containers,
additional_references } } DTO to POST /api/Isf/Submit. reference_no defaults
to NEW - the real reference is auto-assigned by ASCI at insert time; the response carries the
submission_id. Customer / manufacturer / product / HTS fields look up your master data live (the HTS
lookup needs an hts.read-scoped key). Poll the returned id with the inline status button.
API-first flow (2026-07): before sending anything, Validate dry-runs the
payload against the same pre-send rules the ASCI “Send to ABI Message List (ISF 10+2)” report
applies - errors are listed with the original wording and the offending inputs are highlighted.
Submit files directly; Stage as Draft (submit_mode="draft")
holds the filing in the API until you Transmit Draft (into the ASCI queue) or
Transmit to CBP (the API builds the ISF CATAIR and files it with CBP directly -
needs a cbp.submit-scoped key and the tenant’s “CBP via API” flag).
Check Status shows the processing status and the CBP outcome side by side.
Setup
API key + base URL used by every request below.
Credentials
Leave Base URL blank to call this same server with relative paths (the
normal case). Set it (e.g. https://asci-api.asciofmiami.com) to point the forms
at another host. Every request below sends the ApiKey header.
Sent on every create / submit POST. Click Generate for a fresh one, or a new one is auto-generated per submit if blank.
Test form
Interactive form - POSTs to the API and shows the JSON response + HTTP status.
Maps to POST /api/Isf/Submit. Full Importer Security Filing ("10+2")
data-entry wizard mirroring the legacy ASCI ISF screens IPISF1-IPISF6:
the header (IPISF1) plus commercial entities / parties (IPISF5), tariff lines (IPISF6), bills of
lading (IPISF2), containers (IPISF4) and additional references (IPISF3). Each multi-row section is
a repeater - use + Add to add rows. reference_no defaults to
NEW - the real reference is auto-assigned by legacy at insert
time. The customer / carrier / manufacturer / product fields look up your master data live.
Step 1 - Entry Header (IPISF1). Who is filing, the Importer-of-Record identity, the transport mode + carrier, and the key dates. ISF is ocean only.
Step 2 - Commercial Entities / Parties (IPISF5). The "10" in 10+2. Each
row is one party with its type, name and address. Use the Customer lookup to
auto-pick an existing customer/entity code. ISF-10 requires these party types:
MF (manufacturer), SE (seller), BY (buyer),
ST (ship-to), LG (stuffing location), CS (consolidator),
CN (consignee) and IM (importer of record). ISF-5 instead requires
ST + BKP (booking party) - the party-type dropdown follows the
Submission Type picked in Step 1.
Step 3 - Harmonized Tariff Lines (IPISF6). The HTSUS tariff number(s) for
the goods, one row per line. A harmonized record is mandatory for each Manufacturer
(MF) party. Use the Manufacturer and Product
lookups to populate the MID / product code; the product lookup is scoped to the manufacturer in
the same row.
Step 4 - Bills of Lading (IPISF2). The B/L number is the carrier
SCAC concatenated with the bill number, letters and digits only (no spaces or
punctuation). OB = regular (ocean) bill - single shipment;
BN = house bill - consolidation. For a consolidation, list the house B/Ls here and
put the MASTER B/L in Additional References (Step 5), not here.
Step 5 - Containers (IPISF4) & Additional References (IPISF3).
Containers apply only to containerized ocean (mode 11); a container number follows
ISO 6346 (4-letter owner prefix + 6-digit serial + 1 check digit). Additional
references carry entry numbers, master bills, surety / bond references, carnets, etc. Both
sections start empty - use + Add as needed.
BN) is present (carries the
master B/L), or (2) Bond Activity 16 + Bond Type 9
(needs V1 surety + SBN bond number).Bond (optional)
Bond holder / activity / type write to the IPSFH header; the surety code and bond
reference write to IPSFR. 8 = Continuous (bond amount + expiration, reused across entries);
9 = Single Transaction. Bond Activity 16 (ISF bond) requires Bond Type 9 plus a
V1 surety code and an SBN bond number (here or in Additional References).
API object: bond.
Estimated Information (optional)
Estimated value / quantity / weight for the shipment. Writes one IPSFAD (SF13) row. API object: estimated.
Step 6 - Validate, Submit & Track.
Validate dry-runs the payload (nothing is stored) and lists the pre-send
findings with the same wording as the ASCI “Send to ABI Message List (ISF 10+2)”
report - click a finding to jump to the offending input. Submit files
directly (a filing with errors is rejected with 422 isf_validation_failed);
Stage as Draft holds it in the API until you transmit it.
Server-computed - not sent here: sf_trans_no (the CBP
transaction number) is owned by transmission and is computed server-side.
Transmit Draft calls POST /api/Isf/{id}/Transmit (draft → ASCI queue).
Transmit to CBP calls POST /api/Isf/{id}/TransmitCbp (scope
cbp.submit; 403 cbp_not_enabled when the tenant is not CBP-enabled;
422 isf_catair_unsupported when the payload needs an unconfirmed CATAIR feature).
Check Status shows GET /api/Isf/{id}/Status and
GET /api/Isf/{id}/CbpStatus side by side.
Raw request / response (last call)
Request
(no call yet)
Response
(no call yet)
Endpoints
ISF endpoint family (api/Isf). Full request schema below.
ISF endpoints
| Method | Path | Purpose |
|---|---|---|
| POST | /api/Isf/Validate | Dry-run pre-send validation (nothing stored). Always 200 with { valid, errors[], warnings[] }; each entry is { code, field, line_ref, message }. |
| POST | /api/Isf/Submit | Submit an ISF document (body: { document }). Returns submission_id. document.submit_mode="draft" stages it instead of sending. Errors from the pre-send gate come back as 422 isf_validation_failed. |
| POST | /api/Isf/{submissionId}/Transmit | Transmit a staged draft into the ASCI processing queue. |
| POST | /api/Isf/{submissionId}/TransmitCbp | Build the ISF CATAIR from the stored submission and file it with CBP directly (scope cbp.submit, Idempotency-Key required, tenant CBP-via-API flag). |
| GET | /api/Isf | List ISF submissions. |
| GET | /api/Isf/{submissionId} | Fetch one submission. |
| GET | /api/Isf/{submissionId}/Status | Lifecycle status (used by the form's Check Status button). |
| GET | /api/Isf/{submissionId}/CbpStatus | CBP outcome for an ISF filed via TransmitCbp (status, ISF transaction number, reply conditions). |
| GET | /api/Isf/{submissionId}/Detail | Full typed detail. |
Schema
Request body for POST /api/Isf/Submit. Envelope: { "document": { … } }. Header mirrors the legacy IPJSONISF "data" block; the detail arrays map to IPISF2-6. Note: outbound currently emits header + the first bill of lading; bills of lading, containers, additional references, bond and estimated info are written to legacy; parties and tariff (HTS) are accepted but their legacy WRITE is still pending.
document (root)
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
reference_no | string | Yes | 15 | Reference number. Send NEW to auto-generate. |
metadata | object | No | — | Client-supplied key/value bag (string→string, ≤50 entries), echoed on status / webhooks. |
header | object | Yes | - | ISF header (see below). |
bills_of_lading | array | No | - | Bill-of-lading rows (IPISF2). |
containers | array | No | - | Container rows (IPISF4 / IPSFCT). Written. |
parties | array | No | - | Commercial-entity / party rows (IPISF5). WRITE TODO. |
tariff | array | No | - | Tariff (HTS) line rows (IPISF6). WRITE TODO. |
frob | array | No | - | Freight-Remaining-On-Board rows. WRITE TODO. |
additional_references | array | No | - | Additional-reference rows (IPISF3 / IPSFR). Written. |
bond | object | No | - | Bond block - written to the IPSFH header + IPSFR references. Written. |
estimated | object | No | - | Estimated value/qty/weight (IPSFAD). Written. |
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
submission_type | string | No | 1 | 1=ISF-10, 2=ISF-5, 3/4=transitions. |
action_code | string | No | 1 | A=Add, D=Delete, R=Replace. |
abi_status | string | No | 1 | ABI status. |
ior_qualifier | string | Yes | 2 | Importer-of-record ID qualifier; one of EI, SS, CN. |
ior_number | string | Yes | 15 | Importer-of-record number. |
importer_code | string | Yes | 6 | Importer (customer) code. |
filer_code | string | No | 3 | ABI filer code. Enforced only when Validation:RequireFilerCode is on. |
mode_of_transport | string | Yes | - | ABI mode of transport (must be in the accepted MOT list). |
scac_code | string | Yes | 4 | SCAC; exactly 4 uppercase letters. |
sf_trans_no | string | No | 15 | ISF transaction number. |
isf_date | string | No | 7 | ISF date (Julian). |
sailing_date | string | No | 7 | Sailing date (Julian). |
cbp_bill_on_file_date | string | No | 7 | CBP bill-on-file date. |
cbp_bill_on_file_time | string | No | 4 | CBP bill-on-file time. |
customer_ref | string | No | 16 | Customer reference. |
action_reason | string | No | 2 | CT (default), FR, FT or FX. |
shipment_type | string | No* | 2 | Shipment type 01-11 (ASCI table ISFSHTP). *Required by the pre-send validation. |
operator_code | string | No* | 3 | Operator code (ASCI Operator File IRNOP). *Required by the pre-send validation. |
country | string | No | 2 | ISO country; required for Importer Qualifier AEF (Passport). |
date_of_birth | string | No | 10 | YYYYMMDD; required for Importer Qualifier AEF (Passport). |
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
seq_no | string | No | 3 | Sequence number. |
code_qualifier | string | No | 2 | OB=Ocean/Regular (single shipment), BN=House (consolidation; master B/L goes in additional_references). |
bol_ref_no | string | Yes | 50 | Bill-of-lading / shipment reference number (required per row). |
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
seq_no | string | No | 3 | Sequence number. |
container_no | string | No | 15 | Container number. |
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
party_type | string | No | 3 | Buyer / Seller / Manufacturer / Stuffer / Consolidator / Ship-To / etc. |
name | string | No | 35 | Party name. |
address_1 / address_2 | string | No | 35 | Address lines. |
city | string | No | 20 | City. |
state | string | No | 2 | State / province. |
postal_code | string | No | 10 | Postal code. |
country | string | No | 2 | Country (ISO 2-char). |
identifier_qualifier | string | No | 3 | Entity ID qualifier: EI, ANI, CIN, 34, AEF, DUN, DNS, FR. |
identifier | string | No | 20 | Entity identifier value (e.g. the EIN). |
manufacturer_id | string | No | 16 | Manufacturer ID (MID) - MF parties only. |
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
seq_no | string | No | 3 | Sequence number. |
hts_number | string | No | 10 | HTS tariff number. |
description | string | No | 70 | Free-text product line description. |
country_of_origin | string | No* | 2 | ISO country of origin. *Required per line for ISF-5 (Submission Type 2). |
manufacturer_id | string | No | 20 | Optional product-catalog manufacturer link (unlinked line is supported). |
product_code | string | No | 30 | Optional product-catalog product code (unlinked line is supported). |
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
seq_no | string | No | 3 | Sequence number. |
port_of_unlading | string | No | 5 | Port of unlading. |
bol_ref_no | string | No | 50 | Bill-of-lading reference number. |
| Field | Type | Req? | Max | Description |
|---|---|---|---|---|
seq_no | string | No | 3 | Sequence number. |
ref_qualifier | string | No | 2 | Reference qualifier. |
ref_value | string | No | 35 | Reference value. |
| Code | Label |
|---|---|
10 | Vessel, non-container |
11 | Vessel, container |
20 | Rail, non-container |
21 | Rail, container |
30 | Truck, non-container |
31 | Truck, container |
32 | Auto |
33 | Pedestrian |
40 | Air, non-container |
41 | Air, container |
60 | Passenger, hand-carried |
70 | Fixed Transport Installations (pipeline / powerhouse) |
Values accepted by header.mode_of_transport. Labels follow CBP CATAIR Appendix B. ISF is ocean only, so in practice only 10 and 11 apply.