Bushel Fulfillment™ and Bushel Production™ API Documentation (1.5.3)

Download OpenAPI specification:Download

Bushel reserves the right to make backwards-compatible additions to any of these schemas at any point without prior notice. To ensure that your integration is not adversely impacted by any of these changes, make sure your JSON deserialization is configured to allow/ignore unknown properties.

Deprecated properties should not be used -- they will be removed in future versions. This removal will be communicated months in advance and we will work with you to avoid any interruptions to your service. We recommend migrating to the specified alternatives (see the notes on each deprecated property).

ID fields should be treated as opaque identifiers -- do not attempt to parse them.

5xx errors are often thrown directly by the web server and JSON data cannot be guaranteed to contain a JSON body. For this reason, the body should not be parsed and a generic message should be shown to the user.

Authentication

StaticKeyAuth

Custom shared-key authentication mechanism used for webhooks. Key will be provided by Bushel.

Security Scheme Type API Key
Header parameter name: Authorization

Bushel Fulfillment™

Bushel Fulfillment™ enables better business relationships among grain companies regardless of the technology they use to manage their operation. Bushel Fulfillment™ empowers:

  • Fast business decisions: Digitally and securely access contracts with multiple grain companies.
  • Precise contract fulfillment: Updated information on open and fulfilled contracts in minutes, not days.
  • Paperless reconciliation: Proof of delivery without a paper scale ticket.
  • Efficient execution: Settle contracts without waiting on paper-based proof of delivery.

Bushel Fulfillment™ is designed for both traditional grain companies with physical assets as well as grain marketing firms, direct shippers, or nontraditional grain entities. No matter how they purchase grain and sell it to other partners in the supply chain, Bushel Fulfillment™ brings transparency and efficiency to their business.

Data Feed

The data push happens on a recurring basis, typically in 1hr intervals. Records that have been updated since the last push are transmitted.

Authorizations:
Request Body schema: application/json
One of
Array of objects (Account Wrapper)
object

Responses

Request samples

Content type
application/json
Example
{
  • "data": [
    • {
      • "account": {
        • "id": "123-FFARMS1",
        • "remote_id": "FFARMS1",
        • "name": "Fastidious Farms",
        • "company": {
          • "id": "123",
          • "name": "Local Grain Co-op"
          },
        • "phones": [
          • {
            • "phone": "2025550123"
            }
          ],
        • "created_at": "2020-11-30T21:15:32.000Z",
        • "updated_at": "2020-11-30T21:15:32.000Z",
        • "deleted_at": null
        }
      }
    ],
  • "meta": {
    • "current_page": 1,
    • "page_count": 1,
    • "page_size": 1000,
    • "total_count": 1,
    • "total_pages": 1
    }
}

Update Feed Marker

The feed marker is used to track which records need to be transmitted on the next run. It automatically advances as records are pushed to {$CUSTOMER_BASE_URL}/feed. If the Customer wants Bushel to retransmit records that have already been pushed, this endpoint can be used to reset the marker for the next run. The specified marker timestamp must be in the year 2016 or later.

Authorizations:
path Parameters
channel_slug
required
string
Example: insuranceco

A unique identifier for the Customer's channel. Provided by Bushel.

entity_type
required
string
Enum: "accounts" "tickets" "contracts" "settlements"
Example: tickets

The entity type

Request Body schema: application/json
timestamp
required
string <date-time>

minimum date of 2016-01-01T00:00:00+00:00

Responses

Response Schema: application/json
code
string
message
string
object

Request samples

Content type
application/json
{
  • "timestamp": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "code": "VALIDATION_ERROR",
  • "message": "You have validation errors in your submission",
  • "validation_messages": {
    • "timestamp": [
      • "The timestamp field is required"
      ]
    }
}

Bushel Production™

Bushel Production™ enables Farmers to share digital copies of their scale tickets and contract data with Bushel Production™ customers.

Whether for regulatory/auditing purposes (crop insurance), for accounting/profitability analysis (farm management software), or something else entirely - Bushel Production™ has you covered.

Subscription Management

Farmers can use the UI found at this URL to opt-in to sharing their scale ticket and contract data with the Bushel Production customer. This opt-in process is as follows:

  1. The farmer is directed to the /partner webpage, via e.g. a link or button presented to them on the Bushel Production customer's website or application.
  2. The farmer logs in to Bushel.
  3. The farmer selects the accounts they wish to share with the Bushel Production customer.
  4. The farmer is redirected back to the customer's website or application.

Scale ticket and contract from the subscribed account(s) will then be periodically transmitted to the Bushel Production™ customer's $CUSTOMER_BASE_URL/feed endpoint.

query Parameters
callback_url
required
string <url>
Example: callback_url=https://customer.example.com

Where the user should be redirected to after configuring their subscriptions.

display_name
required
string
Example: display_name=InsuranceCo

The name of the Bushel Production customer. It will be displayed on the subscription management page.

partner_id
required
string
Example: partner_id=123-456-789

Provided by the Bushel Production customer as a unique identifier to correlate subscription changes with their system. This value is used to scope subscription management - i.e. only subscriptions created with the same partner_id will be shown to the user on subsequent visits.

For example, if the Farmer sets up a subscription for their account and the value 'abc' was provided as the partner_id, then revisits the page with a partner_id of '123', the subscription will not be shown. However, if the partner_id of 'abc' is passed, the subscription that was created will be displayed for editing.

An example of how this feature could be used: A crop insurance company could use this to scope subscriptions to specific policies, such that their Farmers or Agents can manage data subscriptions for multiple insurance policies separately.

partner_slug
required
string
Example: partner_slug=PARTNER_SLUG

A unique identifier for the Customer's channel. Provided by Bushel.

phone
required
string <phone>
Example: phone=5555555555

Optionally pre-loads the farmer's phone number on the initial authentication screen. This should be 10 digits with NO other characters.

Responses

Callbacks

Callback payload samples

Callback

Data Feed

The data push happens on a recurring basis, typically in 1hr intervals. Records that have been updated since the last push are transmitted.

Authorizations:
Request Body schema: application/json
One of
Array of objects (Account Wrapper)
object

Responses

Request samples

Content type
application/json
Example
{
  • "data": [
    • {
      • "account": {
        • "id": "123-FFARMS1",
        • "remote_id": "FFARMS1",
        • "name": "Fastidious Farms",
        • "company": {
          • "id": "123",
          • "name": "Local Grain Co-op"
          },
        • "phones": [
          • {
            • "phone": "2025550123"
            }
          ],
        • "created_at": "2020-11-30T21:15:32.000Z",
        • "updated_at": "2020-11-30T21:15:32.000Z",
        • "deleted_at": null
        }
      }
    ],
  • "meta": {
    • "current_page": 1,
    • "page_count": 1,
    • "page_size": 1000,
    • "total_count": 1,
    • "total_pages": 1
    }
}

Update Feed Marker

The feed marker is used to track which records need to be transmitted on the next run. It automatically advances as records are pushed to {$CUSTOMER_BASE_URL}/feed. If the Customer wants Bushel to retransmit records that have already been pushed, this endpoint can be used to reset the marker for the next run. The specified marker timestamp must be in the year 2016 or later.

Authorizations:
path Parameters
channel_slug
required
string
Example: insuranceco

A unique identifier for the Customer's channel. Provided by Bushel.

entity_type
required
string
Enum: "accounts" "tickets" "contracts" "settlements"
Example: tickets

The entity type

Request Body schema: application/json
timestamp
required
string <date-time>

minimum date of 2016-01-01T00:00:00+00:00

Responses

Response Schema: application/json
code
string
message
string
object

Request samples

Content type
application/json
{
  • "timestamp": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "code": "VALIDATION_ERROR",
  • "message": "You have validation errors in your submission",
  • "validation_messages": {
    • "timestamp": [
      • "The timestamp field is required"
      ]
    }
}