# List products Endpoint: GET /v2/products Version: 2.0.0 Security: api_keys ## Query parameters: - `sku` (string) Filter products by SKU Example: "TEST-SKU-001" - `name` (string) Filter products by name Example: "Test Product" - `active` (boolean) Filter products by active status Example: true - `page_size` (integer) The number of results to return per page Example: 25 - `page` (integer) The page number to return Example: 5 ## Response 200 fields (application/json): - `products` (array) - `products.product_id` (integer) Unique identifier for the product Example: 10736794 - `products.sku` (string) Stock Keeping Unit identifier Example: "K1" - `products.name` (string) Product name Example: "Test Product" - `products.upc` (string,null) Universal Product Code Example: "123-4" - `products.thumbnail_url` (string,null) URL to product thumbnail image Example: "www.image.com" - `products.price` (object) - `products.price.currency` (string) Currency code Example: "usd" - `products.price.amount` (number) Price amount Example: 88 - `products.dimensions` (object) - `products.dimensions.unit` (string) Unit of measurement Example: "inch" - `products.dimensions.length` (number) Length dimension Example: 9 - `products.dimensions.width` (number) Width dimension Example: 5 - `products.dimensions.height` (number) Height dimension Example: 7 - `products.weight` (object) - `products.weight.value` (number) Weight value Example: 99.2 - `products.weight.unit` (string) Weight unit Example: "ounce" - `products.internal_notes` (string,null) Internal notes about the product Example: "Describe your item" - `products.fulfillment_sku` (string,null) Fulfillment SKU Example: "widget-2" - `products.create_date` (string) Date when product was created Example: "2025-07-07T20:10:02.13Z" - `products.modify_date` (string) Date when product was last modified Example: "2025-07-07T20:10:02.13Z" - `products.active` (boolean) Whether the product is active Example: true - `products.product_category` (object,null) - `products.product_category.product_category_id` (integer) Example: 26663 - `products.product_category.name` (string) Example: "Example-category" - `products.preset_group` (string,null) Preset group Example: "Default" - `products.warehouse_location` (string,null) Warehouse location Example: "BIN 43-6" - `products.default_carrier_code` (string,null) Default carrier code Example: "stamps_com" - `products.default_service_code` (string,null) Default service code Example: "usps_first_class_mail" - `products.default_package_code` (string,null) Default package code Example: "large_flat_rate_box" - `products.default_intl_carrier_code` (string,null) Default international carrier code Example: "stamps_com" - `products.default_intl_service_code` (string,null) Default international service code Example: "usps_priority_mail_international" - `products.default_intl_package_code` (string,null) Default international package code Example: "package" - `products.default_confirmation` (string,null) Default confirmation type Example: "none" - `products.default_intl_confirmation` (string,null) Default international confirmation type Example: "delivery" - `products.customs_description` (string,null) Customs description Example: "An object going internationally" - `products.customs_value` (number,null) Customs value Example: 20 - `products.customs_tariff_no` (string,null) Customs tariff number Example: "0245.56.13" - `products.customs_country_code` (string,null) Customs country code Example: "US" - `products.no_customs` (boolean) Whether customs is required - `products.tags` (array,null) - `products.tags.tag_id` (integer) Example: 21121 - `products.tags.color` (string) Example: "#800080" - `products.aliases` (array,null) - `products.aliases.store_id` (integer) Example: 2095811 - `products.aliases.sku_alias` (string) Example: "alt-sku" - `products.product_type` (string,null) Product type Example: "standalone" - `products.is_returnable` (boolean) Whether the product is returnable - `products.should_override_name` (boolean,null) Whether to override the product name Example: true - `products.is_bundle` (boolean,null) Whether the product is a bundle Example: true - `products.bundle_components` (array,null) - `products.bundle_components.bundle_product_id` (integer) Example: 10736791 - `products.bundle_components.component_product_id` (integer) Example: 10408926 - `products.bundle_components.sku` (string) Example: "New-SKU" - `products.bundle_components.quantity` (integer) Example: 3 - `products.bundle_components.active` (boolean) Example: true - `products.auto_split_option` (string) Auto split option Example: "do_not_split" - `products.auto_split_custom_quantity` (integer,null) Auto split custom quantity Example: 3 - `total` (integer) Total number of products Example: 510 - `page` (integer) Current page number Example: 5 - `pages` (integer) Total number of pages Example: 6 - `links` (object) - `links.first` (object) - `links.first.href` (string) URL to the first page Example: "https://api.shipstation.com/v2/products?page=1&page_size=100" - `links.last` (object) - `links.last.href` (string) URL to the last page Example: "https://api.shipstation.com/v2/products?page=6&page_size=100" - `links.prev` (object) - `links.prev.href` (string) URL to the previous page Example: "https://api.shipstation.com/v2/products?page=4&page_size=100" - `links.next` (object) - `links.next.href` (string) URL to the next page Example: "https://api.shipstation.com/v2/products?page=6&page_size=100" ## Response 400 fields (application/json): - `request_id` (string, required) A UUID that uniquely identifies the request id. This can be given to the support team to help debug non-trivial issues that may occur Example: "aa3d8e8e-462b-4476-9618-72db7f7b7009" - `errors` (array, required) The errors associated with the failed API call - `errors.error_source` (string, required) The source of the error, as indicated by the name this informs us if the API call failed because of the carrier, the order source, or the ShipStation API itself. Enum: "carrier", "order_source", "ShipStation" - `errors.error_type` (string, required) The type of error Enum: "account_status", "business_rules", "validation", "security", "system", "integrations" - `errors.error_code` (string, required) The error code specified for the failed API Call Enum: "auto_fund_not_supported", "batch_cannot_be_modified", "carrier_conflict", "carrier_disconnected", "carrier_not_connected", "carrier_not_supported", "confirmation_not_supported", "default_warehouse_cannot_be_deleted", "field_conflict", "field_value_required", "forbidden", "identifier_conflict", "identifiers_must_match", "insufficient_funds", "invalid_address", "invalid_billing_plan", "invalid_field_value", "invalid_identifier", "invalid_status", "invalid_string_length", "label_images_not_supported", "meter_failure", "order_source_not_active", "rate_limit_exceeded", "refresh_not_supported", "request_body_required", "return_label_not_supported", "settings_not_supported", "subscription_inactive", "terms_not_accepted", "tracking_not_supported", "trial_expired", "unauthorized", "unknown", "unspecified", "verification_failure", "warehouse_conflict", "webhook_event_type_conflict", "customs_items_required", "incompatible_paired_labels", "invalid_charge_event", "invalid_object", "no_rates_returned" - `errors.message` (string, required) An error message associated with the failed API call Example: "Body of request cannot be null." - `errors.field_name` (string) The name of the field that caused the error (only present for validation errors) Example: "inventory_warehouse_id" - `errors.field_value` (string) The invalid value that was provided for the field (only present for validation errors) Example: "invalid-id" ## Response 404 fields (application/json): - `request_id` (string, required) A UUID that uniquely identifies the request id. This can be given to the support team to help debug non-trivial issues that may occur Example: "aa3d8e8e-462b-4476-9618-72db7f7b7009" - `errors` (array, required) The errors associated with the failed API call - `errors.error_source` (string, required) The source of the error, as indicated by the name this informs us if the API call failed because of the carrier, the order source, or the ShipStation API itself. Enum: "carrier", "order_source", "ShipStation" - `errors.error_type` (string, required) The type of error Enum: "account_status", "business_rules", "validation", "security", "system", "integrations" - `errors.error_code` (string, required) The error code specified for the failed API Call Enum: "auto_fund_not_supported", "batch_cannot_be_modified", "carrier_conflict", "carrier_disconnected", "carrier_not_connected", "carrier_not_supported", "confirmation_not_supported", "default_warehouse_cannot_be_deleted", "field_conflict", "field_value_required", "forbidden", "identifier_conflict", "identifiers_must_match", "insufficient_funds", "invalid_address", "invalid_billing_plan", "invalid_field_value", "invalid_identifier", "invalid_status", "invalid_string_length", "label_images_not_supported", "meter_failure", "order_source_not_active", "rate_limit_exceeded", "refresh_not_supported", "request_body_required", "return_label_not_supported", "settings_not_supported", "subscription_inactive", "terms_not_accepted", "tracking_not_supported", "trial_expired", "unauthorized", "unknown", "unspecified", "verification_failure", "warehouse_conflict", "webhook_event_type_conflict", "customs_items_required", "incompatible_paired_labels", "invalid_charge_event", "invalid_object", "no_rates_returned" - `errors.message` (string, required) An error message associated with the failed API call Example: "Body of request cannot be null." - `errors.field_name` (string) The name of the field that caused the error (only present for validation errors) Example: "inventory_warehouse_id" - `errors.field_value` (string) The invalid value that was provided for the field (only present for validation errors) Example: "invalid-id"