iTrade Steel Supplier API (1.0.0)

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.

Authentication

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.

Products

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.

List products

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.

Authorizations:
ApiKeyAuth
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Pricing

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.

Update mill direct pricing for a product

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.

Authorizations:
ApiKeyAuth
path Parameters
product_id
required
integer >= 1

Unique product identifier. Obtain via the list products endpoint.

Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "unit_base_price": 980.5,
  • "valid_to": "2026-01-31T23:59:59Z",
  • "price_affecting_attributes": {
    }
}

Response samples

Content type
application/json
{
  • "id": 310,
  • "product_id": 42,
  • "unit_base_price": 980.5,
  • "valid_to": "2026-01-31T23:59:59Z",
  • "colour_id": 12,
  • "price_affecting_attributes": {
    },
  • "updated_at": "2026-01-04T01:23:45Z"
}

Documents

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.

Upload an order document

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.

Authorizations:
ApiKeyAuth
path Parameters
order_id
required
integer >= 1

Unique order identifier, as shown in the iTrade Steel platform.

Request Body schema: multipart/form-data
required
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.

Responses

Request samples

Content type
multipart/form-data
{
  "document_type": "bill_of_lading",
  "file": "binary-data",
  "original_filename": "BL_1234.pdf"
}

Response samples

Content type
application/json
{
  • "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"
}

Manufacturing

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.

Update manufacturing status for an order

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.

Authorizations:
ApiKeyAuth
path Parameters
order_id
required
integer >= 1

Unique order identifier, as shown in the iTrade Steel platform.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "step_title": "Processing",
  • "planned_at": "2026-01-12T00:00:00Z",
  • "actual_at": "2026-01-10T00:00:00Z"
}

Response samples

Content type
application/json
{
  • "id": 145,
  • "order_id": 5521,
  • "title": "Processing",
  • "planned_at": "2026-01-12T00:00:00Z",
  • "actual_at": "2026-01-10T00:00:00Z"
}

Shipping

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.

Set shipping information for an order

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.

Authorizations:
ApiKeyAuth
path Parameters
order_id
required
integer >= 1

Unique order identifier, as shown in the iTrade Steel platform.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "vessel_name": "Pacific Trader",
  • "bill_of_lading_number": "BL-2026-00123",
  • "etd": "2026-02-03T00:00:00Z"
}

Response samples

Content type
application/json
{
  • "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"
}

Rolling Stock

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.

List rolling stock 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.

Authorizations:
ApiKeyAuth
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Create a rolling stock coil

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.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "coil_number": "RS-2026-0042",
  • "product_id": 42,
  • "colour_id": 12,
  • "net_weight_t": 8.245,
  • "gross_weight_t": 8.31
}

Response samples

Content type
application/json
{
  • "id": 774,
  • "coil_number": "RS-2026-0042",
  • "product_id": 42,
  • "product": {
    },
  • "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"
}

View a rolling stock coil

Returns a single rolling stock coil from your inventory, including its product specifications, colour, weights, status, and timestamps.

Authorizations:
ApiKeyAuth
path Parameters
coil_id
required
integer >= 1

Unique rolling stock coil identifier. Obtain via the list rolling stock coils endpoint.

Responses

Response samples

Content type
application/json
{
  • "id": 774,
  • "coil_number": "RS-2026-0042",
  • "product_id": 42,
  • "product": {
    },
  • "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"
}

Update a rolling stock coil

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).

Authorizations:
ApiKeyAuth
path Parameters
coil_id
required
integer >= 1

Unique rolling stock coil identifier. Obtain via the list rolling stock coils endpoint.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "net_weight_t": 8.13,
  • "gross_weight_t": 8.2
}

Response samples

Content type
application/json
{
  • "id": 774,
  • "coil_number": "RS-2026-0042",
  • "product_id": 42,
  • "product": {
    },
  • "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"
}

Remove a rolling stock coil

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.

Authorizations:
ApiKeyAuth
path Parameters
coil_id
required
integer >= 1

Unique rolling stock coil identifier. Obtain via the list rolling stock coils endpoint.

Responses

Response samples

Content type
application/json
{
  • "code": "invalid_request",
  • "message": "The request could not be processed.",
  • "details": { }
}