Download OpenAPI specification:
RESTful API for supplier integration with the iTrade Steel platform. Supports product catalogue browsing, pricing updates, order document uploads, manufacturing status reporting, and shipping detail management. All request and response bodies use JSON, except document uploads which use multipart form data. Endpoints are scoped to the authenticated supplier — you can only access your own resources. Successful responses return the affected resource; errors return a consistent structure with a machine-readable code, human-readable message, and optional field-level details.
Authenticate all requests by including your API key in the X-Api-Key HTTP header. API keys are provisioned by iTrade Steel on request — contact your account manager to obtain one. The key identifies your organisation and scopes all requests to your resources. No other authentication mechanism (OAuth, sessions, tokens) is required. Treat your API key as a secret: store it in a secrets manager, never expose it in client-side code or version control, and contact iTrade Steel immediately if it is compromised.
Browse and search the product catalogue available to your organisation. Each product represents a unique combination of material, profile, grade, coating class, BMT, and width. Use these endpoints to retrieve product IDs required for pricing updates and other product-scoped operations. Results can be filtered by profile, material, grade, or coating class.
Returns a paginated list of products available to your organisation. Each product includes its specifications (material, profile, grade, coating class, BMT, width) and a unique ID for use in other API calls. Filter by profile, material, grade, or coating class via query parameters. Pagination metadata is included in the response.
| profile | string Example: profile=coil Filter by profile name. |
| material | string Example: material=colorbond Filter by material name. |
| grade | string Example: grade=G550 Filter by steel grade (e.g. G550, G300). |
| coating_class | string Example: coating_class=AZ150 Filter by coating classification (e.g. AZ150, Z275). |
| page | integer >= 1 Default: 1 Page number for pagination. Defaults to 1. |
| per_page | integer [ 1 .. 100 ] Default: 25 Number of results per page. Defaults to 25, maximum 100. |
{- "data": [
- {
- "id": 42,
- "profile": "coil",
- "material": "colorbond",
- "grade": "G550",
- "coating_class": "AZ150",
- "bmt": 0.42,
- "width": 1219,
- "standard": "AS1397",
- "specification": null,
- "hs_code": "7210.70"
}
], - "meta": {
- "current_page": 1,
- "per_page": 25,
- "total_pages": 4,
- "total_count": 87
}
}Update mill direct pricing for your products. Each pricing record is scoped to a product and can include price-affecting attributes (paint technology, paint type, single/double-sided) and an optional colour identifier. An optional expiry date (valid_to) can be set to automatically invalidate pricing after a given time. Each update fully replaces previous pricing for the specified product and attribute combination.
Updates pricing for a specific product. Requires unit_base_price; optionally accepts valid_to (expiry), colour_id, and price_affecting_attributes (paint technology, paint type, single/double-sided). Each update fully replaces previous pricing for the given product and attribute combination. Expired pricing (past valid_to) is excluded from new customer quotes.
| product_id required | integer >= 1 Unique product identifier. Obtain via the list products endpoint. |
| unit_base_price required | number Base unit price in the supplier's agreed currency, before attribute adjustments. |
| valid_to | string or null <date-time> Pricing expiry timestamp. After this time, pricing is excluded from new quotes. Null or omitted means no expiry. |
| colour_id | integer or null Colour identifier to scope pricing to a specific colour. Null for colour-agnostic pricing. |
object (PriceAffectingAttributes) |
{- "unit_base_price": 980.5,
- "valid_to": "2026-01-31T23:59:59Z",
- "price_affecting_attributes": {
- "paint_technology": "sadp",
- "paint_type": "standard",
- "paint_sided": "single_sided"
}
}{- "id": 310,
- "product_id": 42,
- "unit_base_price": 980.5,
- "valid_to": "2026-01-31T23:59:59Z",
- "colour_id": 12,
- "price_affecting_attributes": {
- "paint_technology": "sadp",
- "paint_type": "standard",
- "paint_sided": "single_sided"
}, - "updated_at": "2026-01-04T01:23:45Z"
}Upload shipping and trade documents against orders. Supported document types include bill of lading, weight list, packing list, commercial invoice, mill test certificate, fumigation certificate, certificate of origin, packing declaration, container list, insurance policy, beneficiary certificate, and a general "other" category. Files are uploaded via multipart form data and assigned a trackable status upon creation.
Uploads a document and attaches it to the specified order. Send the file as binary data via multipart form encoding with a required document_type field. Optionally include original_filename to preserve the source filename. The document is assigned a status of uploaded on creation. The response returns the full document record including its ID and timestamps.
| order_id required | integer >= 1 Unique order identifier, as shown in the iTrade Steel platform. |
| document_type required | string (DocumentType) Enum: "bill_of_lading" "weight_list" "packing_list" "commercial_invoice" "mill_test_certificate" "fumigation_certificate" "certificate_of_origin" "packing_declaration" "container_list" "insurance_policy" "beneficiary_certificate" "other" |
| file required | string <binary> Binary file content (typically PDF), sent as multipart form data. |
| original_filename | string or null Original filename from the supplier's system, for reference alongside the system-generated name. |
{ "document_type": "bill_of_lading", "file": "binary-data", "original_filename": "BL_1234.pdf" }
{- "id": 981,
- "order_id": 5521,
- "document_type": "bill_of_lading",
- "filename": "BL_1234.pdf",
- "original_filename": "BL_1234.pdf",
- "status": "uploaded",
- "created_at": "2026-01-04T01:23:45Z",
- "updated_at": "2026-01-04T01:24:10Z"
}Report production progress by updating planned and actual timestamps for each manufacturing step on an order. Steps follow a defined sequence: Raw Material, Processing, Packaging, and Loading Ship. Setting actual_at marks a step as complete. Timestamps can be updated as often as needed to reflect schedule changes.
Updates planned_at and/or actual_at timestamps for a manufacturing step on an order. Identify the step via step_title (Raw Material, Processing, Packaging, or Loading Ship). Setting actual_at marks the step as complete. Both timestamps can be updated repeatedly to reflect schedule changes or corrections.
| order_id required | integer >= 1 Unique order identifier, as shown in the iTrade Steel platform. |
| step_title required | string (ManufacturingStepTitle) Enum: "Raw Material" "Processing" "Packaging" "Loading Ship" |
| planned_at | string or null <date-time> Planned completion timestamp for this step. Updatable as schedules change. |
| actual_at | string or null <date-time> Actual completion timestamp. Setting this marks the step as complete. |
{- "step_title": "Processing",
- "planned_at": "2026-01-12T00:00:00Z",
- "actual_at": "2026-01-10T00:00:00Z"
}{- "id": 145,
- "order_id": 5521,
- "title": "Processing",
- "planned_at": "2026-01-12T00:00:00Z",
- "actual_at": "2026-01-10T00:00:00Z"
}Set and update logistics details for orders: vessel name, bill of lading/booking number, and estimated time of departure (ETD). All fields are optional per request, allowing incremental updates as information becomes available. Each call replaces only the fields provided; unspecified fields remain unchanged.
Updates shipping details for an order: vessel_name, bill_of_lading_number, and etd. All fields are optional per request — only provided fields are updated; omitted fields remain unchanged. The response returns the complete current shipping record for the order.
| order_id required | integer >= 1 Unique order identifier, as shown in the iTrade Steel platform. |
| vessel_name | string or null Name of the vessel carrying the shipment. |
| bill_of_lading_number | string or null Bill of lading or booking reference number from the shipping line. |
| etd | string or null <date-time> Estimated time of departure from the port of loading. |
{- "vessel_name": "Pacific Trader",
- "bill_of_lading_number": "BL-2026-00123",
- "etd": "2026-02-03T00:00:00Z"
}{- "order_id": 5521,
- "vessel_name": "Pacific Trader",
- "bill_of_lading_number": "BL-2026-00123",
- "etd": "2026-02-03T00:00:00Z",
- "updated_at": "2026-02-01T01:23:45Z"
}Manage your Rolling Stock inventory — AM150 coils held at the mill, packed and ready to ship, that customers can buy for immediate dispatch. Each record represents one physical coil, identified by your coil number and linked to a product from the catalogue (which carries the specifications: BMT, width, grade, coating class) and, for pre-painted products, a colour. Coils can only be recorded against product and colour combinations nominated for your organisation by iTrade Steel — contact your account manager to adjust your nominations. Each coil carries a status of available, reserved, or sold; reservation and sale transitions are driven by the iTrade Steel platform as customers order, so status is read-only through this API. The inventory level advertised to customers for a specification is the sum of the net tonnage of your available coils.
Returns a paginated list of your rolling stock coils, newest first. Each coil includes its product specifications, colour, weights, and current status. Filter by status, product, colour, or coil number via query parameters. Pagination metadata is included in the response.
| status | string Enum: "available" "reserved" "sold" Example: status=available Filter by coil status. |
| product_id | integer >= 1 Example: product_id=42 Filter by product identifier. |
| colour_id | integer >= 1 Example: colour_id=12 Filter by colour identifier. |
| coil_number | string Example: coil_number=RS-2026-0042 Filter by your coil number. Matching is case-insensitive. |
| page | integer >= 1 Default: 1 Page number for pagination. Defaults to 1. |
| per_page | integer [ 1 .. 100 ] Default: 25 Number of results per page. Defaults to 25, maximum 100. |
{- "data": [
- {
- "id": 774,
- "coil_number": "RS-2026-0042",
- "product_id": 42,
- "product": {
- "id": 42,
- "profile": "coil",
- "material": "colorbond",
- "grade": "G550",
- "coating_class": "AZ150",
- "bmt": 0.42,
- "width": 1219,
- "standard": "AS1397",
- "specification": null,
- "hs_code": "7210.70"
}, - "colour_id": 12,
- "net_weight_t": 8.245,
- "gross_weight_t": 8.31,
- "status": "available",
- "created_at": "2026-01-04T01:23:45Z",
- "updated_at": "2026-01-04T01:24:10Z"
}
], - "meta": {
- "current_page": 1,
- "per_page": 25,
- "total_pages": 4,
- "total_count": 87
}
}Records a new physical coil in your rolling stock inventory. Requires your coil_number (unique within your inventory, case-insensitive), a product_id from the catalogue, net_weight_t, and gross_weight_t; colour_id is required for pre-painted products and must be omitted or null for bare products. New coils are created with a status of available and immediately count towards the inventory advertised to customers. Returns 422 when the coil number is already in use, the gross weight is below the net weight, your organisation is not nominated for the Rolling Stock program, the product or colour combination is not nominated for your organisation, or the colour is missing on a pre-painted product.
| coil_number required | string Your coil number. Must be unique within your inventory; matching is case-insensitive. |
| product_id required | integer Product ID from the catalogue. The product and colour combination must be nominated for your organisation. |
| colour_id | integer or null Colour identifier. Required for pre-painted products; omit or set null for bare products. |
| net_weight_t required | number > 0 Net coil weight in tonnes. |
| gross_weight_t required | number > 0 Gross coil weight in tonnes, including packaging. Must be greater than or equal to the net weight. |
{- "coil_number": "RS-2026-0042",
- "product_id": 42,
- "colour_id": 12,
- "net_weight_t": 8.245,
- "gross_weight_t": 8.31
}{- "id": 774,
- "coil_number": "RS-2026-0042",
- "product_id": 42,
- "product": {
- "id": 42,
- "profile": "coil",
- "material": "colorbond",
- "grade": "G550",
- "coating_class": "AZ150",
- "bmt": 0.42,
- "width": 1219,
- "standard": "AS1397",
- "specification": null,
- "hs_code": "7210.70"
}, - "colour_id": 12,
- "net_weight_t": 8.245,
- "gross_weight_t": 8.31,
- "status": "available",
- "created_at": "2026-01-04T01:23:45Z",
- "updated_at": "2026-01-04T01:24:10Z"
}Returns a single rolling stock coil from your inventory, including its product specifications, colour, weights, status, and timestamps.
| coil_id required | integer >= 1 Unique rolling stock coil identifier. Obtain via the list rolling stock coils endpoint. |
{- "id": 774,
- "coil_number": "RS-2026-0042",
- "product_id": 42,
- "product": {
- "id": 42,
- "profile": "coil",
- "material": "colorbond",
- "grade": "G550",
- "coating_class": "AZ150",
- "bmt": 0.42,
- "width": 1219,
- "standard": "AS1397",
- "specification": null,
- "hs_code": "7210.70"
}, - "colour_id": 12,
- "net_weight_t": 8.245,
- "gross_weight_t": 8.31,
- "status": "available",
- "created_at": "2026-01-04T01:23:45Z",
- "updated_at": "2026-01-04T01:24:10Z"
}Partially updates a coil in your inventory. Accepts the same fields as creation — only provided fields are updated; omitted fields remain unchanged. Status cannot be set through this API: reservation and sale transitions happen on the iTrade Steel platform. Returns 422 when the coil has been sold (sold coils are immutable), or when the update would break a creation rule (duplicate coil number, gross weight below net weight, organisation not nominated for the Rolling Stock program, non-nominated product or colour combination, missing colour on a pre-painted product).
| coil_id required | integer >= 1 Unique rolling stock coil identifier. Obtain via the list rolling stock coils endpoint. |
| coil_number | string or null Replacement coil number. Must remain unique within your inventory (case-insensitive). |
| product_id | integer or null Replacement product ID. The product and colour combination must be nominated for your organisation. |
| colour_id | integer or null Replacement colour identifier. Required for pre-painted products; null for bare products. |
| net_weight_t | number or null > 0 Corrected net coil weight in tonnes. |
| gross_weight_t | number or null > 0 Corrected gross coil weight in tonnes. Must remain greater than or equal to the net weight. |
{- "net_weight_t": 8.13,
- "gross_weight_t": 8.2
}{- "id": 774,
- "coil_number": "RS-2026-0042",
- "product_id": 42,
- "product": {
- "id": 42,
- "profile": "coil",
- "material": "colorbond",
- "grade": "G550",
- "coating_class": "AZ150",
- "bmt": 0.42,
- "width": 1219,
- "standard": "AS1397",
- "specification": null,
- "hs_code": "7210.70"
}, - "colour_id": 12,
- "net_weight_t": 8.245,
- "gross_weight_t": 8.31,
- "status": "available",
- "created_at": "2026-01-04T01:23:45Z",
- "updated_at": "2026-01-04T01:24:10Z"
}Removes a coil from your inventory — for example when it is damaged, reworked, or otherwise no longer held for the program. Returns 204 with no body on success. Returns 422 when the coil has been sold; sold coils form part of the customer's order record and cannot be removed.
| coil_id required | integer >= 1 Unique rolling stock coil identifier. Obtain via the list rolling stock coils endpoint. |
{- "code": "invalid_request",
- "message": "The request could not be processed.",
- "details": { }
}