openapi: 3.1.0 info: title: Greenbrier Aftermarket Parts Store API version: wp/v2 description: 'Public, unauthenticated read access to the Greenbrier aftermarket railcar parts catalog served by the WooCommerce Store API on www.gbrx.com. Verified live on 2026-09-12 at 207 products across 140 product categories — gaskets, outlet gates, hatch covers, valves, pipe assemblies and other replacement components for Greenbrier-built equipment. Products carry SKU, price object, stock availability, dimensions, weight, attribute terms and variation references. This is the read half of the WooCommerce Store API: the cart and checkout routes on the same namespace are session-scoped and are deliberately not documented here.' contact: name: The Greenbrier Companies url: https://www.gbrx.com/contact/ x-derived-from: https://www.gbrx.com/wp-json/ (route-index document, saved verbatim at openapi/_original/greenbrier-cos-wp-json-route-index.json) + live anonymous GET samples x-derived-on: '2026-09-12' x-api-evangelist-note: 'Third-party profile. The Greenbrier Companies publishes no developer program; this documents the anonymously readable WordPress REST surface behind www.gbrx.com. Every path, parameter, type, default and enum below was read from the server''s own published route descriptor on 2026-09-12 — nothing is invented. Only the GET methods are documented: write methods exist on the same routes but require WordPress application-password credentials and are not part of the public surface.' servers: - url: https://www.gbrx.com/wp-json description: Greenbrier WooCommerce Store API tags: - name: Products description: Aftermarket railcar replacement parts. - name: Catalog description: Product categories, tags, brands and attribute vocabularies. paths: /wc/store/v1/products: get: operationId: listStoreProducts summary: List products description: Retrieve a paginated collection of purchasable Greenbrier aftermarket parts, filterable by category, tag, brand, attribute, stock status and price range. tags: - Products parameters: - name: after in: query description: Limit response to resources created after a given ISO8601 compliant date. schema: type: string format: date-time - name: attribute_relation in: query description: The logical relationship between attributes when filtering across multiple at once. schema: type: string enum: - in - and default: and - name: attributes in: query description: Limit result set to products with selected global attributes. schema: type: array items: type: object default: [] - name: before in: query description: Limit response to resources created before a given ISO8601 compliant date. schema: type: string format: date-time - name: brand in: query description: Limit result set to products assigned a set of brand IDs or slugs, separated by commas. schema: type: string - name: brand_operator in: query description: Operator to compare product brand terms. schema: type: string enum: - in - not_in - and default: in - name: catalog_visibility in: query description: Determines if hidden or visible catalog products are shown. schema: type: string enum: - any - visible - catalog - search - hidden - name: category in: query description: Limit result set to products assigned a set of category IDs or slugs, separated by commas. schema: type: string - name: category_operator in: query description: Operator to compare product category terms. schema: type: string enum: - in - not_in - and default: in - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: date_column in: query description: When limiting response using after/before, which date column to compare against. schema: type: string enum: - date - date_gmt - modified - modified_gmt default: date - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer default: [] - name: featured in: query description: Limit result set to featured products. schema: type: boolean - name: include in: query description: Limit result set to specific ids. schema: type: array items: type: integer default: [] - name: max_price in: query description: Limit result set to products based on a maximum price, provided using the smallest unit of the currency. schema: type: string - name: min_price in: query description: Limit result set to products based on a minimum price, provided using the smallest unit of the currency. schema: type: string - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: on_sale in: query description: Limit result set to products on sale. schema: type: boolean - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: desc - name: orderby in: query description: Sort collection by object attribute. schema: type: string enum: - date - modified - id - include - title - slug - price - popularity - rating - menu_order - comment_count default: date - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: parent in: query description: Limit result set to those of particular parent IDs. schema: type: array items: type: integer default: [] - name: parent_exclude in: query description: Limit result set to all items except those of a particular parent ID. schema: type: array items: type: integer default: [] - name: per_page in: query description: Maximum number of items to be returned in result set. schema: type: integer default: 10 minimum: 1 maximum: 100 - name: rating in: query description: Limit result set to products with a certain average rating. schema: type: array items: type: integer enum: - 1 - 2 - 3 - 4 - 5 default: [] - name: related in: query description: Limit result set to products related to a specific product ID. schema: type: integer - name: search in: query description: Limit results to those matching a string. schema: type: string - name: sku in: query description: Limit result set to products with specific SKU(s). Use commas to separate. schema: type: string - name: slug in: query description: Limit result set to products with specific slug(s). Use commas to separate. schema: type: string - name: stock_status in: query description: Limit result set to products with specified stock status. schema: type: array items: type: string enum: - instock - outofstock - onbackorder default: [] - name: tag in: query description: Limit result set to products assigned a set of tag IDs or slugs, separated by commas. schema: type: string - name: tag_operator in: query description: Operator to compare product tags. schema: type: string enum: - in - not_in - and default: in - name: type in: query description: Limit result set to products assigned a specific type. schema: type: string enum: - simple - grouped - external - variable - variation responses: '200': description: A page of product records. content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreProduct' headers: X-WP-Total: description: Total number of matching records. schema: type: integer X-WP-TotalPages: description: Total number of pages at the requested per_page size. schema: type: integer '400': description: Invalid parameter (rest_invalid_param). content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No route or resource matched (rest_no_route / rest_post_invalid_id). content: application/json: schema: $ref: '#/components/schemas/Error' /wc/store/v1/products/{id}: get: operationId: getStoreProduct summary: Get a product description: Retrieve one product by its numeric ID. tags: - Products parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: id in: path description: Unique identifier for the resource. required: true schema: type: integer responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/StoreProduct' '400': description: Invalid parameter (rest_invalid_param). content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No route or resource matched (rest_no_route / rest_post_invalid_id). content: application/json: schema: $ref: '#/components/schemas/Error' /wc/store/v1/products/categories: get: operationId: listStoreProductCategories summary: List product categories description: Retrieve the product category tree used to navigate the parts catalog. tags: - Catalog parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer default: [] - name: hide_empty in: query description: If true, empty terms will not be returned. schema: type: boolean default: true - name: include in: query description: Limit result set to specific ids. schema: type: array items: type: integer default: [] - name: order in: query description: Sort ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort by term property. schema: type: string enum: - name - slug - count default: name - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: parent in: query description: Limit results to terms with a specific parent (hierarchical taxonomies only). schema: type: integer - name: per_page in: query description: Maximum number of items to be returned in result set. Defaults to no limit if left blank. schema: type: integer minimum: 0 - name: search in: query description: Limit results to those matching a string. schema: type: string responses: '200': description: A page of product categories. content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreProductCategory' headers: X-WP-Total: description: Total number of matching records. schema: type: integer X-WP-TotalPages: description: Total number of pages at the requested per_page size. schema: type: integer '400': description: Invalid parameter (rest_invalid_param). content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No route or resource matched (rest_no_route / rest_post_invalid_id). content: application/json: schema: $ref: '#/components/schemas/Error' /wc/store/v1/products/categories/{id}: get: operationId: getStoreProductCategory summary: Get a product category description: Retrieve one product category by ID. tags: - Catalog parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: id in: path description: Unique identifier for the resource. required: true schema: type: integer responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/StoreProductCategory' '400': description: Invalid parameter (rest_invalid_param). content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No route or resource matched (rest_no_route / rest_post_invalid_id). content: application/json: schema: $ref: '#/components/schemas/Error' /wc/store/v1/products/attributes: get: operationId: listStoreProductAttributes summary: List product attributes description: Retrieve the global product attribute vocabularies. Verified live at 33 attributes on 2026-09-12, including dimensions, material, nominal thickness, o-ring, PSI, steam connections, thickness and weight. tags: - Catalog parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - edit responses: '200': description: Successful response. content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreProductAttribute' headers: X-WP-Total: description: Total number of matching records. schema: type: integer X-WP-TotalPages: description: Total number of pages at the requested per_page size. schema: type: integer '400': description: Invalid parameter (rest_invalid_param). content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No route or resource matched (rest_no_route / rest_post_invalid_id). content: application/json: schema: $ref: '#/components/schemas/Error' /wc/store/v1/products/attributes/{attribute_id}/terms: get: operationId: listStoreProductAttributeTerms summary: List attribute terms description: Retrieve the terms defined for one global product attribute. tags: - Catalog parameters: - name: __experimental_visual in: query description: If true, include experimental visual swatch data for wc-visual attribute terms. schema: type: boolean default: false - name: attribute_id in: path description: Unique identifier for the attribute. required: true schema: type: integer - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - edit default: view - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer default: [] - name: hide_empty in: query description: If true, empty terms will not be returned. schema: type: boolean default: true - name: include in: query description: Limit result set to specific ids. schema: type: array items: type: integer default: [] - name: order in: query description: Sort ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort by term property. schema: type: string enum: - name - slug - count - menu_order - name_num - id default: name - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: parent in: query description: Limit results to terms with a specific parent (hierarchical taxonomies only). schema: type: integer - name: per_page in: query description: Maximum number of items to be returned in result set. Defaults to no limit if left blank. schema: type: integer minimum: 0 - name: search in: query description: Limit results to those matching a string. schema: type: string responses: '200': description: Successful response. content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreProductAttribute' headers: X-WP-Total: description: Total number of matching records. schema: type: integer X-WP-TotalPages: description: Total number of pages at the requested per_page size. schema: type: integer '400': description: Invalid parameter (rest_invalid_param). content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No route or resource matched (rest_no_route / rest_post_invalid_id). content: application/json: schema: $ref: '#/components/schemas/Error' /wc/store/v1/products/collection-data: get: operationId: getStoreCollectionData summary: Get collection aggregates description: Retrieve aggregate facet data for a product query — price range, attribute counts, rating counts, stock-status counts and taxonomy counts. This is the data behind the store's filter widgets. tags: - Catalog parameters: - name: after in: query description: Limit response to resources created after a given ISO8601 compliant date. schema: type: string format: date-time - name: attribute_relation in: query description: The logical relationship between attributes when filtering across multiple at once. schema: type: string enum: - in - and default: and - name: attributes in: query description: Limit result set to products with selected global attributes. schema: type: array items: type: object default: [] - name: before in: query description: Limit response to resources created before a given ISO8601 compliant date. schema: type: string format: date-time - name: brand in: query description: Limit result set to products assigned a set of brand IDs or slugs, separated by commas. schema: type: string - name: brand_operator in: query description: Operator to compare product brand terms. schema: type: string enum: - in - not_in - and default: in - name: calculate_attribute_counts in: query description: If requested, calculates attribute term counts for products in the collection. schema: type: array items: type: object default: [] - name: calculate_price_range in: query description: If true, calculates the minimum and maximum product prices for the collection. schema: type: boolean default: false - name: calculate_rating_counts in: query description: If true, calculates rating counts for products in the collection. schema: type: boolean default: false - name: calculate_stock_status_counts in: query description: If true, calculates stock counts for products in the collection. schema: type: boolean default: false - name: calculate_taxonomy_counts in: query description: If requested, calculates taxonomy term counts for products in the collection. schema: type: array items: type: string default: [] - name: catalog_visibility in: query description: Determines if hidden or visible catalog products are shown. schema: type: string enum: - any - visible - catalog - search - hidden - name: category in: query description: Limit result set to products assigned a set of category IDs or slugs, separated by commas. schema: type: string - name: category_operator in: query description: Operator to compare product category terms. schema: type: string enum: - in - not_in - and default: in - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - edit default: view - name: date_column in: query description: When limiting response using after/before, which date column to compare against. schema: type: string enum: - date - date_gmt - modified - modified_gmt default: date - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer default: [] - name: featured in: query description: Limit result set to featured products. schema: type: boolean - name: include in: query description: Limit result set to specific ids. schema: type: array items: type: integer default: [] - name: max_price in: query description: Limit result set to products based on a maximum price, provided using the smallest unit of the currency. schema: type: string - name: min_price in: query description: Limit result set to products based on a minimum price, provided using the smallest unit of the currency. schema: type: string - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: on_sale in: query description: Limit result set to products on sale. schema: type: boolean - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: desc - name: orderby in: query description: Sort collection by object attribute. schema: type: string enum: - date - modified - id - include - title - slug - price - popularity - rating - menu_order - comment_count default: date - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: parent in: query description: Limit result set to those of particular parent IDs. schema: type: array items: type: integer default: [] - name: parent_exclude in: query description: Limit result set to all items except those of a particular parent ID. schema: type: array items: type: integer default: [] - name: per_page in: query description: Maximum number of items to be returned in result set. schema: type: integer default: 10 minimum: 1 maximum: 100 - name: rating in: query description: Limit result set to products with a certain average rating. schema: type: array items: type: integer enum: - 1 - 2 - 3 - 4 - 5 default: [] - name: related in: query description: Limit result set to products related to a specific product ID. schema: type: integer - name: search in: query description: Limit results to those matching a string. schema: type: string - name: sku in: query description: Limit result set to products with specific SKU(s). Use commas to separate. schema: type: string - name: slug in: query description: Limit result set to products with specific slug(s). Use commas to separate. schema: type: string - name: stock_status in: query description: Limit result set to products with specified stock status. schema: type: array items: type: string enum: - instock - outofstock - onbackorder default: [] - name: tag in: query description: Limit result set to products assigned a set of tag IDs or slugs, separated by commas. schema: type: string - name: tag_operator in: query description: Operator to compare product tags. schema: type: string enum: - in - not_in - and default: in - name: type in: query description: Limit result set to products assigned a specific type. schema: type: string enum: - simple - grouped - external - variable - variation responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/StoreCollectionData' '400': description: Invalid parameter (rest_invalid_param). content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No route or resource matched (rest_no_route / rest_post_invalid_id). content: application/json: schema: $ref: '#/components/schemas/Error' components: schemas: StoreProduct: type: object properties: id: type: integer name: type: string slug: type: string parent: type: integer type: type: string variation: type: string permalink: type: string format: uri sku: type: string short_description: type: string description: type: string on_sale: type: boolean prices: type: object properties: price: type: string regular_price: type: string sale_price: type: string price_range: type: string currency_code: type: string currency_symbol: type: string currency_minor_unit: type: integer currency_decimal_separator: type: string currency_thousand_separator: type: string currency_prefix: type: string currency_suffix: type: string price_html: type: string average_rating: type: string review_count: type: integer images: type: array items: type: object additionalProperties: true categories: type: array items: type: object additionalProperties: true tags: type: array items: type: string brands: type: array items: type: string attributes: type: array items: type: object additionalProperties: true variations: type: array items: type: object additionalProperties: true grouped_products: type: array items: type: string has_options: type: boolean is_purchasable: type: boolean is_in_stock: type: boolean is_on_backorder: type: boolean low_stock_remaining: type: string stock_availability: type: object properties: text: type: string class: type: string sold_individually: type: boolean weight: type: string dimensions: type: object properties: length: type: string width: type: string height: type: string formatted_weight: type: string formatted_dimensions: type: string add_to_cart: type: object properties: text: type: string description: type: string url: type: string format: uri single_text: type: string minimum: type: integer maximum: type: integer multiple_of: type: integer is_password_protected: type: boolean extensions: type: object _links: type: object properties: self: type: array items: type: string collection: type: array items: type: string related: type: array items: type: string description: Shape observed on a live anonymous GET of the StoreProduct collection on 2026-09-12. StoreProductCategory: type: object properties: id: type: integer name: type: string slug: type: string description: type: string parent: type: integer count: type: integer image: type: string review_count: type: integer permalink: type: string format: uri description: Shape observed on a live anonymous GET of the StoreProductCategory collection on 2026-09-12. StoreProductAttribute: type: object properties: id: type: integer name: type: string taxonomy: type: string type: type: string order: type: string has_archives: type: boolean count: type: integer description: Shape observed on a live anonymous GET of the StoreProductAttribute collection on 2026-09-12. StoreCollectionData: type: object properties: price_range: type: object properties: min_price: type: string max_price: type: string currency_code: type: string currency_symbol: type: string currency_minor_unit: type: integer currency_decimal_separator: type: string currency_thousand_separator: type: string currency_prefix: type: string currency_suffix: type: string attribute_counts: type: string rating_counts: type: string stock_status_counts: type: string taxonomy_counts: type: string description: Shape observed on a live anonymous GET of the StoreCollectionData collection on 2026-09-12. Error: type: object description: WordPress REST error envelope (WP_Error serialized). properties: code: type: string message: type: string data: type: object properties: status: type: integer