Waste Management Customer API

The Waste Management Customer API provides RESTful access to customer account data including balance, contract details, invoice history, service details, pickup schedules, and ETA information. Uses JWT bearer token authentication with ClientId and Request-Tracking-Id headers.

OpenAPI Specification

waste-management-customer-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Waste Management Customer API
  description: >-
    The Waste Management Customer API provides RESTful access to customer
    account information including balance due, contract details, invoice
    history, service details, and pick-up status. The API uses JWT bearer
    token authentication and supports JSON and XML response formats.
    Endpoints are organized under the customer resource and cover activities,
    balance, cases, contacts, invoices, preferences, profiles, services,
    and tickets.
  version: '1.0'
  contact:
    name: Waste Management Developer Support
    url: https://api.wm.com/
servers:
  - url: https://api.wm.com/v1
    description: Production
  - url: https://apitest.wm.com/v1
    description: Test
tags:
  - name: Customers
    description: Retrieve and manage customer account information.
  - name: Services
    description: Retrieve service details, schedules, materials, and ETAs.
  - name: Invoices
    description: Retrieve invoice summaries and details.
  - name: Contacts
    description: Manage billing and service contacts.
  - name: Cases
    description: Retrieve and manage customer service cases.
  - name: Tickets
    description: Retrieve disposal tickets and summaries.
  - name: Preferences
    description: Retrieve and update customer preference settings.
paths:
  /customers:
    get:
      operationId: getCustomerOverview
      summary: Get Customer Overview
      description: >-
        Retrieves customer account overview including balance due, contact
        and profile information, and services summary.
      tags:
        - Customers
      parameters:
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerOverview'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalError'
  /customers/{customerId}/services:
    get:
      operationId: listServices
      summary: List Services
      description: >-
        Retrieves detailed information on the services associated with
        the authenticated customer account, including service type, materials,
        equipment, and pricing.
      tags:
        - Services
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
        - name: line_of_business
          in: query
          description: Filter services by line of business.
          schema:
            type: string
            enum: [RESIDENTIAL, COMMERCIAL, ROLLOFF]
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /customers/{customerId}/services/plan:
    get:
      operationId: listPlannedServices
      summary: List Planned Services
      description: >-
        Retrieves the status of services occurring today for commercial
        or residential customers.
      tags:
        - Services
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/materials:
    get:
      operationId: listServiceMaterials
      summary: List Service Materials
      description: >-
        Retrieves hauling material information for all services associated
        with the customer account.
      tags:
        - Services
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/prices/invoice-fees:
    get:
      operationId: listServiceInvoiceFees
      summary: List Service Invoice Fees
      description: >-
        Retrieves all invoice fees including fuel, environmental, and
        regulatory cost recovery fees for services.
      tags:
        - Services
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/operations:
    get:
      operationId: listServiceOperations
      summary: List Service Operations
      description: >-
        Retrieves operational details for services associated with the
        customer account.
      tags:
        - Services
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/next-pickup:
    get:
      operationId: getNextPickup
      summary: Get Next Pickup
      description: >-
        Retrieves upcoming pickup schedule information for the customer's
        waste and recycling services.
      tags:
        - Services
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/{serviceId}/eta:
    get:
      operationId: getServiceEta
      summary: Get Service ETA
      description: >-
        Retrieves the estimated time of arrival (ETA) for a specific
        service, indicating when the service is expected or if it has
        already been completed.
      tags:
        - Services
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - name: serviceId
          in: path
          required: true
          description: The unique service identifier.
          schema:
            type: string
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /customers/{customerId}/invoices:
    get:
      operationId: listInvoices
      summary: List Invoices
      description: >-
        Retrieves a summary of all invoices sent, with optional date
        range filtering.
      tags:
        - Invoices
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
        - name: startDate
          in: query
          description: Filter invoices from this date.
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          description: Filter invoices up to this date.
          schema:
            type: string
            format: date
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/invoices/{invoiceId}:
    get:
      operationId: getInvoiceDetails
      summary: Get Invoice Details
      description: >-
        Retrieves all details of a specific invoice by invoice identifier.
      tags:
        - Invoices
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - name: invoiceId
          in: path
          required: true
          description: The unique invoice identifier.
          schema:
            type: string
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceDetail'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /customers/{customerId}/balance:
    get:
      operationId: getBalance
      summary: Get Balance
      description: >-
        Retrieves the current account balance due for the customer.
      tags:
        - Customers
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/contacts:
    get:
      operationId: listContacts
      summary: List Contacts
      description: >-
        Retrieves billing and service contacts associated with the customer account.
      tags:
        - Contacts
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
    patch:
      operationId: updateContacts
      summary: Update Contacts
      description: >-
        Updates billing and service contact information for the customer account.
      tags:
        - Contacts
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactUpdate'
      responses:
        '200':
          description: Success
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/cases:
    get:
      operationId: listCases
      summary: List Cases
      description: >-
        Retrieves customer service cases associated with the account.
      tags:
        - Cases
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/preferences:
    get:
      operationId: listPreferences
      summary: List Preferences
      description: >-
        Retrieves customer preference settings including paperless billing
        and automatic payment preferences.
      tags:
        - Preferences
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
    patch:
      operationId: updatePreferences
      summary: Update Preferences
      description: >-
        Updates customer preference settings such as paperless billing
        and automatic payment enrollment.
      tags:
        - Preferences
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PreferencesUpdate'
      responses:
        '200':
          description: Success
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/tickets:
    get:
      operationId: listTickets
      summary: List Tickets
      description: >-
        Retrieves support and disposal tickets associated with the customer account.
      tags:
        - Tickets
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/RequestTrackingId'
        - $ref: '#/components/parameters/ClientId'
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JSON Web Token (JWT) provided by WM.
  parameters:
    CustomerId:
      name: customerId
      in: path
      required: true
      description: The unique WM customer identifier.
      schema:
        type: string
    RequestTrackingId:
      name: Request-Tracking-Id
      in: header
      required: true
      description: A unique identifier for tracking each API request.
      schema:
        type: string
        format: uuid
    ClientId:
      name: ClientId
      in: header
      required: true
      description: Client identifier provided by Waste Management.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Unauthorized — invalid or missing JWT token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Bad request — validation error in request parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalError:
      description: Internal server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    CustomerOverview:
      type: object
      description: Overview of a WM customer account.
      properties:
        customerId:
          type: string
          description: Unique customer identifier.
        accountName:
          type: string
          description: Customer account name.
        balanceDue:
          type: number
          format: decimal
          description: Current balance due on the account.
        primaryContact:
          $ref: '#/components/schemas/Contact'
        serviceAddress:
          $ref: '#/components/schemas/Address'
    Contact:
      type: object
      description: Contact information for a customer.
      properties:
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
    Address:
      type: object
      description: Physical service or billing address.
      properties:
        street:
          type: string
        city:
          type: string
        state:
          type: string
        zip:
          type: string
        country:
          type: string
    ContactUpdate:
      type: object
      description: Fields to update on a customer contact record.
      properties:
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
    ServiceList:
      type: object
      description: List of services associated with a WM customer account.
      properties:
        services:
          type: array
          items:
            $ref: '#/components/schemas/Service'
    Service:
      type: object
      description: A WM service associated with a customer account.
      properties:
        serviceId:
          type: string
          description: Unique service identifier.
        status:
          type: string
          description: Current service status.
        occurrenceFrequency:
          type: string
          description: Service frequency (e.g., Weekly, Bi-Weekly).
        lineOfBusiness:
          type: string
          enum: [RESIDENTIAL, COMMERCIAL, ROLLOFF]
          description: Line of business for this service.
        serviceName:
          type: string
          description: Human-readable service name.
        material:
          $ref: '#/components/schemas/ServiceMaterial'
        equipment:
          $ref: '#/components/schemas/ServiceEquipment'
        pricing:
          $ref: '#/components/schemas/ServicePricing'
    ServiceMaterial:
      type: object
      description: Material information for a service.
      properties:
        materialCode:
          type: string
        materialName:
          type: string
        specialHandling:
          type: boolean
    ServiceEquipment:
      type: object
      description: Equipment details for a service.
      properties:
        equipmentName:
          type: string
        volume:
          type: number
        unitOfMeasure:
          type: string
        containerCount:
          type: integer
    ServicePricing:
      type: object
      description: Pricing information for a service.
      properties:
        monthlyBaseCost:
          type: number
          format: decimal
        currency:
          type: string
          default: USD
    InvoiceList:
      type: object
      description: List of invoices for a WM customer account.
      properties:
        invoices:
          type: array
          items:
            $ref: '#/components/schemas/InvoiceSummary'
    InvoiceSummary:
      type: object
      description: Summary information for a WM invoice.
      properties:
        invoiceId:
          type: string
          description: Unique invoice identifier.
        invoiceDate:
          type: string
          format: date
          description: Date the invoice was issued.
        dueDate:
          type: string
          format: date
          description: Payment due date.
        totalAmount:
          type: number
          format: decimal
          description: Total invoice amount.
        status:
          type: string
          description: Invoice status (e.g., Paid, Unpaid, Overdue).
    InvoiceDetail:
      allOf:
        - $ref: '#/components/schemas/InvoiceSummary'
        - type: object
          description: Detailed invoice information including line items.
          properties:
            lineItems:
              type: array
              items:
                $ref: '#/components/schemas/InvoiceLineItem'
            fees:
              type: array
              items:
                $ref: '#/components/schemas/InvoiceFee'
    InvoiceLineItem:
      type: object
      description: A line item on a WM invoice.
      properties:
        description:
          type: string
        amount:
          type: number
          format: decimal
        serviceId:
          type: string
    InvoiceFee:
      type: object
      description: A fee applied to a WM invoice (fuel, environmental, regulatory).
      properties:
        feeType:
          type: string
          description: Type of fee (e.g., Fuel Surcharge, Environmental Fee).
        amount:
          type: number
          format: decimal
    PreferencesUpdate:
      type: object
      description: Customer preference update payload.
      properties:
        paperlessBilling:
          type: boolean
          description: Opt into paperless billing.
        autoPayEnrolled:
          type: boolean
          description: Enroll in automatic payment processing.
    ErrorResponse:
      type: object
      description: Standard error response from the WM API.
      properties:
        code:
          type: integer
          description: HTTP status code.
        message:
          type: string
          description: Human-readable error message.
        errors:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
              description:
                type: string