openapi: 3.1.0 info: title: Greenbrier Railcar Catalog API version: wp/v2 description: 'Public, unauthenticated read access to the Greenbrier railcar product catalog behind www.gbrx.com — the site''s `railcars` custom post type and its four purpose-built taxonomies (railcar type, cargo type, fluid capacity and cargo capacity). Verified live on 2026-09-12 at 85 published railcars, 18 railcar types, 66 cargo types. Each railcar record carries the marketing copy, the featured image reference, and the taxonomy term IDs that classify it by car type and the commodities it hauls, plus an `acf` block of Advanced Custom Fields specification data. This is the most Greenbrier-specific machine-readable surface the company serves: it is the product catalog of a railcar manufacturer, addressable by HTTP with no credentials.' 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 WordPress REST API tags: - name: Railcars description: Greenbrier railcar models — covered hoppers, tank cars, gondolas, boxcars, intermodal and automotive equipment. - name: Taxonomies description: 'The classification vocabularies applied to railcars: railcar type, cargo type, fluid capacity, cargo capacity.' paths: /wp/v2/railcars: get: operationId: listRailcars summary: List railcars description: Retrieve a paginated collection of published Greenbrier railcar models. Filterable by railcar_type, cargo_type, fluid_capacity and cargo_capacity taxonomy terms. tags: - Railcars parameters: - name: after in: query description: Limit response to posts published after a given ISO8601 compliant date. schema: type: string format: date-time - name: before in: query description: Limit response to posts published before a given ISO8601 compliant date. schema: type: string format: date-time - name: cargo_capacity in: query description: Limit result set to items with specific terms assigned in the cargo_capacity taxonomy. schema: type: object - name: cargo_capacity_exclude in: query description: Limit result set to items except those with specific terms assigned in the cargo_capacity taxonomy. schema: type: object - name: cargo_type in: query description: Limit result set to items with specific terms assigned in the cargo_type taxonomy. schema: type: object - name: cargo_type_exclude in: query description: Limit result set to items except those with specific terms assigned in the cargo_type taxonomy. schema: type: object - 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: fluid_capacity in: query description: Limit result set to items with specific terms assigned in the fluid_capacity taxonomy. schema: type: object - name: fluid_capacity_exclude in: query description: Limit result set to items except those with specific terms assigned in the fluid_capacity taxonomy. schema: type: object - name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: menu_order in: query description: Limit result set to posts with a specific menu_order value. schema: type: integer - name: modified_after in: query description: Limit response to posts modified after a given ISO8601 compliant date. schema: type: string format: date-time - name: modified_before in: query description: Limit response to posts modified before a given ISO8601 compliant date. schema: type: string format: date-time - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - 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 post attribute. schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title - menu_order default: date - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - 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: railcar_type in: query description: Limit result set to items with specific terms assigned in the railcar_type taxonomy. schema: type: object - name: railcar_type_exclude in: query description: Limit result set to items except those with specific terms assigned in the railcar_type taxonomy. schema: type: object - name: search in: query description: Limit results to those matching a string. schema: type: string - name: search_columns in: query description: Array of column names to be searched. schema: type: array items: type: string enum: - post_title - post_content - post_excerpt default: [] - name: search_semantics in: query description: How to interpret the search input. schema: type: string enum: - exact - name: slug in: query description: Limit result set to posts with one or more specific slugs. schema: type: array items: type: string - name: status in: query description: Limit result set to posts assigned one or more statuses. schema: type: array items: type: string enum: - publish - future - draft - pending - private - trash - auto-draft - inherit - request-pending - request-confirmed - request-failed - request-completed - acf-disabled - wc-pending - wc-processing - wc-on-hold - wc-completed - wc-cancelled - wc-refunded - wc-failed - wc-checkout-draft - email_sent - email_failed - email_scheduled - any default: publish - name: tags in: query description: Limit result set to items with specific terms assigned in the tags taxonomy. schema: type: object - name: tags_exclude in: query description: Limit result set to items except those with specific terms assigned in the tags taxonomy. schema: type: object - name: tax_relation in: query description: Limit result set based on relationship between multiple taxonomies. schema: type: string enum: - AND - OR responses: '200': description: A page of railcar records. content: application/json: schema: type: array items: $ref: '#/components/schemas/Railcar' 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' /wp/v2/railcars/{id}: get: operationId: getRailcar summary: Get a railcar description: Retrieve a single railcar model by its numeric WordPress post ID. tags: - Railcars 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: excerpt_length in: query description: Override the default excerpt length. schema: type: integer - name: id in: path description: Unique identifier for the post. required: true schema: type: integer - name: password in: query description: The password for the post if it is password protected. schema: type: string responses: '200': description: One railcar record. content: application/json: schema: $ref: '#/components/schemas/Railcar' '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' /wp/v2/railcar_type: get: operationId: listRailcarTypes summary: List railcar types description: Retrieve the railcar_type taxonomy terms — the equipment classes Greenbrier builds (agricultural covered hopper, pressure tank car, mill gondola, and so on). tags: - Taxonomies 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: Whether to hide terms not assigned to any posts. schema: type: boolean default: false - name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort collection by term attribute. schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - 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: post in: query description: Limit result set to terms assigned to a specific post. schema: type: integer - name: search in: query description: Limit results to those matching a string. schema: type: string - name: slug in: query description: Limit result set to terms with one or more specific slugs. schema: type: array items: type: string responses: '200': description: A page of railcar_type terms. content: application/json: schema: type: array items: $ref: '#/components/schemas/TaxonomyTerm' 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' /wp/v2/railcar_type/{id}: get: operationId: getRailcarType summary: Get a railcar type description: Retrieve one railcar_type term by ID. tags: - Taxonomies 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 term. required: true schema: type: integer responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/TaxonomyTerm' '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' /wp/v2/cargo_type: get: operationId: listCargoTypes summary: List cargo types description: Retrieve the cargo_type taxonomy terms — the commodities Greenbrier railcars are built to haul (aggregate, ethanol, grain, plastic pellets, and so on). tags: - Taxonomies 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: Whether to hide terms not assigned to any posts. schema: type: boolean default: false - name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort collection by term attribute. schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - 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: post in: query description: Limit result set to terms assigned to a specific post. schema: type: integer - name: search in: query description: Limit results to those matching a string. schema: type: string - name: slug in: query description: Limit result set to terms with one or more specific slugs. schema: type: array items: type: string responses: '200': description: A page of cargo_type terms. content: application/json: schema: type: array items: $ref: '#/components/schemas/TaxonomyTerm' 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' /wp/v2/cargo_type/{id}: get: operationId: getCargoType summary: Get a cargo type description: Retrieve one cargo_type term by ID. tags: - Taxonomies 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 term. required: true schema: type: integer responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/TaxonomyTerm' '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' /wp/v2/fluid_capacity: get: operationId: listFluidCapacities summary: List fluid capacities description: Retrieve the fluid_capacity taxonomy terms used to classify tank cars by volume. tags: - Taxonomies 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: Whether to hide terms not assigned to any posts. schema: type: boolean default: false - name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort collection by term attribute. schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - 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: post in: query description: Limit result set to terms assigned to a specific post. schema: type: integer - name: search in: query description: Limit results to those matching a string. schema: type: string - name: slug in: query description: Limit result set to terms with one or more specific slugs. schema: type: array items: type: string responses: '200': description: Successful response. content: application/json: schema: type: array items: $ref: '#/components/schemas/TaxonomyTerm' 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' /wp/v2/cargo_capacity: get: operationId: listCargoCapacities summary: List cargo capacities description: Retrieve the cargo_capacity taxonomy terms used to classify railcars by load capacity. tags: - Taxonomies 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: Whether to hide terms not assigned to any posts. schema: type: boolean default: false - name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort collection by term attribute. schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - 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: post in: query description: Limit result set to terms assigned to a specific post. schema: type: integer - name: search in: query description: Limit results to those matching a string. schema: type: string - name: slug in: query description: Limit result set to terms with one or more specific slugs. schema: type: array items: type: string responses: '200': description: Successful response. content: application/json: schema: type: array items: $ref: '#/components/schemas/TaxonomyTerm' 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' components: schemas: Railcar: type: object properties: id: type: integer date: type: string format: date-time date_gmt: type: string format: date-time guid: type: object properties: rendered: type: string format: uri modified: type: string format: date-time modified_gmt: type: string format: date-time slug: type: string status: type: string type: type: string link: type: string format: uri title: type: object properties: rendered: type: string content: type: object properties: rendered: type: string protected: type: boolean excerpt: type: object properties: rendered: type: string protected: type: boolean featured_media: type: integer menu_order: type: integer template: type: string tags: type: array items: type: string railcar_type: type: array items: type: string cargo_type: type: array items: type: string fluid_capacity: type: array items: type: string cargo_capacity: type: array items: type: string class_list: type: array items: type: string acf: type: array items: type: string _links: type: object properties: self: type: array items: type: string collection: type: array items: type: string about: type: array items: type: string wp:featuredmedia: type: array items: type: string wp:attachment: type: array items: type: string wp:term: type: array items: type: string curies: type: array items: type: string description: Shape observed on a live anonymous GET of the Railcar collection on 2026-09-12. TaxonomyTerm: type: object properties: id: type: integer count: type: integer description: type: string link: type: string format: uri name: type: string slug: type: string taxonomy: type: string meta: type: array items: type: string acf: type: array items: type: string _links: type: object properties: self: type: array items: type: string collection: type: array items: type: string about: type: array items: type: string wp:post_type: type: array items: type: string curies: type: array items: type: string description: Shape observed on a live anonymous GET of the TaxonomyTerm 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