{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"77808302-965a-452d-a352-0c57983f8c09","name":"Bushel Public Api","description":"# Responsible Use\n\nIntegrators, please take the time to efficiently design your api queries. This is considerate of our server load, and also will reduce the API fees your company or the companies you are working with may be charged. Call our api as much as appropriate, but be considerate.\n\nSome API Endpoints **require** an updated_at_from field to be set in the query. The first time you call this endpoint you should call it from the date the company first joined, but subsequent calls should be restricted to only search for records updated since the last call.\n\nFor example: Imagine you are trying to sync the orders in this system with an external system and you plan to call our API once per hour. The first call could have an update_at_from param set in the year 1970. Your subsequent requests, however, should only query for orders that have an updated_at timestamp after the last time you searched.\n\n**Example Daily Inventory Sync getting data that changed in last 24 hours**\n\nday 1 (2025-04-21)\n\n/products?updated_at_from=2025-04-20T22:00:00Z\n\n/batches?updated_at_from=2025-04-20T22:00:00Z\n\nday 2 (2025-04-22)\n\n/products?updated_at_from=2025-04-21T22:00:00Z\n\n/batches?updated_at_from=2025-04-21T22:00:00Z\n\nday 3 (2025-04-23)\n\n/products?updated_at_from=2025-04-22T22:00:00Z\n\n/batches?updated_at_from=2025-04-22T22:00:00Z\n\n# Rate Limiting\n\nAll API requests are subject to rate limiting to ensure fair usage and service stability.\n\n- 15 requests per second per API token\n    \n- Rate Limit Headers\n    \n    Every response includes headers indicating your current rate limit status:\n    \n    X-RateLimit-Limit: 15  \n    X-RateLimit-Remaining: 10 When you exceed the rate limit, you'll receive a 429 Too Many Requests response with additional headers:\n    \n    HTTP/1.1 429 Too Many Requests  \n    Retry-After: 1  \n    X-RateLimit-Reset: 1699564823  \n    X-RateLimit-Remaining: 0\n    \n    {  \n    \"message\": \"Rate limit exceeded. Maximum 30 requests per second allowed.\"  \n    }\n    \n\nBest Practices:\n\n1. Implement exponential backoff - When you receive a 429, wait before retrying\n    \n2. Respect Retry-After - Wait the specified number of seconds before your next request\n    \n3. Spread requests - Avoid synchronized operations (e.g., all cron jobs at :00). Its a courtesy to us if you would choose random times for your syncs to minimize the thundering herd problem.\n    \n4. Cache responses - Reduce unnecessary API calls by caching data locally\n    \n\n# Api Completeness\n\nThe API provides a subset of the features in the application. We add to it by request.\n\n# Api Fees\n\nTo be determined, based upon number of resources returned. We want to provide free access to the API for anyone making reasonable demands upon it. We are looking into adding charges to the API for the integrators who have heavy API demands or are not writing queries efficiently.\n\n# Authentication\n\nThe API endpoints will only establish communication over the `HTTPS` Secure communication protocol and requires a valid `token` in order to interact with it using Bearer authentication.\n\nBearer authentication (also called token authentication) is an `HTTP` authentication scheme that involves security tokens called bearer tokens. The name \"Bearer authentication\" can be understood as \"give access to the bearer of this token.\" The bearer token is a cryptic string generated by the server. The client must send this token in the Authorization header when making requests to protected resources.\n\nAll API requests are **required to have a** **`Authorization`** **header of** **`Bearer YOUR_API_TOKEN_HERE`**.\n\nAll API requests are **required to have a** **`Accept`** **header of** **`application/json`**.\n\nAll API endpoints make use of the `JSON` format for sending and receiving data and all `POST` and `PUT` requests are expected to contain `JSON`.\n\n# Tools\n\nThis is a postman provided API. You may download the collection for a jumpstart on building against our API.\n\n# Pagination\n\nThe API uses pagination to return its records. _The default records per page is_ _**15 records**_.\n\nThis can be ovridden with the query parameter **`per_page`**.\n\nThe maximum records allowed per page is **500 records for most resources. Some resources may have a smaller maximum allowed return.**\n\nEach paginated response will look similar to the following:\n\n``` json\n{\n    ...\n    \"links\": {\n        \"first\": \"https://secure.bushel44.com/api/v1/buyers?page=1\",\n        \"last\": \"https://secure.bushel44.com/api/v1/buyers?page=6\",\n        \"prev\": null,\n        \"next\": \"https://secure.bushel44.com/api/v1/buyers?page=2\"\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 6,\n        \"links\": [\n            {\n                \"url\": null,\n                \"label\": \"« Previous\",\n                \"active\": false\n            },\n            {\n                \"url\": \"https://secure.bushel44.com/api/v1/buyers?page=1\",\n                \"label\": \"1\",\n                \"active\": true\n            },\n            {\n                \"url\": \"https://secure.bushel44.com/api/v1/buyers?page=2\",\n                \"label\": \"2\",\n                \"active\": false\n            },\n            {\n                \"url\": \"https://secure.bushel44.com/api/v1/buyers?page=3\",\n                \"label\": \"3\",\n                \"active\": false\n            },\n            {\n                \"url\": \"https://secure.bushel44.com/api/v1/buyers?page=4\",\n                \"label\": \"4\",\n                \"active\": false\n            },\n            {\n                \"url\": \"https://secure.bushel44.com/api/v1/buyers?page=5\",\n                \"label\": \"5\",\n                \"active\": false\n            },\n            {\n                \"url\": \"https://secure.bushel44.com/api/v1/buyers?page=6\",\n                \"label\": \"6\",\n                \"active\": false\n            },\n            {\n                \"url\": \"https://secure.bushel44.com/api/v1/buyers?page=2\",\n                \"label\": \"Next »\",\n                \"active\": false\n            }\n        ],\n        \"path\": \"https://secure.bushel44.com/api/v1/buyers\",\n        \"per_page\": 15,\n        \"to\": 15,\n        \"total\": 85\n}\n\n ```\n\n# Server Responses\n\n| **`200 OK`** | The request has succeeded. |  \n| **`201 Created`** | The request has succeeded and a new record has been created as a result. |  \n| **`401 Unauthorized`** | `{ \"message\": \"Unauthenticated.\" }` |  \n| **`403 Forbidden`** | `{ \"message\": \"This action is unauthorized.\" }` |  \n| **`404 Not Found`** | `{ \"message\": \"Resource Not Found\" }` |\n\n| **`409 Conflict`** | `{ \"message\": \"Conflict with requested update\" }` |  \n| **`422 Unprocessable Entity`** | `{ \"message\": \"The given data was invalid.\" }` |  \n| **`500 Internal Server Error`** | `{ \"message\": \"Server Error\" }` |\n\nFor all create and update actions the response will include the updated resource.\n\nFor delete actions, a response status of 200 confirms successful deletion.\n\nThe message may provide additional details on why an action is denied.\n\nIf you receive HTML back in your response, this likely means that you are not including the correct headers in your request. Please see section in authentication above and the Accept Header.\n\n# Permissions\n\nThe api is gated by the resources each token is granted access to. The /welcome endpoint will display a list of the token permissions.\n\nWe suggest that you provide the minimum necessary permissions for each API token.\n\n# Post / Patch Requests\n\nPlease see the available fields in in the documentation for each request.\n\n#### **Documentation conventions**\n\n**In Post Requests**\n\n- **required** | You must supply this field\n    \n- **optional** | You do not need to supply this field, it will be NULL or FALSE if you don't supply it.\n    \n\n**In Patch Requests**\n\nPatch Requests use Sparse Updates. If you do not include a field in your request it will not be touched, leaving it as it was. If you do include a field in your request but it is not set, it will be set to NULL in the database.\n\n- **optional, not nullable** | You don't need to send in your request, but if you do it must have a value.\n    \n- **optional, nullable** | You don't need to send in your request. If you send an empty value the field will be set to NULL or FALSE\n    \n\n# Requests and Data Type Conventions\n\n###### Company ID\n\nThe root resource for accounts is called a company. The token will resolve to this company, and many models have a company_id column. Some models may have multiple, such as orders which will have a buyer_company_id and a seller_company_id, or buyers which has a buyer_company_id (the buyer account, optionally null) and an owning_company_id (the seller).\n\nSome models may be optionally scoped to a company_id. For example, Environmental Issues has a company_id column. All companies have access to the records where company_id is null, and then also access to any records where the company_id matches their company id. This allows us to provide defaults for everyone and specific options for individual companies. You may therefore determine if it is a custom scoped value based on the value of the company_id on these types of models.\n\n###### Array Format Requests\n\nMany of our endpoints allow you to filter by an array. For example the query param will look like ids\\[\\] or operation_ids\\[\\]. This allows you to chain multiple together. So you can pass ids\\[\\]=1&ids\\[\\]=2\n\n###### Currency\n\nAll currency data returned is rounded to the _hundredth’s decimal_ `(1.00)` with no symbol`($)`.\n\nWhen sending currency query do not include the currency symbol or commas.\n\nWhen you send you a currency query you can do so with or without the decimal point (`$100` or `$100.00`).\n\n###### Times and Dates\n\nAll date and date/time fields submited to the server are expected to be in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. Likewise, all date and date/time fields returned by the server will be in ISO 8601 format.\n\nThe only ISO 8601 date format supported is `YYYY-MM-DD`, even though the standard defines `YYYY-DDD` as valid, it is currently not supported.\n\nMost dates returned by the application will be in UTC time. Exceptions will be noted per request.\n\nBelow are some examples of valid ISO 8601 date/time formats:\n\n| Example | Description |\n| --- | --- |\n| `2021-04-20` | The above date/time format represents April 20th, 2021. |\n| `2021-04-20T22:04:50Z` | The above date/time format represents April 20th, 2021 10:04:50 PM (UTC) using the `Z` identifier. The API will assume `000` milliseconds. |\n| `2021-04-20T22:04:50+00:00` | The format above represents the same April 20th, 2021 10:04:50 PM (UTC) using a numerical time zone offset of `+00:00`. The API will assume `000` milliseconds. |\n| `2021-11-02T16:30:40.345+00:00` | The format above represents November 2nd, 2021 4:30:40.345 PM (UTC) using a numerical time zone offset of `+00:00`. Note the addition of the milliseconds portion of the time in this example. |\n| `2021-01-12T22:20:30.456-06:00` | The format above represents January 12th, 2021 10:20:30.456 PM (MDT) using a numerical time zone offset of `-06:00`. Note the addition of the milliseconds portion of the time in this example. |\n\n# Support\n\nPlease email\n\n- [api@bushel44.com](https://mailto:api@bushel44.com) with any questions\n    \n- [support@bushel44.com](https://mailto:support@bushel44.com) with all other needs","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"44399576","team":7516577,"collectionId":"77808302-965a-452d-a352-0c57983f8c09","publishedId":"2sB2j968o9","public":true,"publicUrl":"https://api-docs.bushel44.com","privateUrl":"https://go.postman.co/documentation/44399576-77808302-965a-452d-a352-0c57983f8c09","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"84a263"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/feb0ddf9-ec2f-493b-86cc-bd061a05a4d9/YnVzaGVsLWxvZ28ucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"84a263"}},{"name":"light","logo":"https://content.pstmn.io/feb0ddf9-ec2f-493b-86cc-bd061a05a4d9/YnVzaGVsLWxvZ28ucG5n","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"84a263"}}]}},"version":"8.10.1","publishDate":"2025-05-08T12:01:26.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/feb0ddf9-ec2f-493b-86cc-bd061a05a4d9/YnVzaGVsLWxvZ28ucG5n","logoDark":"https://content.pstmn.io/feb0ddf9-ec2f-493b-86cc-bd061a05a4d9/YnVzaGVsLWxvZ28ucG5n"}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/6617d11e708c554d0440b83b73af4167ce011e949e957be58da89052e7973de8","favicon":"https://bushel44.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://api-docs.bushel44.com/view/metadata/2sB2j968o9"}