Dumpster Controls · agent page

This is the agent-optimized version of https://dumpstercontrols.io/help/booking-api/lesson-15-materials-the-price-depends-on-what-goes-in: the same content as the human page, without scripts, styles, animations or navigation. People should open the full page.

Canonical page
https://dumpstercontrols.io/help/booking-api/lesson-15-materials-the-price-depends-on-what-goes-in
Last updated
2026-10-05
Tokens
1,792 tokens (cl100k_base), within the 2,000-token budget for a help page
Size
12 KB for this page, against 26 KB for the human page (52% smaller)
Markdown
https://dumpstercontrols.io/help/booking-api/lesson-15-materials-the-price-depends-on-what-goes-in.md, or send Accept: text/markdown to the canonical URL
Cite as
Lesson 15: materials, the price depends on what goes in. Dumpster Controls. https://dumpstercontrols.io/help/booking-api/lesson-15-materials-the-price-depends-on-what-goes-in (accessed 2026-10-10).
More for agents
Facts sheet · llms.txt · llms-full.txt · All agent pages · Product manual

Booking API course · updated 2026-10-05

Lesson 15: materials, the price depends on what goes in

Some companies charge a different price for the same dumpster depending on what goes in it (clean concrete, asphalt, brick, soil) and only accept heavy materials in smaller sizes. This lesson covers GET /materials and the material field on POST /quote and POST /intents. The company configures all of it in the app (Inventory, Materials: which sizes accept each material, the price per size, included tons, the switch "Pricing by material", off by default); this API only reads it, there is no endpoint to create or edit materials. Nothing changes for a company that does not price by material.

Before you start

  • Lessons 3, 5 and 6
  • A company that turned on pricing by material in Inventory, Materials (off by default)
  1. ## Read the materials
    ```
    GET /materials returns data { enabled, required, materials[], note }. enabled means the company prices by material; required means ask the material before the size. Each material has slug, label, explanation (what counts as that material), requires_ack (the customer must confirm the explanation), is_catch_all (the general option that is always available), is_heavy, size_policy (all or listed) and sizes[]: with listed, only those sizes accept the material; each size carries price (replaces the 7-day base; null = the size price), max_weight_tons, overage_mode (inherit, flat, per_ton) and overage_per_ton.
    ```
  2. ## Material-first screens
    When required is true: step 1 asks what the customer is disposing of (the materials, in sort_order, with label and explanation), step 2 shows only the sizes that material allows (sizes[] when size_policy is listed, every size from GET /sizes when all) at the material price, then dates, address and the card. When enabled is false keep your usual size-first flow.
  3. ## Quote and start with a material
    ```
    POST /quote { size_id, rental_days, material } returns pricing material or general, material {...} and the usual lines: with pricing material, base is the material price for 7 days, days beyond 7 use the size's extra day rate, fees and tax are unchanged, and a percentage promo applies to the material price. POST /intents takes the same material plus material_acknowledged: true when requires_ack is true. The server resolves the material once and freezes it with the payment, so the order keeps that price even if the office edits it later.
    ```
  4. ## Errors to handle
    400 invalid_body field material: unknown slug (details.allowed lists the valid ones). 400 invalid_body field material_acknowledged: the material requires the customer's confirmation (the explanation is in the message). 400 invalid_body field debris_type: you sent material and a different debris_type. 409 material_not_allowed: the material is not available in that size; details.allowed_sizes (id, label, yards, price) are the sizes to offer.
  5. ## Compatibility
    Clients that never send material keep today's prices and responses. One exception: on a company that prices by material, a debris_type equal to an active material slug (for example concrete) is priced as that material and may be refused with material_not_allowed. Send material explicitly to be precise.
  6. ## What the office sees
    The order shows the material, the invoice line reads size and material (for example 10 Yard, Clean Concrete) with the included weight of that rule, and the order keeps a snapshot of the rule the customer accepted, with the acknowledgement time. Webhooks carry material and material_label.

What happens next

  • Test one quote per material against the office's price list before going live; the Developers tab's test quote already uses the first priced material when the company has one.

Troubleshooting

GET /materials returns enabled false but the office configured prices.

Pricing by material is off by default for every company. The office turns it on with the switch at the top of Inventory, Materials; until then the list is visible but every material costs the size price.

The same size costs less with a material than without.

That is the company's choice: some materials (clean concrete) are cheaper to dispose of. The material price replaces the size price; it is not added to it.

Related guides

© 2026 Dumpster Controls. All rights reserved. Made in the USA.

Frequently asked questions

Is Dumpster Controls really free?

Yes. The software is free: dispatch, online booking, the driver app, invoicing, the Tresha AI assistant and every other feature, with no monthly fee, no trial period and no credit card to sign up. The only cost on the free plan is optional card processing when a customer pays by card through the platform: 2.99% plus $3.99 per transaction on the free plan. An optional Unlimited plan at $169 per month lowers that to 2.99% plus $0.30. Prices as published on dumpstercontrols.io/pricing on 2026-09-23.

Do you charge per driver, per truck or per order?

No. There is no per-driver, per-truck, per-user or per-order fee, and no order limit. A company with one truck and a company with twenty pay the same for the software: nothing.

Is there a contract?

No. There is no contract, no minimum term and no setup fee. You create the account yourself, and on the free plan there is nothing to cancel because nothing is billed. The optional Unlimited plan is billed month to month.

Which countries and languages are supported?

Dumpster Controls serves hauling companies in the United States and Canada. The app interface and the Tresha AI assistant are available in English, Spanish and Portuguese. The public pages, such as the blog, the help center and the landfill finder, are in English.

How do I switch from another dumpster software?

Create a free account at dumpstercontrols.io/login, with no sales call and no credit card. Then import your customers from a CSV file using the template provided in the app; past orders can also be imported from a CSV. Container sizes and pricing are set up in Settings. The landfill database, with 1,750 active US and Canadian landfills as counted on 2026-10-01, is already loaded, so disposal sites do not need to be typed in. Step-by-step guides are at dumpstercontrols.io/help.