openapi: 3.0.1 info: title: The Open Food Network description: Some endpoints are public and require no authorization; others require authorization. Talk to us to get your credentials set up. Check out our repo! https://github.com/openfoodfoundation/openfoodnetwork version: '0.1' servers: - url: 'https://staging.katuma.org/api' tags: - name: products description: Product endpoints - name: product variants description: Product variant endpoints - name: product images description: Product images endpoints - name: orders description: Order endpoints - name: shipments description: Order shipments endpoints - name: enterprises description: Enterprises endpoints - name: taxonomies description: Taxonomies endpoints - name: cookies_consent description: Cookies_Consent endpoints security: - api_key: [] paths: /products/bulk_products: get: description: Gets all Products. tags: - products responses: '200': description: successful operation content: application/json: schema: type: object properties: pagination: $ref: '#/components/schemas/Pagination' pages: type: integer products: type: array items: $ref: '#/components/schemas/Product' /products/overridable: get: description: Gets all Products. tags: - products responses: '200': description: successful operation content: application/json: schema: type: object properties: pagination: $ref: '#/components/schemas/Pagination' pages: type: integer products: type: array items: $ref: '#/components/schemas/Product' /products: post: description: Posts a new Product. tags: - products parameters: - in: path name: product_object schema: type: object properties: product: $ref: '#/components/schemas/Product' required: true description: JSON object representing the Product to be posted. responses: '201': description: successful post content: application/json: schema: $ref: '#/components/schemas/Product' /products/{product_id}: get: description: Gets a Product by ID. tags: - products parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Product' put: description: Updates the Product with the given ID. tags: - products parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. - in: path name: product_object schema: type: object properties: product: $ref: '#/components/schemas/Product' required: true description: JSON object representing the Product attributes to be overwritten. responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Product' delete: description: Deletes the Product with the given ID. tags: - products parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. responses: '204': description: successful deletion /products/{product_id}/clone: post: description: Clones a Product by ID. tags: - products parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product to clone. responses: '201': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Product' /products/{product_id}/variants: get: description: Gets all Variants of the given Product. tags: - product variants parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. responses: '200': description: successful operation content: application/json: schema: type: object properties: count: type: integer total_count: type: integer variants: type: array items: $ref: '#/components/schemas/Variant' pages: type: integer current_page: type: integer post: description: Posts a new Product Variant. tags: - product variants parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. - in: path name: variant_object schema: type: object properties: variant: $ref: '#/components/schemas/Variant' required: true description: JSON object representing the Variant to be posted. responses: '201': description: successful post content: application/json: schema: $ref: '#/components/schemas/Variant' /products/{product_id}/variants/{variant_id}: get: description: Gets a Variant by ID. tags: - product variants parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. - in: path name: variant_id schema: type: integer required: true description: Numeric ID of the Variant. responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Variant' put: description: Updates the Variant with the given ID. tags: - product variants parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. - in: path name: variant_id schema: type: integer required: true description: Numeric ID of the Variant. - in: path name: variant_object schema: type: object properties: variant: $ref: '#/components/schemas/Variant' required: true description: JSON object representing the Variant attributes to be overwritten. responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Variant' delete: description: Deletes the Variant with the given ID. tags: - product variants parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. - in: path name: variant_id schema: type: integer required: true description: Numeric ID of the Variant. responses: '204': description: successful deletion /product_images/{product_id}: post: description: Creates or updates product image. tags: - product images parameters: - in: path name: product_id schema: type: integer required: true description: Numeric ID of the Product. responses: '201': description: Product image added content: application/json: schema: $ref: '#/components/schemas/ProductImage' '200': description: Product image updated content: application/json: schema: $ref: '#/components/schemas/ProductImage' /orders: get: description: > Gets all Orders. Use combinations of parameters to filter your query. For example /api/orders?q[completed_at_gt]=2020_02_02&q[completed_at_lt]=2020_02_10 returns orders between 2nd and 10th February 2020. Query parameters are generated for the '#/components/schemas/Order_Concise' model with [Ransack](https://github.com/activerecord-hackery/ransack#search-matchers) search matchers tags: - orders parameters: - in: query name: q[distributor_id_eq] schema: type: string style: deepObject description: Query orders for a specific distributor id. required: false - in: query name: q[completed_at_gt] schema: type: string style: deepObject description: Query orders completed after a date. required: false - in: query name: q[completed_at_lt] schema: type: string style: deepObject description: Query orders completed before a date. required: false - in: query name: q[state_eq] schema: type: string style: deepObject description: Query orders by order state, eg 'cart', 'complete'. required: false - in: query name: q[payment_state_eq] schema: type: string style: deepObject description: Query orders by order payment_state, eg 'balance_due', 'paid', 'failed'. required: false - in: query name: q[email_cont] schema: type: string style: deepObject description: Query orders where the order email contains a string. required: false - in: query name: q[order_cycle_id_eq] schema: type: string style: deepObject description: Query orders for a specific order_cycle id. required: false responses: '200': description: successful operation content: application/json: schema: type: object properties: orders: type: array items: $ref: '#/components/schemas/Order_Concise' pagination: type: string /orders/{order_number}/shipments.json: post: description: Creates a new Shipment and adds given variant. tags: - shipments parameters: - in: path name: order_number schema: type: integer required: true description: Number (not id) of the Order being changed. - in: path name: variant_id schema: type: integer required: true description: Numeric ID of the Variant to be added to the shipment. - in: path name: quantity schema: type: integer required: true description: Quantity of the variant to be added to the shipment. - in: path name: stock_location_id schema: type: integer required: true description: Stock location ID to be used to source the variant (for each OFN there's only one valid ID to be used here). responses: '201': description: Shipment successfully created content: application/json: schema: $ref: '#/components/schemas/Shipment' /orders/{order_number}/shipments/{shipment_number}.json: put: description: Updates shipment. tags: - shipments parameters: - in: path name: order_number schema: type: integer required: true description: Number (not id) of the Order being changed. - in: path name: shipment_number schema: type: integer required: true description: Number (not id) of the Shipment being changed. - in: path name: shipment_object schema: type: object properties: product: $ref: '#/components/schemas/Shipment' required: true description: JSON object representing the Shipmeent attributes to be overwritten. responses: '200': description: Successful operation. content: application/json: schema: $ref: '#/components/schemas/Shipment' /orders/{order_number}/shipments/{shipment_number}/add.json: put: description: Adds a variant quantity to the given shipment. tags: - shipments parameters: - in: path name: order_number schema: type: integer required: true description: Number (not id) of the Order being changed. - in: path name: shipment_number schema: type: integer required: true description: Number (not id) of the Shipment being changed. - in: path name: variant_id schema: type: integer required: true description: Numeric ID of the Variant to be added to the shipment. - in: path name: quantity schema: type: integer required: true description: Quantity of the variant to be added to the shipment. responses: '200': description: Variant quantity successfully added. /orders/{order_number}/shipments/{shipment_number}/remove.json: put: description: Removes a variant from the given shipment. tags: - shipments parameters: - in: path name: order_number schema: type: integer required: true description: Number (not id) of the Order being changed. - in: path name: shipment_number schema: type: integer required: true description: Number (not id) of the Shipment being changed. - in: path name: variant_id schema: type: integer required: true description: Numeric ID of the Variant to be removed from the shipment. - in: path name: quantity schema: type: integer required: true description: Quantity of the variant to be removed from the shipment. responses: '200': description: Variant quantity successfully rmeoved. /orders/{order_number}/shipments/{shipment_number}/ready.json: put: description: Moves the shipment to the ready state. tags: - shipments parameters: - in: path name: order_number schema: type: integer required: true description: Number (not id) of the Order being changed. - in: path name: shipment_number schema: type: integer required: true description: Number (not id) of the Shipment being changed. responses: '200': description: Successful workflow change. /orders/{order_number}/shipments/{shipment_number}/ship.json: put: description: Moves the shipment to the shipped state. tags: - shipments parameters: - in: path name: order_number schema: type: integer required: true description: Number (not id) of the Order being changed. - in: path name: shipment_number schema: type: integer required: true description: Number (not id) of the Shipment being changed. responses: '200': description: Successful workflow change. /enterprises: post: description: Creates a new Enterprise. tags: - enterprises parameters: - in: path name: enterprise_object schema: type: object properties: variant: $ref: '#/components/schemas/Enterprise' required: true description: JSON object representing the Enterprise attributes to be created. responses: '201': description: Enterprise successfully created content: application/json: schema: $ref: '#/components/schemas/Enterprise' put: description: Updates an Enterprise. tags: - enterprises parameters: - in: path name: enterprise_object schema: type: object properties: variant: $ref: '#/components/schemas/Enterprise' required: true description: JSON object representing the Enterprise to be overwritten. responses: '200': description: Enterprise successfully updated content: application/json: schema: $ref: '#/components/schemas/Enterprise' /enterprises/{enterprise_id}/shopfront: get: description: Fetch Enterprise shopfront details (products not included). tags: - enterprises parameters: - in: path name: enterprise_id schema: type: integer required: true description: ID of the enterprise. responses: '200': description: Enterprise shopfront details content: application/json: schema: $ref: '#/components/schemas/EnterpriseShopfront' /enterprises/{enterprise_id}/update_image: post: description: Update enterprise images, promo and logo. tags: - enterprises parameters: - in: path name: enterprise_id schema: type: integer required: true description: ID of the enterprise. - in: path name: logo schema: type: string format: binary required: true description: Binary of the logo image. - in: path name: promo schema: type: string format: binary required: true description: Binary of the promo image. responses: '200': description: Image successfully uploaded. URL to the uploaded image content: application/json: schema: type: string /enterprises/{enterprise_permalink}/logo.json: delete: description: Delete enterprise logo image. tags: - enterprises parameters: - in: path name: enterprise_permalink schema: type: string required: true description: Permalink of the enterprise. responses: '200': description: Image successfully deleted. Json object representing the enterprise content: application/json: schema: $ref: '#/components/schemas/Enterprise' /enterprises/{enterprise_permalink}/promo_image.json: delete: description: Delete enterprise promo image. tags: - enterprises parameters: - in: path name: enterprise_permalink schema: type: string required: true description: Permalink of the enterprise. responses: '200': description: Image successfully deleted. Json object representing the enterprise content: application/json: schema: $ref: '#/components/schemas/Enterprise' /customers.json: get: description: List of customer objects for the current user (a customer connects a user with an enterprise) tags: - users responses: '200': description: List of Customer objects content: application/json: schema: type: array items: $ref: '#/components/schemas/Customer' /customers/{customer_id}.json: put: description: Updates customer object of current user (a customer connects a user with an enterprise) tags: - users parameters: - in: path name: customer_id schema: type: integer required: true description: ID of the customer object to update. - in: path name: customer_object schema: $ref: '#/components/schemas/Customer' required: true description: Customer object to be saved. responses: '200': description: Customer object saved. content: application/json: schema: $ref: '#/components/schemas/Customer' /enterprise_fees/{enterprise_fee_id}: delete: description: Deletes enterprise fee. tags: - enterprises parameters: - in: path name: enterprise_fee_id schema: type: integer required: true description: ID of the enterprise fee to delete. responses: '204': description: Enterprise fee successfully deleted. /taxonomies/{taxonomy_id}/taxons/: get: description: Gets all Taxons belonging to a given Taxonomy. tags: - taxonomies parameters: - in: path name: taxonomy_id schema: type: integer required: true description: Numeric ID of the Taxonomy. responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Taxon' post: description: Posts a new Taxon to a given Taxonomy. tags: - taxonomies parameters: - in: path name: taxonomy_id schema: type: integer required: true description: Numeric ID of the Taxonomy. - in: path name: taxon_object schema: type: object properties: taxon: $ref: '#/components/schemas/Taxon' required: true description: JSON object representing the Taxon to be posted. responses: '201': description: successful post content: application/json: schema: type: array items: $ref: '#/components/schemas/Taxon' /taxonomies/{taxonomy_id}/taxons/{taxon_id}: put: description: Updates the Taxon with the given Taxon ID in the Taxonomy with the given Taxonomy ID. tags: - taxonomies parameters: - in: path name: taxonomy_id schema: type: integer required: true description: Numeric ID of the Taxonomy. - in: path name: taxon_id schema: type: integer required: true description: Numeric ID of the Taxon. - in: path name: taxon_object schema: type: object properties: taxon: $ref: '#/components/schemas/Taxon' required: true description: JSON object representing the Taxon attributes to be overwritten. responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Taxon' delete: description: Deletes the Taxon with the given Taxon ID from the Taxonomy with the given Taxonomy ID. tags: - taxonomies parameters: - in: path name: taxonomy_id schema: type: integer required: true description: Numeric ID of the Taxonomy. - in: path name: taxon_id schema: type: integer required: true description: Numeric ID of the Taxon. responses: '204': description: successful deletion /taxonomies/{taxonomy_id}/jstree: get: description: Gets a Taxonomy by ID with a jstree representation. tags: - taxonomies parameters: - in: path name: taxonomy_id schema: type: integer required: true description: Numeric ID of the Taxonomy. responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/TaxonJstree' /taxonomies/{taxonomy_id}/taxons/{taxon_id}/jstree: get: description: Gest a given Taxon from given Taxonomy ID in the jstree representation. tags: - taxonomies parameters: - in: path name: taxonomy_id schema: type: integer required: true description: Numeric ID of the Taxonomy. - in: path name: taxon_id schema: type: integer required: true description: Numeric ID of the Taxon. responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/TaxonJstree' /cookies/consent: get: description: Gets the client's Cookies_Consent status. tags: - cookies_consent responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Cookies_Consent' post: description: Changes the client's Cookies-Consent status to true. tags: - cookies_consent responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Cookies_Consent' delete: description: Changes the client's Cookies-Consent status to false. tags: - cookies_consent responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Cookies_Consent' components: securitySchemes: api_key: type: apiKey name: X-Spree-Token in: header schemas: Pagination: type: object properties: results: type: integer pages: type: integer page: type: integer per_page: type: integer Product: type: object properties: id: type: integer name: type: string sku: type: string price: type: string available_on: type: string permalink_live: type: string on_hand: type: integer variant_unit: type: string variant_unit_scale: type: string variant_unit_name: type: string tax_category_id: type: integer import_date: type: string image_url: type: string thumb_url: type: string producer_id: type: integer category_id: type: integer master: $ref: '#/components/schemas/AdminVariant' variants: type: array items: $ref: '#/components/schemas/AdminVariant' AdminVariant: type: object properties: id: type: integer name: type: string on_hand: type: integer sku: type: string price: type: string producer_name: type: string import_date: type: string options_text: type: string unit_value: type: integer unit_description: type: string unit_to_display: type: string display_as: type: string display_name: type: string name_to_display: type: string on_demand: type: boolean in_stock: type: boolean image: type: string variant_overrides: type: array items: $ref: '#/components/schemas/AdminVariantOverride' AdminVariantOverride: type: object properties: id: type: integer count_on_hand: type: integer default_stock: type: integer hub_id: type: integer import_date: type: string on_demand: type: boolean permission_revoked_at: type: string price: type: string resettable: type: boolean sku: type: string variant_id: type: integer Variant: type: object properties: id: type: integer on_hand: type: integer sku: type: string price: type: string product_name: type: string is_master: type: boolean options_text: type: string unit_value: type: integer unit_description: type: string unit_to_display: type: string display_as: type: string display_name: type: string name_to_display: type: string on_demand: type: boolean fees: type: object price_with_fees: type: string tag_list: type: array items: type: string ProductImage: type: object properties: id: type: integer alt: type: string thumb_url: type: string small_url: type: string image_url: type: string large_url: type: string Order_Concise: type: object properties: id: type: integer number: type: string full_name: type: string email: type: string phone: type: string completed_at: type: string display_total: type: string show_path: type: string edit_path: type: string state: type: string payment_state: type: string shipment_state: type: string payments_path: type: string shipments_path: type: string ship_path: type: string ready_to_ship: type: boolean created_at: type: string distributor_name: type: string special_instructions: type: string payment_capture_path: type: string distributor: type: object properties: id: type: integer order_cycle: type: object properties: id: type: integer Shipment: type: object properties: selected_shipping_rate_id: type: integer Enterprise: type: object properties: id: type: integer name: type: string owner_id: type: integer EnterpriseShopfront: type: object properties: id: type: integer name: type: string description: type: string latitude: type: integer longitude: type: integer long_description: type: string website: type: string instagram: type: string linkedin: type: string twitter: type: string facebook: type: string is_primary_producer: type: boolean is_distributor: type: boolean phone: type: string visible: type: boolean email_address: type: string hash: type: string logo: type: string promo_image: type: string path: type: string category: type: string active: type: boolean producers: type: array items: $ref: '#/components/schemas/EnterpriseThin' orders_close_at: type: string hubs: type: array items: $ref: '#/components/schemas/EnterpriseThin' taxons: type: array items: type: string supplied_taxons: type: array items: type: string pickup: type: boolean delivery: type: boolean address: type: array items: $ref: '#/components/schemas/Address' EnterpriseThin: type: object properties: id: type: integer name: type: string active: type: boolean path: type: string address: $ref: '#/components/schemas/Address' Address: type: object properties: id: type: integer zipcode: type: string city: type: string state_name: type: string state_id: type: integer phone: type: string firstname: type: string lastname: type: string address1: type: string address2: type: string country_id: type: integer Customer: type: object properties: id: type: integer enterprise_id: type: integer name: type: string code: type: string email: type: string allow_charges: type: boolean Taxon: type: object properties: name: type: string taxonomy_id: type: integer position: type: integer permalink: type: string taxons: type: array items: $ref: '#/components/schemas/Taxon' pretty_name: type: string id: type: integer parent_id: type: integer icon: type: string TaxonJstree: type: object properties: data: type: string state: type: string attr: type: object properties: id: type: integer name: type: string Cookies_Consent: type: object properties: cookies_consent: type: boolean example: cookies_consent: false