WM

WM Invoices & Balance API

Retrieve invoice history (invoice id, date, amount, payment information, remaining balance) and the current aging balance due on an account, broken out by Current, 30/60/90/120-day, and Future buckets, plus the last payment amount and date.

OpenAPI Specification

wm-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: WM Customer API
  description: >-
    Documented, partner/customer-gated REST API published by WM (formerly
    Waste Management, Inc.) at https://api.wm.com/. Exposes account-level
    service, billing, and support data - service and pickup information,
    live status/ETA, routing and hauling materials, pricing, invoices and
    balance, communication preferences, contacts, cases, tickets, and account
    activity notes. There is no self-serve signup: WM issues a ClientId and
    JSON Web Token (JWT) to approved commercial/enterprise customers and
    integration partners on request to apiaccess@wm.com. Endpoint paths,
    parameters, and response fields below are transcribed from WM's published
    API documentation; fields not disclosed in that documentation are left
    as an open JSON object rather than invented.
  version: '1.0'
  contact:
    name: WM API Access
    email: apiaccess@wm.com
    url: https://api.wm.com/
  license:
    name: Proprietary - partner/customer use per WM terms
servers:
  - url: https://api.wm.com/v1
    description: Production
  - url: https://apitest.wm.com/v1
    description: Test
security:
  - bearerAuth: []
tags:
  - name: Services
    description: Account services, schedule, status, and ETA.
  - name: Service Operations & Materials
    description: Routing and hauling material information.
  - name: Service Pricing
    description: Base rates and invoice fees.
  - name: Invoices & Balance
    description: Invoice history and account balance.
  - name: Profiles & Preferences
    description: Account profile settings and communication preferences.
  - name: Contacts
    description: Billing and service contacts on an account.
  - name: Cases & Tickets
    description: Service cases and pickup tickets.
  - name: Activities
    description: Notes, email, and issue activity on an account.
paths:
  /customers/{customerId}/services:
    get:
      operationId: listServices
      tags: [Services]
      summary: List services
      description: >-
        Retrieve detailed information on the services associated with an
        account, including service names, material streams, container
        volumes, and pricing structures, plus the status of services
        scheduled for today.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - name: line_of_business
          in: query
          required: false
          description: Filter by line of business.
          schema:
            type: string
            enum: [RESIDENTIAL, COMMERCIAL, ROLLOFF]
      responses:
        '200':
          description: Services for the account.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_tracking_id:
                    type: string
                  services:
                    type: array
                    items:
                      $ref: '#/components/schemas/Service'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/plan:
    get:
      operationId: getServicePlan
      tags: [Services]
      summary: List planned services
      description: Obtain service execution details for today's scheduled services.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Today's planned service execution details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/stats:
    get:
      operationId: getServiceStats
      tags: [Services]
      summary: List service statistics
      description: >-
        Access the status and details of completed services - whether a
        scheduled service has not yet occurred, completed successfully, or
        had a problem.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Completed-service status and details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/next-pickup:
    get:
      operationId: getNextPickup
      tags: [Services]
      summary: List next pickup
      description: View the next scheduled pickup date for the account's services.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Next scheduled pickup information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/{serviceId}/eta:
    get:
      operationId: getServiceEta
      tags: [Services]
      summary: Get service ETA
      description: Retrieve the estimated truck arrival time (ETA) for a service in progress today.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - name: serviceId
          in: path
          required: true
          description: Unique service identifier.
          schema:
            type: string
      responses:
        '200':
          description: Estimated arrival time for the service.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/operations:
    get:
      operationId: listServiceOperations
      tags: [Service Operations & Materials]
      summary: List service operations
      description: Obtain routing information for the account's services, including the day of week serviced.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Routing/operations information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/materials:
    get:
      operationId: listServiceMaterials
      tags: [Service Operations & Materials]
      summary: List service materials
      description: Access hauling material information for all of the account's services.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Hauling material information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/prices:
    get:
      operationId: listServicePrices
      tags: [Service Pricing]
      summary: List service prices
      description: Retrieve the base monthly rates for the account's services.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Service pricing information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/services/prices/invoice-fees:
    get:
      operationId: listInvoiceFees
      tags: [Service Pricing]
      summary: List invoice fees
      description: Retrieve invoice fee information associated with the account's services.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Invoice fee information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/invoices:
    get:
      operationId: listInvoices
      tags: [Invoices & Balance]
      summary: List invoices
      description: Retrieve invoice history for the account - invoice id, date, amount, payment information, and remaining balance.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Invoice history.
          content:
            application/json:
              schema:
                type: object
                properties:
                  currency:
                    type: string
                  invoices:
                    type: array
                    items:
                      $ref: '#/components/schemas/Invoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/invoices/{invoiceId}:
    get:
      operationId: getInvoice
      tags: [Invoices & Balance]
      summary: Get invoice details
      description: Retrieve details for a single invoice.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - name: invoiceId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Invoice detail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/balance:
    get:
      operationId: getBalance
      tags: [Invoices & Balance]
      summary: Get account balance
      description: >-
        Retrieve the balance due on the account, broken out by Current,
        30/60/90/120-day, and Future aging buckets, plus the total balance,
        last payment amount, and last payment date.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Account balance.
          content:
            application/json:
              schema:
                type: object
                properties:
                  currency:
                    type: string
                  last_payment_amount:
                    type: number
                  last_payment_date:
                    type: string
                    format: date
                  balances:
                    type: array
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          enum: [Current, 30Day, 60Day, 90Day, 120Day, Future, Total]
                        date:
                          type: string
                          format: date
                        amount:
                          type: number
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/profiles:
    get:
      operationId: getProfile
      tags: [Profiles & Preferences]
      summary: Get customer profile
      description: >-
        Retrieve paperless billing and automatic payment settings, and
        WM.com login status, established during account creation or updated
        through the WM portal.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Profile settings.
          content:
            application/json:
              schema:
                type: object
                properties:
                  profiles:
                    type: array
                    items:
                      $ref: '#/components/schemas/Profile'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/communication-preferences:
    get:
      operationId: getCommunicationPreferences
      tags: [Profiles & Preferences]
      summary: List communication preferences
      description: Retrieve all communication preferences set on the account.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Communication preferences.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: updateCommunicationPreferences
      tags: [Profiles & Preferences]
      summary: Update communication preferences
      description: Update one or more communication preferences on the account.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: Updated communication preferences.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /preferences/categories:
    get:
      operationId: listPreferenceCategories
      tags: [Profiles & Preferences]
      summary: List preference categories
      description: List the published communication preference categories available to set on an account.
      responses:
        '200':
          description: Preference categories.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/contacts:
    get:
      operationId: listContacts
      tags: [Contacts]
      summary: List contacts
      description: Retrieve service and billing address and contact information on file for the account.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Contact information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/contacts/billing:
    get:
      operationId: getBillingContact
      tags: [Contacts]
      summary: Show billing contact
      description: Retrieve the billing contact - name, work phone, mobile phone, fax, email, and address - on file for the account.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Billing contact.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: updateBillingContact
      tags: [Contacts]
      summary: Update billing contact
      description: Update the billing contact details on file for the account.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Contact'
      responses:
        '200':
          description: Updated billing contact.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/contacts/service:
    put:
      operationId: updateServiceContact
      tags: [Contacts]
      summary: Update service contact
      description: Update the service contact details on file for the account.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Contact'
      responses:
        '200':
          description: Updated service contact.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/cases:
    get:
      operationId: listCases
      tags: [Cases & Tickets]
      summary: List cases
      description: List service cases on the account - id, description, category, request date/time, and status.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Cases on the account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/cases/{caseId}:
    get:
      operationId: getCase
      tags: [Cases & Tickets]
      summary: Show case details
      description: Retrieve details for a single case.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - name: caseId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Case detail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/tickets:
    get:
      operationId: listTickets
      tags: [Cases & Tickets]
      summary: List tickets
      description: >-
        Retrieve a summary of tickets created on the account - such as
        missed-pickup or extra-pickup requests - within an optional date
        range.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/FromDate'
        - $ref: '#/components/parameters/ToDate'
      responses:
        '200':
          description: Tickets on the account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/tickets/{ticketId}:
    get:
      operationId: getTicket
      tags: [Cases & Tickets]
      summary: Show ticket details
      description: Retrieve details for a single ticket, including disposal tickets.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - name: ticketId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Ticket detail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/activities/notes:
    get:
      operationId: listNotes
      tags: [Activities]
      summary: List notes
      description: >-
        Retrieve special instructions on how to service the account, and
        notes about the account, created by support agents or during setup,
        within an optional date range.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/FromDate'
        - $ref: '#/components/parameters/ToDate'
      responses:
        '200':
          description: Account notes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_tracking_id:
                    type: string
                  activities:
                    type: array
                    items:
                      type: object
                      properties:
                        note_info:
                          type: object
                          properties:
                            comment:
                              type: string
                            created_date:
                              type: string
                              format: date-time
                        audit_info:
                          type: object
                          properties:
                            created_date:
                              type: string
                              format: date-time
                            created_by:
                              type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/activities/email:
    get:
      operationId: listEmailActivity
      tags: [Activities]
      summary: List emails
      description: >-
        Retrieve email communication sent from the WM portal - system
        generated or sent by a CSR agent - within an optional date range.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/FromDate'
        - $ref: '#/components/parameters/ToDate'
      responses:
        '200':
          description: Email activity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{customerId}/activities/issues:
    get:
      operationId: listIssues
      tags: [Activities]
      summary: List issues
      description: Retrieve requests/issues created against the account through the WM portal, within an optional date range.
      parameters:
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/FromDate'
        - $ref: '#/components/parameters/ToDate'
      responses:
        '200':
          description: Issue activity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericAccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        WM issues a JSON Web Token (JWT) and a ClientId to approved
        partners/customers. Send the token in the Authorization header and
        the ClientId in the ClientId header on every request.
  parameters:
    CustomerId:
      name: customerId
      in: path
      required: true
      description: Unique customer account identifier.
      schema:
        type: integer
    FromDate:
      name: fromDate
      in: query
      required: false
      description: Start date, yyyy-MM-dd.
      schema:
        type: string
        format: date
    ToDate:
      name: toDate
      in: query
      required: false
      description: End date, yyyy-MM-dd.
      schema:
        type: string
        format: date
  headers:
    RequestTrackingId:
      description: Unique identifier for the request, echoed back in the response.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing or invalid Authorization/ClientId.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
  schemas:
    GenericAccountResponse:
      type: object
      description: >-
        WM's published documentation does not disclose full response field
        detail for this resource; the response is a JSON object scoped to
        the requesting customer account.
      properties:
        request_tracking_id:
          type: string
      additionalProperties: true
    Service:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
        occurs:
          type: string
        taxable:
          type: boolean
        type_code:
          type: string
        enterprise_catalog:
          type: object
          properties:
            name:
              type: string
            description:
              type: string
            category:
              type: string
            subcategory:
              type: string
            line_of_business:
              type: string
        material:
          type: object
          properties:
            code:
              type: string
            name:
              type: string
            special_handling:
              type: boolean
            manifest:
              type: boolean
        equipment:
          type: object
          properties:
            name:
              type: string
            description:
              type: string
            volume:
              type: number
            unit_of_measure:
              type: string
            container_count:
              type: integer
        pricing:
          type: object
          properties:
            base_monthly_cost:
              type: number
            disposal_rate_type:
              type: string
            disposal_rate_amount:
              type: number
            currency_code:
              type: string
    Invoice:
      type: object
      properties:
        id:
          type: string
        date:
          type: string
          format: date
        amount:
          type: number
        payment_info:
          type: object
          additionalProperties: true
        balance_amount:
          type: number
    Profile:
      type: object
      properties:
        id:
          type: string
        paperless_invoice:
          type: boolean
        auto_pay:
          type: boolean
        logon_status:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
        last_login_date:
          type: string
          format: date-time
    Contact:
      type: object
      properties:
        name:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        work_phone:
          type: string
        mobile_phone:
          type: string
        fax:
          type: string
        email:
          type: string
        address:
          type: object
          additionalProperties: true