M3ter StatementJob API

Endpoints for creating, retrieving, listing, and cancelling statement jobs. StatementJobs are tasks to asynchronously calculate and generate a bill statement. Bill statements are informative backing sheets to invoices. They provide a breakdown of the usage charges that appear on the bill, helping your end customers better understand those charges, and gain a clearer picture of their usage over the billing period.

Business capability
Invoicing & Statement Management BC-4250.30

Operations 5

POST /organizations/{orgId}/statementjobs/{id}/cancel Cancel StatementJob #
GET /organizations/{orgId}/statementjobs/{id} Get StatementJob #
POST /organizations/{orgId}/statementjobs/batch Create Batch StatementJobs #
GET /organizations/{orgId}/statementjobs List Statement Jobs #
POST /organizations/{orgId}/statementjobs Create a StatementJob #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/m3ter-statementjob-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

m3ter-statementjob-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: m3ter Statement Job API
  description: 'If you are using Postman, you can:

    - Use the **Download** button above to download the m3ter Open API spec JSON file and then import this file as the **m3ter API Collection** into your Workspace.'
  version: '1.0'
  x-logo:
    url: https://console.m3ter.com/m3ter-logo-black.svg
servers:
- url: https://api.m3ter.com
security:
- OAuth2: []
tags:
- name: StatementJob
  description: 'Endpoints for creating, retrieving, listing, and cancelling statement jobs.


    StatementJobs are tasks to asynchronously calculate and generate a bill statement.


    Bill statements are informative backing sheets to invoices. They provide a breakdown of the usage charges that appear on the bill, helping your end customers better understand those charges, and gain a clearer picture of their usage over the billing period.'
paths:
  /organizations/{orgId}/statementjobs/{id}/cancel:
    post:
      tags:
      - StatementJob
      summary: Cancel StatementJob
      description: 'Cancel the StatementJob with the given UUID.


        Use this endpoint to halt the execution of a specific StatementJob identified by its UUID. This operation may be useful if you need to stop a StatementJob due to unforeseen issues or changes.'
      operationId: CancelStatementJob
      parameters:
      - name: orgId
        in: path
        description: The unique identifier (UUID) of your Organization. The Organization represents your company as a direct customer of our service.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          deprecated: true
          x-stainless-deprecation-message: the org id should be set at the client level instead
      - name: id
        in: path
        description: The unique identifier (UUID) of the StatementJob to cancel.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        '200':
          description: Returns the cancelled StatementJob
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatementJobResponse'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /organizations/{orgId}/statementjobs/{id}:
    get:
      tags:
      - StatementJob
      summary: Get StatementJob
      description: 'Retrieves the details of a specific StatementJob using its UUID.


        Use this call to obtain the time-bound pre-signed download URL for the generated Bill Statement if the initial Create StatementJob returned a response showing the `statementJobStatus` not yet complete and as `PENDING` or `RUNNING`.


        **Note:** When you have submitted a StatementJob and a Bill Statement has been generated, you can also download the Statement directly from a Bill Details page in the Console. See Working with Bill Statements in our user Documentation.'
      operationId: GetStatementJob
      parameters:
      - name: orgId
        in: path
        description: The unique identifier (UUID) of your Organization. The Organization represents your company as a direct customer of our service.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          deprecated: true
          x-stainless-deprecation-message: the org id should be set at the client level instead
      - name: id
        in: path
        description: ''
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        '200':
          description: Returns the StatementJob
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatementJobResponse'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /organizations/{orgId}/statementjobs/batch:
    post:
      tags:
      - StatementJob
      summary: Create Batch StatementJobs
      description: 'Create a batch of StatementJobs for multiple bills.


        Initiate the creation of multiple StatementJobs asynchronously for the list of bills with the given UUIDs:

        * The default format for generating Bill Statements is in JSON format and according to the Bill Statement Definition you''ve specified at either Organization level or Account level.

        * If you also want to generate the Statements in CSV format, use the `includeCsvFormat` request body parameter.

        * The response body provides a time-bound pre-signed URL, which you can use to download the JSON format Statement.

        * When you have generated a Statement for a Bill, you can also obtain a time-bound pre-signed download URL using either the Retrieve Bill Statement in JSON Format and Retrieve Bill Statement in CSV Format calls found in the Bill section of this API Reference.


        **Notes:**

        * If the response to the Create StatementJob call shows the `statementJobStatus` as `PENDING` or `RUNNING`, you will not receive the pre-signed URL in the response. Wait a few minutes to allow the StatementJob to complete and then use the Get StatmentJob call in this section to obtain the pre-signed download URL for the generated Bill Statement.

        * When you have submitted a StatementJob and a Bill Statement has been generated, you can also download the Statement directly from a Bill Details page in the Console. See Working with Bill Statements in our user Documentation.'
      operationId: CreateStatementJobBatch
      parameters:
      - name: orgId
        in: path
        description: The unique identifier (UUID) of your Organization. The Organization represents your company as a direct customer of our service.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          deprecated: true
          x-stainless-deprecation-message: the org id should be set at the client level instead
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StatementsBatchJobRequest'
        required: true
      responses:
        '200':
          description: Returns a list of the created StatementJobs
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StatementJobResponse'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /organizations/{orgId}/statementjobs:
    get:
      tags:
      - StatementJob
      summary: List Statement Jobs
      description: 'Retrieve a list of StatementJobs.


        Retrieves a list of all StatementJobs for a specific Organization. You can filter the results based on:

        * StatementJob status.

        * Whether StatementJob is neither completed nor cancelled but remains active.

        * The ID of the Bill the StatementJob is associated with.


        You can also paginate the results for easier management.


        **WARNING!**

        * You can use only one of the valid Query parameters: `active`, `status`, or `billId` in any call. If you use more than one of these Query parameters in the same call, then a 400 Bad Request is returned with an error message.'
      operationId: ListStatementJobs
      parameters:
      - name: orgId
        in: path
        description: The unique identifier (UUID) of your Organization. The Organization represents your company as a direct customer of our service.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          deprecated: true
          x-stainless-deprecation-message: the org id should be set at the client level instead
      - name: pageSize
        in: query
        description: Specifies the maximum number of StatementJobs to retrieve per page.
        required: false
        allowEmptyValue: true
        style: form
        explode: true
        schema:
          maximum: 100
          minimum: 1
          type: integer
          format: int32
      - name: nextToken
        in: query
        description: The `nextToken` for multi-page retrievals. It is used to fetch the next page of StatementJobs in a paginated list.
        required: false
        allowEmptyValue: true
        style: form
        explode: true
        schema:
          type: string
      - name: active
        in: query
        description: 'Boolean filter on whether to only retrieve active *(i.e. not completed/cancelled)* StatementJobs.


          * TRUE - only active StatementJobs retrieved.

          * FALSE - all StatementJobs retrieved.

          '
        required: false
        allowEmptyValue: true
        style: form
        explode: true
        schema:
          type: string
      - name: status
        in: query
        description: 'Filter using the StatementJobs status. Possible values:


          * `PENDING`

          * `RUNNING`

          * `COMPLETE`

          * `CANCELLED`

          * `FAILED`'
        required: false
        allowEmptyValue: true
        style: form
        explode: true
        schema:
          type: string
      - name: billId
        in: query
        description: Filter Statement Jobs by billId
        required: false
        allowEmptyValue: true
        style: form
        explode: true
        schema:
          type: string
      responses:
        '200':
          description: Returns list of StatementJobs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedStatementJobResponseData'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
    post:
      tags:
      - StatementJob
      summary: Create a StatementJob
      description: 'This endpoint creates a StatementJob for a single bill within an Organization using the Bill UUID.


        The Bill Statement is generated asynchronously:

        * The default format for generating the Statement is in JSON format and according to the Bill Statement Definition you''ve specified at either Organization level or Account level.

        * If you also want to generate the Statement in CSV format, use the `includeCsvFormat` request body parameter.

        * The response body provides a time-bound pre-signed URL, which you can use to download the JSON format Statement.

        * When you have generated a Statement for a Bill, you can also obtain a time-bound pre-signed download URL using either the Retrieve Bill Statement in JSON Format and Retrieve Bill Statement in CSV Format calls found in the Bill section of this API Reference.


        **Notes:**

        * If the response to the Create StatementJob call shows the `statementJobStatus` as `PENDING` or `RUNNING`, you will not receive the pre-signed URL in the response. Wait a few minutes to allow the StatementJob to complete and then use the Get StatmentJob call in this section to obtain the pre-signed download URL for the generated Bill Statement.

        * When you have submitted a StatementJob and a Bill Statement has been generated, you can also download the Statement directly from a Bill Details page in the Console. See Working with Bill Statements in our user Documentation.'
      operationId: CreateStatementJob
      parameters:
      - name: orgId
        in: path
        description: The unique identifier (UUID) of your Organization. The Organization represents your company as a direct customer of our service.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          deprecated: true
          x-stainless-deprecation-message: the org id should be set at the client level instead
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StatementJobRequest'
        required: true
      responses:
        '200':
          description: Returns the created StatementJob
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatementJobResponse'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
components:
  schemas:
    StatementJobFilters:
      type: object
      properties:
        meterIds:
          maxItems: 10
          type: array
          description: Include usage line items whose meterId matches one of these values.
          items:
            type: string
      description: ''
    AbstractRequest:
      type: object
      properties:
        version:
          type: integer
          description: 'The version number of the entity:

            - **Create entity:** Not valid for initial insertion of new entity - *do not use for Create*. On initial Create, version is set at 1 and listed in the response.

            - **Update Entity:**  On Update, version is required and must match the existing version because a check is performed to ensure sequential versioning is preserved. Version is incremented by 1 and listed in the response.'
          format: int64
          x-stainless-terraform-configurability: computed
          x-stainless-terraform-always-send: true
      description: ''
    StatementsBatchJobRequest:
      type: object
      description: ''
      allOf:
      - $ref: '#/components/schemas/AbstractRequest'
      - required:
        - billIds
        properties:
          billIds:
            maxItems: 10
            minItems: 1
            type: array
            description: The list of unique identifiers (UUIDs) of the bills associated with the StatementJob.
            items:
              type: string
          includeCsvFormat:
            type: boolean
            description: 'A Boolean value indicating whether the generated statement includes a CSV format.


              * TRUE - includes the statement in CSV format.

              * FALSE - no CSV format statement.'
          filters:
            description: ''
            allOf:
            - $ref: '#/components/schemas/StatementJobFilters'
            - description: Optional filters to generate a statement for specific usage only.
    PaginatedStatementJobResponseData:
      type: object
      properties:
        data:
          type: array
          description: ''
          items:
            $ref: '#/components/schemas/StatementJobResponse'
        nextToken:
          type: string
          description: ''
      description: ''
    StatementJobStatus:
      type: string
      description: The current status of the StatementJob. The status helps track the progress and outcome of a StatementJob.
      enum:
      - PENDING
      - RUNNING
      - COMPLETE
      - CANCELLED
      - FAILED
    StatementJobResponse:
      type: object
      description: ''
      allOf:
      - $ref: '#/components/schemas/AbstractResponse'
      - properties:
          statementJobStatus:
            description: The current status of the StatementJob. The status helps track the progress and outcome of a StatementJob.
            $ref: '#/components/schemas/StatementJobStatus'
          billId:
            type: string
            description: The unique identifier (UUID) of the bill associated with the StatementJob.
          orgId:
            type: string
            description: The unique identifier (UUID) of your Organization. The Organization represents your company as a direct customer of our service.
          includeCsvFormat:
            type: boolean
            description: 'A Boolean value indicating whether the generated statement includes a CSV format.


              * TRUE - includes the statement in CSV format.

              * FALSE - no CSV format statement.'
          filters:
            description: ''
            allOf:
            - $ref: '#/components/schemas/StatementJobFilters'
            - description: Optional filters to generate a statement for specific usage only.
          presignedJsonStatementUrl:
            type: string
            description: The URL to access the generated statement in JSON format. This URL is temporary and has a limited lifetime.
          jsonStatementStatus:
            description: ''
            $ref: '#/components/schemas/StatementStatus'
          presignedCsvStatementUrl:
            type: string
            description: ''
          csvStatementStatus:
            description: ''
            $ref: '#/components/schemas/StatementStatus'
          dtCreated:
            type: string
            description: The date and time *(in ISO-8601 format)* when the StatementJob was created.
            format: date-time
            x-stainless-skip:
            - terraform
          dtLastModified:
            type: string
            description: The date and time *(in ISO-8601 format)* when the StatementJob was last modified.
            format: date-time
            x-stainless-skip:
            - terraform
          createdBy:
            type: string
            description: The unique identifier (UUID) of the user who created this StatementJob.
            x-stainless-skip:
            - terraform
          lastModifiedBy:
            type: string
            description: The unique identifier (UUID) of the user who last modified this StatementJob.
            x-stainless-skip:
            - terraform
    AbstractResponse:
      required:
      - id
      type: object
      properties:
        id:
          type: string
          description: 'The UUID of the entity. '
        version:
          type: integer
          description: 'The version number:

            - **Create:** On initial Create to insert a new entity, the version is set at 1 in the response.

            - **Update:** On successful Update, the version is incremented by 1 in the response.'
          format: int64
          x-stainless-terraform-configurability: computed
          x-stainless-terraform-always-send: true
      description: ''
    StatementJobRequest:
      type: object
      description: ''
      allOf:
      - $ref: '#/components/schemas/AbstractRequest'
      - required:
        - billId
        properties:
          billId:
            minLength: 1
            type: string
            description: The unique identifier (UUID) of the bill associated with the StatementJob.
          includeCsvFormat:
            type: boolean
            description: 'A Boolean value indicating whether the generated statement includes a CSV format.


              * TRUE - includes the statement in CSV format.

              * FALSE - no CSV format statement.'
          filters:
            description: ''
            allOf:
            - $ref: '#/components/schemas/StatementJobFilters'
            - description: Optional filters to generate a statement for specific usage only.
    StatementStatus:
      type: string
      description: ''
      enum:
      - LATEST
      - STALE
      - INVALIDATED
  responses:
    Error:
      description: Error message
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
  securitySchemes:
    OAuth2:
      type: oauth2
      description: "m3ter supports machine to machine authentication using the `clientCredentials` OAuth2 flow.\n\nThe `authorizationCode` flow controls access for human users via the m3ter Console application. \n"
      flows:
        clientCredentials:
          tokenUrl: /oauth/token
          scopes:
            m3ter-resources/m3ter-scope: m3ter resources
            measurements:upload: Upload measurements
            measurements:fileUpload: Upload file
            measurements:retrieve: Retrieve measurements
        authorizationCode:
          authorizationUrl: https://m3ter.auth.us-east-1.amazoncognito.com/oauth2/authorize
          tokenUrl: https://m3ter.auth.us-east-1.amazoncognito.com/oauth2/token
          scopes:
            m3ter-resources/m3ter-scope: m3ter resources
            openid: OpenID
            email: email
            measurements:upload: Upload measurements
            measurements:fileUpload: Upload file
            measurements:retrieve: Retrieve measurements