REST endpoints for dumpster rentals in ServFlo: 36 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.servflo.ai/api. Every call needs Authorization: Bearer sfk_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
Rental orders, newest drop-off first: status, customer, size, can number, dates and days out. Filter by status, open (scheduled, on site or picked up), size, customer, job or search (RNT-n, customer, address). Technicians: rentals on their jobs. Read-only.
SCHEDULED (ordered, not dropped), ON_SITE, PICKED_UP (waiting for the dump ticket and final bill), CLOSED (billed), CANCELLED. One of SCHEDULED, ON_SITE, PICKED_UP, CLOSED, CANCELLED.
open
query
boolean
No
sizeId
query
string
No
customerId
query
string
No
jobId
query
string
No
Only the rental this job carries out.
query
query
string
No
Free-text search over the list's names, numbers and contact details. Up to 200 characters.
limit
query
integer
No
Page size, 1–200. Default 50.
offset
query
integer
No
Rows to skip; the answer's total counts every match. Default 0.
SCHEDULED (ordered, not dropped), ON_SITE, PICKED_UP (waiting for the dump ticket and final bill), CLOSED (billed), CANCELLED. One of SCHEDULED, ON_SITE, PICKED_UP, CLOSED, CANCELLED.
items[].source
enum
One of OFFICE, ONLINE, AI_RECEPTIONIST, WEB_CHAT, PORTAL, API.
Books a can of a size at a customer's property (the job site; it must be one the customer occupies) from a drop-off date to an expected pickup date. Makes one job whose visits are the stops (drop-off and pickup; swaps are added later) and, by the business's setting, a draft up-front invoice for the base price and street permit. Prices are copied from the size. 409 when no can of the size is free for those dates: check GET /dumpsters/availability first, and set allowOverbook only when the person says to book it anyway. Optionally holds a specific can now (dumpsterId); otherwise the driver picks it at drop-off.
Permission
jobs.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
GET /organizations/{organizationId}/rentals/{rentalId}
One rental with its stops (each a visit of the rental's job), the cans moved, extra charges, dump tickets, invoices and the running bill (days out, tons, extra days and tons so far). Read-only.
Changes an open rental: dates (the drop-off date only before drop-off; the stops not done yet move with them), placement, debris, permit, periodic billing, notes, or the size (only before drop-off; its prices are copied again). 409 when the new dates or size overbook, unless allowOverbook.
Permission
jobs.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
PUT /organizations/{organizationId}/rentals/{rentalId}/dumpster
Before drop-off: holds a specific can of the rental's size (it shows RESERVED), changes it, or lets it go (dumpsterId: null). Optional: the driver can pick the can at drop-off instead.
Permission
jobs.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
POST /organizations/{organizationId}/rentals/{rentalId}/stops
Adds a stop to the rental's job as a new visit on the dispatch board: SWAP (take the full can, leave an empty one, or dump and return the same can), DUMP_RUN, or PICKUP (when none is booked). A null date leaves it under Needs scheduling. Answers a customer's swap or pickup request.
Permission
jobs.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
PUT /organizations/{organizationId}/rentals/{rentalId}/pickup
Moves the booked pickup to a day (and time), or books one when there is none. The expected pickup date follows. Use it when the customer calls for an early pickup or wants the can longer.
Permission
jobs.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
POST /organizations/{organizationId}/rentals/{rentalId}/stops/{stopId}/complete
The driver finished a stop. Drop-off: the can left (dumpsterId, default the can held) goes ON_SITE. Swap: the full can (removedDumpsterId, default the can on site) goes to the dump, the can left (dumpsterId; the same can for a dump and return) is on site, and the swap fee is charged. Pickup: the can goes to the dump and the rental is PICKED_UP. dryRun: it could not be done; nothing moves, the trip fee is charged and the stop is booked again for the office to place. Completes the visit too. Done again, it changes nothing. Technicians: their own stops.
Permission
jobs.work (Owner, Admin, Dispatcher, Technician)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
POST /organizations/{organizationId}/rentals/{rentalId}/dump-tickets
The scale ticket from the dump: weight in tons, the dump site, the disposal cost (default the site's cost per ton × weight), the ticket number and a photo (a job photo). The weight counts toward the rental's tons (billed past the included tons when it closes); the cost is a Disposal expense on the job (job costing). The emptied can goes back to the yard (returnToYardId, default the business's yard). Without stopId it is for the rental's latest swap or pickup. Technicians: their own rentals.
Permission
jobs.work (Owner, Admin, Dispatcher, Technician)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
POST /organizations/{organizationId}/rentals/{rentalId}/charges
A surcharge billed on the next rental invoice: a pricebook item (mattress, tires, appliance …, at its price unless unitPriceCents) or a named line with a price. Technicians can add them at a stop.
Permission
jobs.work (Owner, Admin, Dispatcher, Technician)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
POST /organizations/{organizationId}/rentals/{rentalId}/close
After pickup: counts the days (drop-off to pickup) and the tons on the dump tickets and makes the final draft invoice: extra days (less those billed periodically), extra tons, unbilled charges, the fuel fee, and the base price when it was not billed up front. 409 before pickup, or when the pickup's dump ticket is missing (set allowWithoutTicket to close anyway). Send the invoice with the invoice tools. Closing again changes nothing.
POST /organizations/{organizationId}/rentals/{rentalId}/bill-period
For a can still on site: bills the extra days accrued through the last full billing period (and unbilled charges) on a draft invoice. invoiceId is null when nothing is due. ServFlo also does this every day for rentals set to periodic billing.
A rental: identifier RNT-n, status, customer, job site (property), size, the can (dumpsterId, dumpsterNumber), dates (requestedDropDate, expectedPickupDate, droppedOn, pickedUpOn), placement notes and photo, debris type, permit, the prices copied at order (pricing), the stops (kind DROP_OFF / SWAP / PICKUP / DUMP_RUN, visitId, scheduledDate, visitStatus, the cans moved, completedAt), extra charges, dump tickets, invoices, and running: days out, tons dumped and the overages so far.
POST /organizations/{organizationId}/rentals/{rentalId}/cancel
Cancels an order whose can is not out yet: its stops are canceled, a held can goes back to the yard and an unpaid up-front invoice is canceled. 409 once the can is dropped (book a pickup instead).
Permission
jobs.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
GET /organizations/{organizationId}/dumpsters/overview
Per size: total, available, reserved, out (on site or full), full, at the dump, out of service, coming back soon (pickup within 2 days, or full) and utilization %. Every can with where it is and its map location (job site or yard), the yards, and the 25 cans out longest (days out, days past the planned pickup). Read-only.
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
cans[].size
object
cans[].size.id
string
cans[].size.name
string
cans[].size.yards
integer
cans[].where
string
Where it is now: the job site's address, the yard or the dump.
GET /organizations/{organizationId}/dumpsters/availability
"Is a 20-yard free Tuesday to next Tuesday?" Per active size (or one sizeId): cans that can be rented, the most booked on any day of the range, how many are free for the whole range, and the price for the range (base plus extra days). Use before taking an order. Read-only.
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
sizeId
query
string
No
yardId
query
string
No
query
query
string
No
Free-text search over the list's names, numbers and contact details. Up to 200 characters.
limit
query
integer
No
1–200. Default 200.
offset
query
integer
No
Rows to skip; the answer's total counts every match. Default 0.
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
items[].size
object
items[].size.id
string
items[].size.name
string
items[].size.yards
integer
items[].where
string
Where it is now: the job site's address, the yard or the dump.
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
size
object
size.id
string
size.name
string
size.yards
integer
where
string
Where it is now: the job site's address, the yard or the dump.
latitude
number or null
longitude
number or null
rental
object or null
The rental it is out on or held for.
rental.id
string
rental.identifier
string
rental.customerName
string
rental.droppedOn
string or null
rental.expectedPickupDate
string
moves
array of object
moves[].fromStatus
enum or null
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
moves[].toStatus
enum
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
POST /organizations/{organizationId}/dumpsters/{dumpsterId}/status
A by-hand move with a note for the history: back IN_YARD (a yard, default its own) or OUT_OF_SERVICE from anywhere; ON_SITE ⇄ FULL (the customer called it full); AT_DUMP from a job site. Rental stops move cans by themselves; use this for corrections.
Permission
jobs.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
IN_YARD (free), RESERVED (held for a rental), ON_SITE (at a job site), FULL (on site, waiting for pickup), AT_DUMP (being emptied), OUT_OF_SERVICE (never offered). One of IN_YARD, RESERVED, ON_SITE, FULL, AT_DUMP, OUT_OF_SERVICE.
GET /organizations/{organizationId}/dumpster-sizes
Each size with its rental price: the base price, the days and tons it includes, the price per extra day and per extra ton, whether customers can order it online, and how many cans the fleet has. Read-only.
GET /organizations/{organizationId}/dumpster-yards
Where cans are kept: the business's warehouse locations (the same list as Inventory → Locations), with their map location and how many cans each has. Read-only.
POST /organizations/{organizationId}/dumpster-settings/trade-setup
Fills what is missing from the Dumpster rental trade setup: the standard sizes (10, 15, 20, 30, 40 yard) with sample prices marked to edit, a yard at the business address, the drop-off, swap, pickup and dump run services, the extra-charge items (swap fee, dry run, permit, fuel, mattress, tires, appliances …) and the settings pointed at them. Nothing already there is changed.
Permission
settings.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
GET /organizations/{organizationId}/dumpster-settings
The rental length new orders start with, the default yard, up-front and periodic billing, the pricebook items charged for swaps, dry runs, permits and fuel, the service type and the debris types. Read-only.