{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "meshMetering API documentation",
    "description" : "The metering API gives you the costs and usage that meshStack meters. Read meshChargebacks for the costs\nthat meshStack charges back to each project per billing period, and meshTenantUsageReports for the usage\nand costs of each tenant per period. Send meshResourceUsageReports to add cost data from other systems;\nmeshStack includes them in the tenant usage reports.\n\nLike the meshObject API, it versions each endpoint through the media types in the `Accept` and\n`Content-Type` headers. It takes Basic authentication with an API user. See the\n[API introduction](https://docs.meshcloud.io/api/introduction) to get started.",
    "version" : "1.0.0"
  },
  "servers" : [ {
    "url" : "{endpoint}",
    "variables" : {
      "endpoint" : {
        "description" : "The URL of your meshStack API.",
        "default" : "https://example.meshstack.io"
      }
    }
  } ],
  "security" : [ {
    "basicAuth" : [ ]
  } ],
  "tags" : [ {
    "name" : "Chargebacks"
  }, {
    "name" : "Resource Usage Reports"
  }, {
    "name" : "Tenant Usage Reports"
  }, {
    "name" : "Roots"
  } ],
  "paths" : {
    "/api" : {
      "get" : {
        "tags" : [ "Roots" ],
        "summary" : "API Root",
        "description" : "Access the root endpoint of the metering API to discover the available metering resources.",
        "operationId" : "apiGet",
        "responses" : {
          "200" : {
            "description" : "The links to the available metering resources",
            "content" : {
              "application/vnd.meshcloud.api.v1.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiRoot"
                },
                "example" : {
                  "_links" : {
                    "meshobjects" : {
                      "href" : "https://example.meshstack.io/api/meshobjects"
                    },
                    "self" : {
                      "href" : "https://example.meshstack.io/api"
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          }
        },
        "x-position" : 6
      }
    },
    "/api/meshobjects" : {
      "get" : {
        "tags" : [ "Roots" ],
        "summary" : "Get meshObjects root",
        "description" : "Access the root endpoint of the metering meshObjects API to discover the available metering meshObject types.",
        "operationId" : "apiMeshobjectsGet",
        "responses" : {
          "200" : {
            "description" : "The links to the available metering meshObject types",
            "content" : {
              "application/vnd.meshcloud.api.meshobjects.v2.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiRoot"
                },
                "example" : {
                  "_links" : {
                    "meshchargebacks" : {
                      "href" : "https://example.meshstack.io/api/meshobjects/meshchargebacks{?workspaceIdentifier,projectIdentifier,period,finalized,finalizedSince,cancelledSince}",
                      "templated" : true
                    },
                    "meshtenantusagereports" : {
                      "href" : "https://example.meshstack.io/api/meshobjects/meshtenantusagereports{?ownedByWorkspace,ownedByProject,isManaged,platform,platformType,platformTenantId,period,reportCategory,paymentMethodIdentifier,meshTenantId,finalizedAfter,cancelledAfter,status,showCancelled}",
                      "templated" : true
                    },
                    "self" : {
                      "href" : "https://example.meshstack.io/api/meshobjects"
                    }
                  }
                }
              },
              "application/vnd.meshcloud.api.meshobjects.v1.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiRoot"
                },
                "example" : {
                  "_links" : {
                    "meshchargebacks" : {
                      "href" : "https://example.meshstack.io/api/meshobjects/meshchargebacks{?workspaceIdentifier,projectIdentifier,period,finalized,finalizedSince,cancelledSince}",
                      "templated" : true
                    },
                    "meshtenantusagereports" : {
                      "href" : "https://example.meshstack.io/api/meshobjects/meshtenantusagereports{?ownedByWorkspace,ownedByProject,isManaged,platform,platformType,platformTenantId,period,reportCategory,paymentMethodIdentifier,meshTenantId,finalizedAfter,cancelledAfter,status,showCancelled}",
                      "templated" : true
                    },
                    "self" : {
                      "href" : "https://example.meshstack.io/api/meshobjects"
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          }
        },
        "x-position" : 7
      }
    },
    "/api/meshobjects/meshchargebacks" : {
      "get" : {
        "tags" : [ "Chargebacks" ],
        "summary" : "List chargebacks (deprecated)",
        "description" : "List all meshChargebacks with optional filtering by workspace, project, and billing period.\n\n**Note**: If no request parameters for filtering are specified, all meshChargebacks are returned independently of\nthese parameters. By default, meshChargebacks are sorted descending by period.\n\n**Info**: The meshTenantUsageReport endpoints are the preferred endpoints to get cost data from meshStack. The\nmeshTenantUsageReport endpoints provide more detailed information and more filter options than the chargeback\nstatements. They contain basically the same information as a chargeback, but only per tenant, not per project.\n\nFor customers who export chargeback statements on a monthly basis, the following recommendation applies:\nchargeback statements of the previous month should be processed no earlier than one day after the configured\nfinalization date, at 7 a.m. (German local time). By default, chargeback statements are finalized at the 6th of a\nmonth, therefore, they can be processed starting at the 7th of a month at 7 a.m. If you are unsure about the\nconfiguration of the finalization day of chargebacks in your meshStack, please contact our support team.",
        "operationId" : "meshChargebackList",
        "parameters" : [ {
          "$ref" : "#/components/parameters/page"
        }, {
          "$ref" : "#/components/parameters/size"
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "**v1:** Sort order as `<key>,asc` or `<key>,desc`, ascending if the direction is left out. Repeat the parameter to sort by several keys. Sortable keys: `customerIdentifier`, `projectIdentifier`, `period`, `partnerIdentifier`. Without `sort`, the order is `period,desc`.\n\n**v2:** Sort order as `<key>,asc` or `<key>,desc`, ascending if the direction is left out. Repeat the parameter to sort by several keys. Sortable keys: `workspaceIdentifier`, `projectIdentifier`, `period`, `partnerIdentifier`. Without `sort`, the order is `period,desc`.\n\n**v3:** Sort order as `<key>,asc` or `<key>,desc`, ascending if the direction is left out. Repeat the parameter to sort by several keys. Sortable keys: `workspaceIdentifier`, `projectIdentifier`, `period`, `partnerIdentifier`. Without `sort`, the order is `period,desc`.",
          "required" : false,
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "customerIdentifier", "customerIdentifier,asc", "customerIdentifier,desc", "projectIdentifier", "projectIdentifier,asc", "projectIdentifier,desc", "period", "period,asc", "period,desc", "partnerIdentifier", "partnerIdentifier,asc", "partnerIdentifier,desc", "workspaceIdentifier", "workspaceIdentifier,asc", "workspaceIdentifier,desc" ]
            }
          }
        }, {
          "name" : "customerIdentifier",
          "in" : "query",
          "description" : "**v1:** Filter for meshChargebacks that belong to the meshWorkspace with given identifier.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "projectIdentifier",
          "in" : "query",
          "description" : "Filter for meshChargebacks that belong to the meshProject with given identifier.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "period",
          "in" : "query",
          "description" : "Filter for meshChargebacks that belong to the provided period, e.g. '2022-01-01Z'.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "finalized",
          "in" : "query",
          "description" : "Filter for finalized or preview meshChargebacks. Provide 'true' to get finalized meshChargebacks or provide\n'false' to get preview meshChargebacks.",
          "required" : false,
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "finalizedSince",
          "in" : "query",
          "description" : "Filter for meshChargebacks finalized at or after this timestamp.",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/string_date-time"
          }
        }, {
          "name" : "cancelledSince",
          "in" : "query",
          "description" : "Filter for meshChargebacks cancelled at or after this timestamp. Without it, cancelled\nmeshChargebacks are left out.",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/string_date-time"
          }
        }, {
          "name" : "workspaceIdentifier",
          "in" : "query",
          "description" : "**v2:** Filter for meshChargebacks that belong to the meshWorkspace with given identifier.\n\n**v3:** Filter for meshChargebacks that belong to the meshWorkspace with given identifier.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The page of chargebacks",
            "content" : {
              "application/vnd.meshcloud.api.meshchargeback.v3.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalPageMeshChargeback"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshChargeback.v3",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
                }
              },
              "application/vnd.meshcloud.api.meshchargeback.v2.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalPageMeshChargeback"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshChargeback.v2",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
                }
              },
              "application/vnd.meshcloud.api.meshchargeback.v1.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalPageMeshChargeback"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshChargeback.v1",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          }
        },
        "deprecated" : true,
        "x-position" : 0
      }
    },
    "/api/meshobjects/meshchargebacks/{chargebackPeriod}/{chargebackScope}" : {
      "get" : {
        "tags" : [ "Chargebacks" ],
        "summary" : "Get chargeback by period and scope (deprecated)",
        "description" : "Retrieve detailed information about a specific meshChargeback including line items and cost breakdown.",
        "operationId" : "meshChargebackGetByPeriodAndScope",
        "parameters" : [ {
          "name" : "chargebackPeriod",
          "in" : "path",
          "description" : "The period of the chargeback in YYYY-MM-DDZ format (e.g. '2025-02-01Z').",
          "required" : true,
          "schema" : {
            "pattern" : ".+",
            "type" : "string"
          }
        }, {
          "name" : "chargebackScope",
          "in" : "path",
          "description" : "The 'scope' consisting of partner identifier, workspace identifier and project identifier separated by ':' (e.g.\n'testPartner:testWorkspace:testProject').",
          "required" : true,
          "schema" : {
            "pattern" : ".+",
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The chargeback",
            "content" : {
              "application/vnd.meshcloud.api.meshchargeback.v3.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshChargeback"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshChargeback.v3",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
                }
              },
              "application/vnd.meshcloud.api.meshchargeback.v2.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshChargeback"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshChargeback.v2",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
                }
              },
              "application/vnd.meshcloud.api.meshchargeback.v1.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshChargeback"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshChargeback.v1",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          }
        },
        "deprecated" : true,
        "x-position" : 1
      }
    },
    "/api/meshobjects/meshresourceusagereports/{resourceUsageReportPlatformTenantId}/{resourceUsageReportPeriod}" : {
      "put" : {
        "tags" : [ "Resource Usage Reports" ],
        "summary" : "Import Resource Usage Report",
        "description" : "Use this endpoint to provide cost data from external systems to meshStack. A meshResourceUsageReport will be\npicked up by the billing system of meshStack and subsequently included into regular meshTenantUsageReports.",
        "operationId" : "meshResourceUsageReportPutByPlatformTenantIdAndPeriod",
        "parameters" : [ {
          "name" : "Content-Type",
          "in" : "header",
          "description" : "meshObject Import is versioned and `application/vnd.meshcloud.api.meshobjects.v1+yaml` or\n`application/vnd.meshcloud.api.meshobjects.v1+json` can be used as a `Content-Type`.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "resourceUsageReportPlatformTenantId",
          "in" : "path",
          "description" : "The Platform Tenant ID of the tenant causing the costs.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "resourceUsageReportPeriod",
          "in" : "path",
          "description" : "The month during which the costs have occurred, e.g. 2023-05-01Z for May 2023.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/vnd.meshcloud.api.meshobjects.v1+json" : {
              "schema" : {
                "$ref" : "#/components/schemas/MeshResourceUsageReport"
              }
            },
            "application/vnd.meshcloud.api.meshobjects.v1+yaml" : {
              "schema" : {
                "$ref" : "#/components/schemas/MeshResourceUsageReport"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "The meshResourceUsageReport was imported. meshObject is always meshResourceUsageReport and status is SUCCESS.",
            "content" : {
              "application/vnd.meshcloud.api.meshobjects.v1+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeshObjectImportResult"
                }
              }
            }
          },
          "500" : {
            "description" : "The import failed. status is FAILED and resultCode is SERVER_ERROR, the only possible error code at the moment.",
            "content" : {
              "application/vnd.meshcloud.api.meshobjects.v1+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeshObjectImportResult"
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          },
          "415" : {
            "$ref" : "#/components/responses/UnsupportedMediaType"
          }
        },
        "x-position" : 2
      }
    },
    "/api/meshobjects/meshtenantusagereports" : {
      "get" : {
        "tags" : [ "Tenant Usage Reports" ],
        "summary" : "List tenant usage reports (deprecated)",
        "description" : "List all meshTenantUsageReports with optional filtering by workspace, project, and time period.\n\n**Note**: If no request parameters for filtering are specified, all meshTenantUsageReports, except for cancelled\nones, are returned. A meshTenantUsageReport gets cancelled, if any changes occur after finalization of it. A new\nmeshTenantUsageReport with an incremented version gets created in case of such an update. So the old one is\navailable as cancelled, and the new as finalized. By default, meshTenantUsageReports are sorted descending by\nperiod.\n\nA meshTenantUsageReport contains all cost and payment information as well as tags for one tenant in one period\n(month). Via the API, you receive more detailed information than via the UI. Besides tags and payment information,\nyou also get the seller information separated via line items in the meshTenantUsageReport.",
        "operationId" : "meshTenantUsageReportList",
        "parameters" : [ {
          "$ref" : "#/components/parameters/page"
        }, {
          "$ref" : "#/components/parameters/size"
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "**v2:** Sort order as `<key>,asc` or `<key>,desc`, ascending if the direction is left out. Repeat the parameter to sort by several keys. Sortable keys: `period`, `platformFullIdentifier`, `workspaceIdentifier`, `projectIdentifier`, `reportCategory`, `paymentIdentifier`, `customerIdentifier`. Without `sort`, the order is `period,desc`.\n\n**v3:** Sort order as `<key>,asc` or `<key>,desc`, ascending if the direction is left out. Repeat the parameter to sort by several keys. Sortable keys: `period`, `platform`, `platformType`, `platformTenantId`, `ownedByWorkspace`, `ownedByProject`, `total`, `generatedAt`, `reportCategory`, `finalizedAt`, `cancelledAt`, `paymentMethodIdentifier`. Without `sort`, the order is `period,desc`.",
          "required" : false,
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "period", "period,asc", "period,desc", "platformFullIdentifier", "platformFullIdentifier,asc", "platformFullIdentifier,desc", "workspaceIdentifier", "workspaceIdentifier,asc", "workspaceIdentifier,desc", "projectIdentifier", "projectIdentifier,asc", "projectIdentifier,desc", "reportCategory", "reportCategory,asc", "reportCategory,desc", "paymentIdentifier", "paymentIdentifier,asc", "paymentIdentifier,desc", "customerIdentifier", "customerIdentifier,asc", "customerIdentifier,desc", "platform", "platform,asc", "platform,desc", "platformType", "platformType,asc", "platformType,desc", "platformTenantId", "platformTenantId,asc", "platformTenantId,desc", "ownedByWorkspace", "ownedByWorkspace,asc", "ownedByWorkspace,desc", "ownedByProject", "ownedByProject,asc", "ownedByProject,desc", "total", "total,asc", "total,desc", "generatedAt", "generatedAt,asc", "generatedAt,desc", "finalizedAt", "finalizedAt,asc", "finalizedAt,desc", "cancelledAt", "cancelledAt,asc", "cancelledAt,desc", "paymentMethodIdentifier", "paymentMethodIdentifier,asc", "paymentMethodIdentifier,desc" ]
            }
          }
        }, {
          "name" : "workspaceIdentifier",
          "in" : "query",
          "description" : "**v2:** Filter for meshTenantUsageReports that belong to the meshWorkspace with given identifier.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "projectIdentifier",
          "in" : "query",
          "description" : "**v2:** Filter for meshTenantUsageReports that belong to the meshProject with given identifier.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "platformFullIdentifier",
          "in" : "query",
          "description" : "**v2:** Filter for meshTenantUsageReports that belong to the provided platform in the format\n`<platformIdentifier>.<locationIdentifier>`.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "period",
          "in" : "query",
          "description" : "**v2:** Filter for meshTenantUsageReports that belong to the provided period in format YYYY-MM-DDZ, e.g.\n`2025-01-01Z`.\n\n**v3:** Filter for meshTenantUsageReports that belong to the provided period in format YYYY-MM, e.g. `2025-01`.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "reportCategory",
          "in" : "query",
          "description" : "Filter for meshTenantUsageReports that belong to the provided reportCategory.",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/ReportCategory"
          }
        }, {
          "name" : "paymentIdentifier",
          "in" : "query",
          "description" : "**v2:** Filter for meshTenantUsageReports that have the meshPaymentMethod with given identifier assigned.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ownedByWorkspace",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that belong to the meshWorkspace with given identifier.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ownedByProject",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that belong to the meshProject with given identifier. Make sure to\nalso filter for ownedByWorkspace, as a project identifier is only unique inside a workspace!",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "isManaged",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that are either managed or not managed by meshStack! meshStack\ncollects all cost information from the cloud platform for all tenants. If a tenant is not managed by meshStack,\nit is an unmanaged tenant. If you provide `true` for this filter parameter, you only get meshTenantUsageReports\nfor tenants that are managed by meshStack. If you provide `false`, you only get meshTenantUsageReports of\nunmanaged tenants.",
          "required" : false,
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "platform",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that belong to the provided platform in the format\n`<platformIdentifier>.<locationIdentifier>`.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "platformType",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that belong to the provided platform type.",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/PlatformType"
          }
        }, {
          "name" : "platformTenantId",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that belong to a certain tenant that can be identified via platform\ntenant ID.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "paymentMethodIdentifier",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that have the meshPaymentMethod with given identifier assigned. Use an\nempty or blank value to filter for meshTenantUsageReports without an assigned meshPaymentMethod.",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "meshTenantId",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports of the meshTenant with the given UUID.",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/string_uuid"
          }
        }, {
          "name" : "finalizedAfter",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that were finalized after the provided date (e.g.\n`2025-06-01T00:00:00Z`). You can use this filter to retrieve all meshTenantUsageReports finalized after your\nlast request for processing them in your billing system. You can e.g. provide the latest finalizationDate you\nreceived in your last request. You may then receive the newly finalized usage reports of the new period and\nprobably updated usage reports of previous periods. This filter parameter is exclusive, meaning it will only\nmatch reports that were finalized after the given date.",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/string_date-time"
          }
        }, {
          "name" : "cancelledAfter",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that were cancelled after the provided date (e.g.\n`2025-06-01T00:00:00Z`). When you apply this filter, you only get cancelled usage reports, meaning outdated data\nthat was already updated. This filter parameter is exclusive, meaning it will only match reports that were\ncancelled after the given date.",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/string_date-time"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "**v3:** Filter for meshTenantUsageReports that are in the given state. You can e.g. use this filter to exclude\nmeshTenantUsageReports that have never been finalized yet (e.g. preview usage reports of the current month) or\nto get all usage reports that were UPDATED at least once. You can provide this parameter multiple times, e.g. to\nget only FINALIZED and UPDATED usage reports: `?status=FINALIZED&status=UPDATED`.",
          "required" : false,
          "schema" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/MeshTenantUsageReportStatus"
            }
          }
        }, {
          "name" : "showCancelled",
          "in" : "query",
          "description" : "**v3:** By default, cancelled meshTenantUsageReports are not included in the response. If you want to include\nthem, you can set this parameter to `true`. This is not required when you already filter for cancelledAfter.",
          "required" : false,
          "schema" : {
            "type" : "boolean"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The page of tenant usage reports",
            "content" : {
              "application/vnd.meshcloud.api.meshtenantusagereport.v3.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalPageMeshTenantUsageReportV3"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshTenantUsageReport.v3",
                  "state" : "Deprecated",
                  "retiredAfter" : "2026-10-01",
                  "notice" : "Use the same path of the meshObject API at the standard meshStack API base URL."
                }
              },
              "application/vnd.meshcloud.api.meshtenantusagereport.v2.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalPageMeshTenantUsageReport"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshTenantUsageReport.v2",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "v3 aggregates line items by seller product group and supports report versioning and cancellation.",
                  "latest" : "meshTenantUsageReport.v3"
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          }
        },
        "deprecated" : true,
        "x-position" : 3
      }
    },
    "/api/meshobjects/meshtenantusagereports/{tenantUsageReport}" : {
      "get" : {
        "tags" : [ "Tenant Usage Reports" ],
        "summary" : "Get tenant usage report (deprecated)",
        "description" : "Retrieve detailed information about a specific meshTenantUsageReport including line items and payment details.",
        "operationId" : "meshTenantUsageReportGet",
        "parameters" : [ {
          "name" : "tenantUsageReport",
          "in" : "path",
          "description" : "The UUID of the meshTenantUsageReport.",
          "required" : true,
          "schema" : {
            "pattern" : ".+",
            "type" : "string",
            "format" : "uuid"
          },
          "x-meshstack-path-key" : "metadata.uuid"
        } ],
        "responses" : {
          "200" : {
            "description" : "The tenant usage report",
            "content" : {
              "application/vnd.meshcloud.api.meshtenantusagereport.v3.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshTenantUsageReportV3"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshTenantUsageReport.v3",
                  "state" : "Deprecated",
                  "retiredAfter" : "2026-10-01",
                  "notice" : "Use the same path of the meshObject API at the standard meshStack API base URL."
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          }
        },
        "deprecated" : true,
        "x-position" : 4
      }
    },
    "/api/meshobjects/meshtenantusagereports/{tenantUsageReportTenant}/{tenantUsageReportPeriod}" : {
      "get" : {
        "tags" : [ "Tenant Usage Reports" ],
        "summary" : "Get tenant usage report by tenant and period (deprecated)",
        "description" : "Retrieve a specific meshTenantUsageReport in version v2 by its tenant and period. The self link of a v2\nmeshTenantUsageReport points here. Only the report of the `BILLING` report category is returned.",
        "operationId" : "meshTenantUsageReportGetByTenantAndPeriod",
        "parameters" : [ {
          "name" : "tenantUsageReportTenant",
          "in" : "path",
          "description" : "The tenant of the meshTenantUsageReport as `<platformFullIdentifier>:<platformTenantId>` (e.g.\n`aws.eu-central-1:123456789012`).",
          "required" : true,
          "schema" : {
            "pattern" : ".+",
            "type" : "string"
          }
        }, {
          "name" : "tenantUsageReportPeriod",
          "in" : "path",
          "description" : "The period of the meshTenantUsageReport in YYYY-MM-DDZ format (e.g. '2025-02-01Z').",
          "required" : true,
          "schema" : {
            "pattern" : ".+",
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The tenant usage report",
            "content" : {
              "application/vnd.meshcloud.api.meshtenantusagereport.v2.hal+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshTenantUsageReport"
                },
                "x-meshstack-lifecycle" : {
                  "meshObject" : "meshTenantUsageReport.v2",
                  "state" : "Deprecated",
                  "retiredAfter" : "2025-10-01",
                  "notice" : "v3 aggregates line items by seller product group and supports report versioning and cancellation.",
                  "latest" : "meshTenantUsageReport.v3"
                }
              }
            }
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "406" : {
            "$ref" : "#/components/responses/NotAcceptable"
          }
        },
        "deprecated" : true,
        "x-position" : 5
      }
    }
  },
  "components" : {
    "parameters" : {
      "page" : {
        "name" : "page",
        "in" : "query",
        "description" : "Zero-based index of the page to return.",
        "required" : false,
        "schema" : {
          "minimum" : 0,
          "type" : "integer",
          "format" : "int32",
          "default" : 0
        }
      },
      "size" : {
        "name" : "size",
        "in" : "query",
        "description" : "Number of elements per page. A larger size is reduced to the maximum.",
        "required" : false,
        "schema" : {
          "maximum" : 350,
          "minimum" : 1,
          "type" : "integer",
          "format" : "int32",
          "default" : 50
        }
      }
    },
    "responses" : {
      "Unauthorized" : {
        "description" : "The request has no valid authentication.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CustomErrorMessage"
            }
          }
        }
      },
      "Forbidden" : {
        "description" : "The authenticated user or API key lacks the permission for this request.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CustomErrorMessage"
            }
          }
        }
      },
      "NotAcceptable" : {
        "description" : "The `Accept` header names no media type of this operation, or a version that is no longer supported.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CustomErrorMessage"
            }
          }
        }
      },
      "BadRequest" : {
        "description" : "The request is invalid. The message names the invalid part.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CustomErrorMessage"
            }
          }
        }
      },
      "NotFound" : {
        "description" : "The resource does not exist, or you may not see it.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CustomErrorMessage"
            }
          }
        }
      },
      "UnsupportedMediaType" : {
        "description" : "The `Content-Type` header names no media type that this operation accepts.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CustomErrorMessage"
            }
          }
        }
      }
    },
    "schemas" : {
      "HalLink" : {
        "required" : [ "href" ],
        "type" : "object",
        "properties" : {
          "href" : {
            "type" : "string"
          },
          "templated" : {
            "type" : "boolean"
          },
          "type" : {
            "type" : "string"
          },
          "deprecation" : {
            "type" : "string"
          },
          "profile" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "title" : {
            "type" : "string"
          },
          "hreflang" : {
            "type" : "string"
          }
        }
      },
      "HalLinks" : {
        "type" : "object",
        "additionalProperties" : {
          "oneOf" : [ {
            "$ref" : "#/components/schemas/HalLink"
          }, {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/HalLink"
            }
          } ]
        },
        "readOnly" : true
      },
      "ApiRoot" : {
        "required" : [ "_links" ],
        "type" : "object",
        "properties" : {
          "_links" : {
            "description" : "All available links for the authenticated user.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/HalLinks"
            } ]
          }
        }
      },
      "array_string" : {
        "type" : "array",
        "items" : {
          "type" : "string"
        }
      },
      "string_date-time" : {
        "type" : "string",
        "format" : "date-time"
      },
      "MeshKind" : {
        "type" : "string",
        "enum" : [ "meshUser", "meshCustomer", "meshWorkspace", "meshPaymentMethod", "meshProject", "meshCustomerUserBinding", "meshWorkspaceUserBinding", "meshProjectUserBinding", "meshProjectGroupBinding", "meshTenant", "meshBuildingBlock", "meshBuildingBlockRun", "meshBuildingBlockRunner", "meshServiceInstance", "meshServiceInstanceBinding", "meshCustomerUserGroup", "meshWorkspaceUserGroup", "meshCustomerGroupBinding", "meshWorkspaceGroupBinding", "meshChargeback", "meshTenantUsageReport", "meshResourceUsageReport", "meshExchangeRate", "meshTagDefinition", "meshLandingZone", "meshPlatform", "meshPlatformType", "meshBuildingBlockDefinition", "meshProjectRole", "meshPolicyDefinition", "meshBuildingBlockDefinitionVersion", "meshCommunicationDefinition", "meshCommunication", "meshIntegration", "meshLocation", "meshEventLog", "meshApiKey", "meshPrincipal" ]
      },
      "integer_int64" : {
        "type" : "integer",
        "format" : "int64"
      },
      "MeshChargeback.Metadata" : {
        "required" : [ "name", "createdOn", "finalized", "version" ],
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string",
            "description" : "A name a meshChargeback can be uniquely identified with.",
            "example" : "2025-01-01Z/my-partner:my-workspace:my-project"
          },
          "createdOn" : {
            "description" : "Creation date of the meshChargeback.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "finalized" : {
            "type" : "boolean",
            "description" : "Finalization state of the meshChargeback. Value is 'true' for finalized and 'false' for preview meshChargebacks."
          },
          "finalizationDate" : {
            "description" : "The date when the meshChargeback was finalized. Can be null in case of preview meshChargebacks.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "cancellationDate" : {
            "description" : "If an update to an already finalized meshChargeback comes in, the old meshChargeback gets cancelled. The\ncancellationDate provides the date at which this cancellation happened.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "version" : {
            "description" : "If an update to an already finalized meshChargeback comes in, the old meshChargeback gets cancelled and a new\nmeshChargeback is created. The version is incremented in that case. For an initial or a preview meshChargeback,\nthe version is 1.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/integer_int64"
            } ]
          }
        }
      },
      "MapOfList" : {
        "type" : "object",
        "additionalProperties" : {
          "$ref" : "#/components/schemas/array_string"
        }
      },
      "MeshChargeback.Spec" : {
        "required" : [ "projectIdentifier", "period", "tags" ],
        "type" : "object",
        "properties" : {
          "workspaceIdentifier" : {
            "type" : "string",
            "description" : "The meshWorkspace identifier this meshChargeback belongs to.",
            "example" : "my-workspace"
          },
          "customerIdentifier" : {
            "type" : "string",
            "description" : "The meshWorkspace identifier this meshChargeback belongs to, in version v1, which v2 renamed to workspaceIdentifier.",
            "example" : "my-workspace",
            "deprecated" : true
          },
          "projectIdentifier" : {
            "type" : "string",
            "description" : "The meshProject identifier this meshChargeback belongs to.",
            "example" : "my-project"
          },
          "period" : {
            "type" : "string",
            "description" : "The period of the meshChargeback, e.g. '2022-01-01Z'.",
            "example" : "2025-01-01Z"
          },
          "tags" : {
            "description" : "Key/Value pairs associated with this meshChargeback. This includes meshWorkspace, meshProject and\nmeshPaymentMethod tags. Additionally, metadata like paymentMethod attributes are provided. Keep in mind that\nvalues are represented as an array to be consistent with other meshObjects. But at the moment, if multiple\nvalues are set for a certain tag, only the first value is available on a meshChargeback.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MapOfList"
            } ]
          }
        }
      },
      "MeshChargeback.Timeframe" : {
        "required" : [ "from", "to" ],
        "type" : "object",
        "properties" : {
          "from" : {
            "description" : "At which point in time the period started (usually beginning of month).",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "to" : {
            "description" : "Before which point in time the period ended (usually beginning of next month).",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          }
        }
      },
      "MeshTenantUsageReportV3.Timeframe" : {
        "required" : [ "from", "to" ],
        "type" : "object",
        "properties" : {
          "from" : {
            "description" : "At which point in time the period started (usually beginning of month).",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "to" : {
            "description" : "Before which point in time the period ended (usually beginning of next month).",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          }
        }
      },
      "MeshChargeback.LineItem" : {
        "required" : [ "reportCategory", "platformTenantId", "platformFullIdentifier", "reportId", "entryDate", "period", "netAmount", "currency" ],
        "type" : "object",
        "properties" : {
          "reportCategory" : {
            "type" : "string",
            "description" : "Tenant usage reports can either belong to category BILLING or ENVIRONMENTAL. This separation is needed as this\nkind of different data is provided in quite different time intervals.",
            "example" : "BILLING"
          },
          "platformTenantId" : {
            "type" : "string",
            "description" : "ID of the actual platform tenant in the cloud platform (e.g. AWS Account ID or OpenShift Project ID).",
            "example" : "b8e2c4a6-1d3f-4e57-9a0b-7c6d5e4f3a21"
          },
          "platformFullIdentifier" : {
            "type" : "string",
            "description" : "meshStack identifier of the platform the tenant belongs to.",
            "example" : "my-platform.my-location"
          },
          "reportId" : {
            "type" : "string",
            "description" : "ID of the tenant usage report this lineItem relates to.",
            "example" : "TenantUsageReports/my-platform.my-location:b8e2c4a6-1d3f-4e57-9a0b-7c6d5e4f3a21:2025-01-01Z"
          },
          "entryDate" : {
            "description" : "Date when the usage report was actually finalized and not modified anymore afterwards.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "period" : {
            "type" : "string",
            "description" : "Report period in which the usage for this line item actually occurred. If for some reason a usage report was not\nfinalized before the related chargeback period ended, it will be added to a later meshChargeback. So\nmeshChargebacks can contain line items from different reporting periods.",
            "example" : "2025-01-01Z"
          },
          "netAmount" : {
            "type" : "number",
            "description" : "Total cost associated with the given tenant usage report for one currency."
          },
          "baseNetAmount" : {
            "type" : "number",
            "description" : "The converted amount. For example, if currency is USD and baseCurrency is EUR, this will be the amount resulting\nfrom conversion from USD to EUR.",
            "nullable" : true
          },
          "baseCurrency" : {
            "type" : "string",
            "description" : "Currency for the baseNetAmount listed in this lineItem. This value is either null or EUR.",
            "nullable" : true,
            "example" : "EUR"
          },
          "exchangeRate" : {
            "type" : "number",
            "nullable" : true
          },
          "currency" : {
            "type" : "string",
            "description" : "Currency for the netAmount listed in this lineItem. Multiple lineItems are created if a tenant usage report has\ncosts distributed across multiple currencies.",
            "example" : "USD"
          },
          "sellerId" : {
            "type" : "string",
            "description" : "SellerId configured in meshStack for certain meshPlatforms or even specific products within a platform. This can\nbe used to identify the department or group inside your company the netAmount will be charged to.",
            "nullable" : true,
            "example" : "STACKIT"
          },
          "sellerProductGroup" : {
            "type" : "string",
            "description" : "With the sellerProductGroup the seller information can be further refined. This is for example used to identify\nthe different service brokers used in the meshMarketplace.",
            "nullable" : true,
            "example" : "Compute"
          }
        }
      },
      "MeshChargeback.LineItemV1V2" : {
        "required" : [ "reportCategory", "platformTenantId", "platformFullIdentifier", "reportId", "entryDate", "period", "netAmount", "currency" ],
        "type" : "object",
        "properties" : {
          "reportCategory" : {
            "type" : "string",
            "example" : "BILLING"
          },
          "platformTenantId" : {
            "type" : "string",
            "example" : "b8e2c4a6-1d3f-4e57-9a0b-7c6d5e4f3a21"
          },
          "platformFullIdentifier" : {
            "type" : "string",
            "example" : "my-platform.my-location"
          },
          "reportId" : {
            "type" : "string",
            "example" : "TenantUsageReports/my-platform.my-location:b8e2c4a6-1d3f-4e57-9a0b-7c6d5e4f3a21:2025-01-01Z"
          },
          "entryDate" : {
            "$ref" : "#/components/schemas/string_date-time"
          },
          "period" : {
            "type" : "string",
            "example" : "2025-01-01Z"
          },
          "netAmount" : {
            "type" : "number"
          },
          "currency" : {
            "type" : "string",
            "example" : "USD"
          },
          "sellerId" : {
            "type" : "string",
            "nullable" : true,
            "example" : "STACKIT"
          },
          "sellerProductGroup" : {
            "type" : "string",
            "nullable" : true,
            "example" : "Compute"
          }
        }
      },
      "MeshChargeback.ILineItem" : {
        "anyOf" : [ {
          "$ref" : "#/components/schemas/MeshChargeback.LineItem"
        }, {
          "$ref" : "#/components/schemas/MeshChargeback.LineItemV1V2"
        } ]
      },
      "array_MeshChargeback.ILineItem" : {
        "type" : "array",
        "items" : {
          "$ref" : "#/components/schemas/MeshChargeback.ILineItem"
        }
      },
      "MeshChargeback.NetAmount" : {
        "required" : [ "currency", "amount" ],
        "type" : "object",
        "properties" : {
          "currency" : {
            "type" : "string",
            "description" : "Currency belonging to the netAmount.",
            "example" : "USD"
          },
          "amount" : {
            "type" : "number",
            "description" : "The actual cost associated with the given currency."
          },
          "baseCurrency" : {
            "type" : "string",
            "description" : "The currency the amount was converted to. This value is either null or EUR.",
            "nullable" : true,
            "example" : "EUR"
          },
          "baseNetAmount" : {
            "type" : "number",
            "description" : "The converted amount. For example, if currency is USD and baseCurrency is EUR, this will be the amount resulting\nfrom conversion from USD to EUR.",
            "nullable" : true
          }
        }
      },
      "MeshChargeback.NetAmountV1V2" : {
        "required" : [ "currency", "amount" ],
        "type" : "object",
        "properties" : {
          "currency" : {
            "type" : "string",
            "example" : "USD"
          },
          "amount" : {
            "type" : "number"
          }
        }
      },
      "MeshChargeback.INetAmount" : {
        "anyOf" : [ {
          "$ref" : "#/components/schemas/MeshChargeback.NetAmount"
        }, {
          "$ref" : "#/components/schemas/MeshChargeback.NetAmountV1V2"
        } ]
      },
      "array_MeshChargeback.INetAmount" : {
        "type" : "array",
        "items" : {
          "$ref" : "#/components/schemas/MeshChargeback.INetAmount"
        }
      },
      "MeshChargeback.Status" : {
        "required" : [ "timeframe", "lineItems", "netAmounts" ],
        "type" : "object",
        "properties" : {
          "timeframe" : {
            "description" : "This provides actual details about the period the meshChargeback was generated for.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshChargeback.Timeframe"
            } ]
          },
          "lineItems" : {
            "description" : "List of all tenant usage reports that have been booked on a meshChargeback. One lineItem is created per tenant\nusage report and currency.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/array_MeshChargeback.ILineItem"
            } ]
          },
          "netAmounts" : {
            "description" : "NetAmounts per currency are provided here.",
            "readOnly" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/array_MeshChargeback.INetAmount"
            } ]
          }
        }
      },
      "MeshChargeback" : {
        "required" : [ "kind", "apiVersion", "metadata", "spec", "status" ],
        "type" : "object",
        "properties" : {
          "kind" : {
            "type" : "string",
            "enum" : [ "meshChargeback" ]
          },
          "apiVersion" : {
            "type" : "string",
            "description" : "Version of the meshChargeback datatype. Matches the version provided in the `Accept` request header.",
            "example" : "v3",
            "enum" : [ "v1", "v2", "v3" ]
          },
          "metadata" : {
            "description" : "Contains attributes to identify a meshChargeback.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshChargeback.Metadata"
            } ]
          },
          "spec" : {
            "description" : "All fields in this section describe the meshChargeback.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshChargeback.Spec"
            } ]
          },
          "status" : {
            "description" : "All fields in this section provide detailed content of the meshChargeback.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshChargeback.Status"
            } ]
          }
        },
        "deprecated" : true,
        "x-meshstack-versions" : [ {
          "meshObject" : "meshChargeback.v1",
          "state" : "Deprecated",
          "retiredAfter" : "2025-10-01",
          "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
        }, {
          "meshObject" : "meshChargeback.v2",
          "state" : "Deprecated",
          "retiredAfter" : "2025-10-01",
          "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
        }, {
          "meshObject" : "meshChargeback.v3",
          "state" : "Deprecated",
          "retiredAfter" : "2025-10-01",
          "notice" : "Use `meshTenantUsageReport.v3` of the meshObject API, which has the same line items for each report."
        } ]
      },
      "HalEntityModelMeshChargeback" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/MeshChargeback"
        }, {
          "required" : [ "_links" ],
          "type" : "object",
          "properties" : {
            "_links" : {
              "description" : "Available links on a meshChargeback.",
              "allOf" : [ {
                "$ref" : "#/components/schemas/HalLinks"
              } ]
            }
          }
        } ]
      },
      "HalPageMetadata" : {
        "required" : [ "size", "totalElements", "totalPages", "number" ],
        "type" : "object",
        "properties" : {
          "size" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int64"
          },
          "number" : {
            "type" : "integer",
            "format" : "int64"
          }
        },
        "readOnly" : true
      },
      "HalPageMeshChargeback" : {
        "required" : [ "_links", "_embedded", "page" ],
        "type" : "object",
        "properties" : {
          "_embedded" : {
            "required" : [ "meshChargebacks" ],
            "type" : "object",
            "properties" : {
              "meshChargebacks" : {
                "type" : "array",
                "description" : "List of meshChargebacks.",
                "items" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshChargeback"
                }
              }
            },
            "description" : "Contains the actual content of the paged response."
          },
          "_links" : {
            "description" : "Contains the self link and pagination links (first, last, next, prev).",
            "allOf" : [ {
              "$ref" : "#/components/schemas/HalLinks"
            } ]
          },
          "page" : {
            "description" : "Information about paging.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/HalPageMetadata"
            } ]
          }
        }
      },
      "MeshObjectImportResult.ImportStatus" : {
        "type" : "string",
        "enum" : [ "SUCCESS", "FAILED", "DELETED", "DELETE_FAILED" ]
      },
      "MeshObjectImportResult.ResultCode" : {
        "type" : "string",
        "enum" : [ "WORKSPACE_NOT_FOUND", "CUSTOMER_NOT_FOUND", "PROJECT_NOT_FOUND", "SERVER_ERROR", "INVALID_MESH_OBJECT" ]
      },
      "MeshObjectImportResult" : {
        "required" : [ "meshObject", "status" ],
        "type" : "object",
        "properties" : {
          "meshObject" : {
            "type" : "string",
            "description" : "The name of the meshObject.",
            "example" : "meshWorkspace[my-workspace]"
          },
          "status" : {
            "description" : "The import result status for this meshObject.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshObjectImportResult.ImportStatus"
            } ]
          },
          "resultCode" : {
            "description" : "Specific result code for this import result.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshObjectImportResult.ResultCode"
            } ]
          },
          "message" : {
            "type" : "string",
            "description" : "A user readable message with more details.",
            "nullable" : true
          },
          "remarks" : {
            "description" : "User readable remarks on this import result.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/array_string"
            } ]
          }
        }
      },
      "MeshResourceUsageReport.LineItem" : {
        "required" : [ "productName", "usageType", "usageCost", "usageQuantity", "usageUnit", "currency", "totalCost" ],
        "type" : "object",
        "properties" : {
          "productName" : {
            "type" : "string",
            "description" : "Name of the product.",
            "example" : "Virtual Machine g1.2"
          },
          "sellerId" : {
            "type" : "string",
            "description" : "An identifier of the seller who provides the services and is the recipient of the payment. E.g. the name of a\ncloud provider, or for internal costs the name of a department.",
            "nullable" : true,
            "example" : "STACKIT"
          },
          "sellerProductGroup" : {
            "type" : "string",
            "description" : "A sub-category of the seller if more fine-grained assignment is needed. E.g. different payment methods the\nseller has for the services it provides in a platform.",
            "nullable" : true,
            "example" : "Compute"
          },
          "usageType" : {
            "type" : "string",
            "description" : "To elaborate on the usageUnit, this field is used to describe what exactly is consumed and billed, for example,\n'hours of CPU/RAM usage'.",
            "example" : "CPU hours"
          },
          "usageCost" : {
            "type" : "number",
            "description" : "The cost per consumed usageUnit. usageQuantity multiplied by usageCost should always equal totalCost."
          },
          "usageQuantity" : {
            "type" : "number",
            "description" : "The usage quantity, for example, 48 if a product was used for 48 hours."
          },
          "usageUnit" : {
            "type" : "string",
            "description" : "The unit of the given usageQuantity, for example, h for hours or d for days.",
            "example" : "h"
          },
          "currency" : {
            "type" : "string",
            "description" : "The ISO-4217 compliant currency code, e.g. EUR or USD.",
            "example" : "USD"
          },
          "totalCost" : {
            "type" : "number",
            "description" : "totalCost equals usageQuantity multiplied by usageCost."
          }
        }
      },
      "array_MeshResourceUsageReport.LineItem" : {
        "type" : "array",
        "items" : {
          "$ref" : "#/components/schemas/MeshResourceUsageReport.LineItem"
        }
      },
      "MeshResourceUsageReport" : {
        "required" : [ "kind", "apiVersion", "fullPlatformIdentifier", "source", "lineItems" ],
        "type" : "object",
        "properties" : {
          "kind" : {
            "type" : "string",
            "enum" : [ "meshResourceUsageReport" ]
          },
          "apiVersion" : {
            "type" : "string",
            "description" : "Required for backwards compatibility.",
            "enum" : [ "v1" ]
          },
          "fullPlatformIdentifier" : {
            "type" : "string",
            "description" : "An identifier in the format $platformInstance.$location, where $platformInstance refers to the\nidentifier of the meshPlatform, and $location refers to the identifier of the meshLocation.",
            "example" : "my-platform.my-location"
          },
          "source" : {
            "type" : "string",
            "description" : "Name of the system where this meshResourceUsageReport originates from.",
            "example" : "stackit-billing-export"
          },
          "lineItems" : {
            "$ref" : "#/components/schemas/array_MeshResourceUsageReport.LineItem"
          }
        },
        "x-meshstack-versions" : [ {
          "meshObject" : "meshResourceUsageReport.v1",
          "state" : "GA"
        } ]
      },
      "ReportCategory" : {
        "type" : "string",
        "enum" : [ "BILLING", "ENVIRONMENTAL" ]
      },
      "PlatformType" : {
        "type" : "string",
        "enum" : [ "OpenStack", "CloudFoundry", "MeshMarketplace", "Azure", "AzureResourceGroup", "Kubernetes", "OpenShift", "AzureKubernetesService", "Aws", "Gcp", "Custom" ]
      },
      "string_uuid" : {
        "type" : "string",
        "format" : "uuid"
      },
      "MeshTenantUsageReportStatus" : {
        "type" : "string",
        "enum" : [ "OPEN", "FINALIZED", "UPDATED" ]
      },
      "MeshTenantUsageReport.Metadata" : {
        "required" : [ "name", "lastModified", "finalized" ],
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string",
            "example" : "my-platform.my-location:b8e2c4a6-1d3f-4e57-9a0b-7c6d5e4f3a21:2025-01-01Z"
          },
          "lastModified" : {
            "$ref" : "#/components/schemas/string_date-time"
          },
          "finalized" : {
            "type" : "boolean"
          }
        }
      },
      "MeshTenantUsageReport.Spec" : {
        "required" : [ "period", "reportCategory", "platformType", "platformFullIdentifier", "platformTenantId" ],
        "type" : "object",
        "properties" : {
          "period" : {
            "type" : "string",
            "example" : "2025-01-01Z"
          },
          "reportCategory" : {
            "type" : "string",
            "example" : "BILLING"
          },
          "platformType" : {
            "type" : "string",
            "example" : "Custom"
          },
          "platformFullIdentifier" : {
            "type" : "string",
            "example" : "my-platform.my-location"
          },
          "platformTenantId" : {
            "type" : "string",
            "example" : "b8e2c4a6-1d3f-4e57-9a0b-7c6d5e4f3a21"
          }
        }
      },
      "MeshTenantUsageReport.Timeframe" : {
        "required" : [ "from", "to" ],
        "type" : "object",
        "properties" : {
          "from" : {
            "$ref" : "#/components/schemas/string_date-time"
          },
          "to" : {
            "$ref" : "#/components/schemas/string_date-time"
          }
        }
      },
      "MeshTenantUsageReport.NetAmount" : {
        "required" : [ "currency", "amount" ],
        "type" : "object",
        "properties" : {
          "currency" : {
            "type" : "string",
            "example" : "USD"
          },
          "amount" : {
            "type" : "number"
          },
          "baseCurrency" : {
            "type" : "string",
            "nullable" : true,
            "example" : "EUR"
          },
          "baseAmount" : {
            "type" : "number",
            "nullable" : true
          }
        }
      },
      "array_MeshTenantUsageReport.NetAmount" : {
        "type" : "array",
        "items" : {
          "$ref" : "#/components/schemas/MeshTenantUsageReport.NetAmount"
        }
      },
      "MeshTenantUsageReport.Status" : {
        "required" : [ "timeframe", "netAmounts" ],
        "type" : "object",
        "properties" : {
          "workspaceIdentifier" : {
            "type" : "string",
            "description" : "The meshWorkspace identifier this meshTenantUsageReport belongs to.",
            "example" : "my-workspace"
          },
          "customerIdentifier" : {
            "type" : "string",
            "description" : "The meshWorkspace identifier this meshTenantUsageReport belongs to, in version v1, which v2 renamed to workspaceIdentifier.",
            "example" : "my-workspace",
            "deprecated" : true
          },
          "projectIdentifier" : {
            "type" : "string",
            "nullable" : true,
            "example" : "my-project"
          },
          "timeframe" : {
            "$ref" : "#/components/schemas/MeshTenantUsageReport.Timeframe"
          },
          "netAmounts" : {
            "$ref" : "#/components/schemas/array_MeshTenantUsageReport.NetAmount"
          }
        }
      },
      "MeshTenantUsageReport" : {
        "required" : [ "kind", "apiVersion", "metadata", "spec", "status" ],
        "type" : "object",
        "properties" : {
          "kind" : {
            "type" : "string",
            "enum" : [ "meshTenantUsageReport" ]
          },
          "apiVersion" : {
            "type" : "string",
            "example" : "v2",
            "enum" : [ "v2" ]
          },
          "metadata" : {
            "$ref" : "#/components/schemas/MeshTenantUsageReport.Metadata"
          },
          "spec" : {
            "$ref" : "#/components/schemas/MeshTenantUsageReport.Spec"
          },
          "status" : {
            "$ref" : "#/components/schemas/MeshTenantUsageReport.Status"
          }
        },
        "deprecated" : true,
        "x-meshstack-versions" : [ {
          "meshObject" : "meshTenantUsageReport.v1",
          "state" : "Deprecated",
          "retiredAfter" : "2025-10-01",
          "notice" : "v3 aggregates line items by seller product group and supports report versioning and cancellation.",
          "latest" : "meshTenantUsageReport.v3"
        }, {
          "meshObject" : "meshTenantUsageReport.v2",
          "state" : "Deprecated",
          "retiredAfter" : "2025-10-01",
          "notice" : "v3 aggregates line items by seller product group and supports report versioning and cancellation.",
          "latest" : "meshTenantUsageReport.v3"
        } ]
      },
      "HalEntityModelMeshTenantUsageReport" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/MeshTenantUsageReport"
        }, {
          "required" : [ "_links" ],
          "type" : "object",
          "properties" : {
            "_links" : {
              "description" : "Available links on a meshTenantUsageReport.",
              "allOf" : [ {
                "$ref" : "#/components/schemas/HalLinks"
              } ]
            }
          }
        } ]
      },
      "HalPageMeshTenantUsageReport" : {
        "required" : [ "_links", "_embedded", "page" ],
        "type" : "object",
        "properties" : {
          "_embedded" : {
            "required" : [ "meshTenantUsageReports" ],
            "type" : "object",
            "properties" : {
              "meshTenantUsageReports" : {
                "type" : "array",
                "description" : "List of meshTenantUsageReports.",
                "items" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshTenantUsageReport"
                }
              }
            },
            "description" : "Contains the actual content of the paged response."
          },
          "_links" : {
            "description" : "Contains the self link and pagination links (first, last, next, prev).",
            "allOf" : [ {
              "$ref" : "#/components/schemas/HalLinks"
            } ]
          },
          "page" : {
            "description" : "Information about paging.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/HalPageMetadata"
            } ]
          }
        }
      },
      "MeshTenantUsageReportV3.Metadata" : {
        "required" : [ "uuid", "createdAt" ],
        "type" : "object",
        "properties" : {
          "uuid" : {
            "description" : "A uuid that identifies a meshTenantUsageReport uniquely.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_uuid"
            } ]
          },
          "ownedByWorkspace" : {
            "type" : "string",
            "description" : "The identifier of the workspace the meshTenantUsageReport belongs to, or null if the tenant is not managed by\nmeshStack.",
            "nullable" : true,
            "example" : "my-workspace"
          },
          "ownedByProject" : {
            "type" : "string",
            "description" : "The identifier of the project the meshTenantUsageReport belongs to, or null if the tenant is not managed by\nmeshStack.",
            "nullable" : true,
            "example" : "my-project"
          },
          "createdAt" : {
            "description" : "The date the meshTenantUsageReport was created in the system that serves the API.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          }
        }
      },
      "MeshTenantUsageReportV3.Spec" : {
        "required" : [ "period", "reportCategory", "platformType", "platform", "platformTenantId", "version" ],
        "type" : "object",
        "properties" : {
          "period" : {
            "type" : "string",
            "description" : "The period of the meshTenantUsageReport, e.g. `2025-01`.",
            "example" : "2025-01"
          },
          "reportCategory" : {
            "type" : "string",
            "description" : "The reportCategory of the meshTenantUsageReport. One of `BILLING`, `ENVIRONMENTAL`.",
            "example" : "BILLING"
          },
          "platformType" : {
            "type" : "string",
            "description" : "The platformType of the platform the meshTenantUsageReport belongs to. One of `OpenStack`, `CloudFoundry`,\n`MeshMarketplace`, `Azure`, `AzureResourceGroup`, `Kubernetes`, `OpenShift`, `AzureKubernetesService`, `Aws`,\n`Gcp`, `Custom`.",
            "example" : "Custom"
          },
          "platform" : {
            "type" : "string",
            "description" : "The platformFullIdentifier of the platform the meshTenantUsageReport belongs to.",
            "example" : "my-platform.my-location"
          },
          "platformTenantId" : {
            "type" : "string",
            "description" : "The platformTenantId that the meshTenantUsageReport belongs to.",
            "example" : "b8e2c4a6-1d3f-4e57-9a0b-7c6d5e4f3a21"
          },
          "version" : {
            "description" : "When a meshTenantUsageReport is updated after it was already finalized, the version is always increased by 1.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/integer_int64"
            } ]
          }
        }
      },
      "MeshTenantUsageReportV3.PaymentMethod" : {
        "required" : [ "identifier", "name" ],
        "type" : "object",
        "properties" : {
          "identifier" : {
            "type" : "string",
            "description" : "The identifier of the related payment method.",
            "example" : "my-payment-method"
          },
          "name" : {
            "type" : "string",
            "description" : "The name of the related payment method.",
            "example" : "my-payment-method"
          },
          "amount" : {
            "description" : "The amount of the related payment method, if set.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/integer_int64"
            } ]
          },
          "expirationDate" : {
            "description" : "The expiration date of the related payment method, if set.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          }
        }
      },
      "MeshTenantUsageReportV3.NetAmount" : {
        "required" : [ "amount", "currency" ],
        "type" : "object",
        "properties" : {
          "amount" : {
            "type" : "number",
            "description" : "The concrete amount of reported costs in the original currency."
          },
          "currency" : {
            "type" : "string",
            "description" : "The currency used for the corresponding amount.",
            "example" : "USD"
          },
          "baseAmount" : {
            "type" : "number",
            "description" : "The converted amount. For example, if currency is USD and baseCurrency is EUR, this will be the amount resulting\nfrom conversion from USD to EUR. Only present when currency conversion is enabled in the meshStack financials\nsettings.",
            "nullable" : true
          },
          "baseCurrency" : {
            "type" : "string",
            "description" : "The currency of the baseAmount. Only present when currency conversion is enabled.",
            "nullable" : true,
            "example" : "EUR"
          },
          "exchangeRate" : {
            "type" : "number",
            "description" : "The exchange rate that was used for the conversion to the base currency.",
            "nullable" : true
          }
        }
      },
      "MeshTenantUsageReportV3.LineItem" : {
        "required" : [ "netAmount" ],
        "type" : "object",
        "properties" : {
          "netAmount" : {
            "description" : "The reported amount of this line item, in its original currency and optionally converted.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshTenantUsageReportV3.NetAmount"
            } ]
          },
          "sellerId" : {
            "type" : "string",
            "description" : "Seller information can be provided in the Product Catalog of meshStack. You can e.g. use the sellerId to\nseparate costs coming from the cloud platform and additional fees that are applied by your company's platform\nteam.",
            "nullable" : true,
            "example" : "STACKIT"
          },
          "sellerProductGroup" : {
            "type" : "string",
            "description" : "The sellerProductGroup can specify the seller information to a more detailed level. It is for example used to\nprovide the service broker name in case of a meshMarketplace usage report. The sellerId is set to the workspace\nidentifier in that case.",
            "nullable" : true,
            "example" : "Compute"
          }
        }
      },
      "array_MeshTenantUsageReportV3.LineItem" : {
        "type" : "array",
        "items" : {
          "$ref" : "#/components/schemas/MeshTenantUsageReportV3.LineItem"
        }
      },
      "MeshTenantUsageReportV3.Status" : {
        "required" : [ "generatedAt", "timeframe", "tags", "lineItems" ],
        "type" : "object",
        "properties" : {
          "generatedAt" : {
            "description" : "Date when the meshTenantUsageReport was generated initially.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "finalizedAt" : {
            "description" : "Date when the meshTenantUsageReport was finalized, or null while it is still open.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "cancelledAt" : {
            "description" : "Date when the meshTenantUsageReport was cancelled and replaced by a new meshTenantUsageReport.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/string_date-time"
            } ]
          },
          "paymentMethod" : {
            "description" : "The payment method that was assigned to the project the related tenant belongs to in the given period.",
            "nullable" : true,
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshTenantUsageReportV3.PaymentMethod"
            } ]
          },
          "timeframe" : {
            "description" : "This provides details about the period the meshTenantUsageReport was generated for.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshTenantUsageReportV3.Timeframe"
            } ]
          },
          "tags" : {
            "description" : "The related tags, that were inherited for the given period to the related tenant. This includes `workspace`,\n`project` and `payment method` tags. The values are provided as an array, as multiple values can be set for some\ntags.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MapOfList"
            } ]
          },
          "lineItems" : {
            "description" : "Top-level line items of the meshTenantUsageReport. Separate line items are created by sellerId,\nsellerProductGroup and currency.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/array_MeshTenantUsageReportV3.LineItem"
            } ]
          }
        }
      },
      "MeshTenantUsageReportV3" : {
        "required" : [ "kind", "apiVersion", "metadata", "spec", "status" ],
        "type" : "object",
        "properties" : {
          "kind" : {
            "type" : "string",
            "enum" : [ "meshTenantUsageReport" ]
          },
          "apiVersion" : {
            "type" : "string",
            "description" : "Version of the meshTenantUsageReport datatype. Matches the version provided in the `Accept` request header.",
            "enum" : [ "v3" ]
          },
          "metadata" : {
            "description" : "Contains common attributes of a meshTenantUsageReport, that also exist on other meshObjects.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshTenantUsageReportV3.Metadata"
            } ]
          },
          "spec" : {
            "description" : "All fields in this section describe the meshTenantUsageReport.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshTenantUsageReportV3.Spec"
            } ]
          },
          "status" : {
            "description" : "All fields in this section provide detailed content of the meshTenantUsageReport.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MeshTenantUsageReportV3.Status"
            } ]
          }
        },
        "x-meshstack-versions" : [ {
          "meshObject" : "meshTenantUsageReport.v3",
          "state" : "GA"
        } ]
      },
      "HalEntityModelMeshTenantUsageReportV3" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/MeshTenantUsageReportV3"
        }, {
          "required" : [ "_links" ],
          "type" : "object",
          "properties" : {
            "_links" : {
              "description" : "Currently only contains the self link.",
              "allOf" : [ {
                "$ref" : "#/components/schemas/HalLinks"
              } ]
            }
          }
        } ]
      },
      "HalPageMeshTenantUsageReportV3" : {
        "required" : [ "_links", "_embedded", "page" ],
        "type" : "object",
        "properties" : {
          "_embedded" : {
            "required" : [ "meshTenantUsageReports" ],
            "type" : "object",
            "properties" : {
              "meshTenantUsageReports" : {
                "type" : "array",
                "description" : "List of meshTenantUsageReports.",
                "items" : {
                  "$ref" : "#/components/schemas/HalEntityModelMeshTenantUsageReportV3"
                }
              }
            },
            "description" : "Contains the actual content of the paged response."
          },
          "_links" : {
            "description" : "Contains the self link and pagination links (first, last, next, prev).",
            "allOf" : [ {
              "$ref" : "#/components/schemas/HalLinks"
            } ]
          },
          "page" : {
            "description" : "Information about paging.",
            "allOf" : [ {
              "$ref" : "#/components/schemas/HalPageMetadata"
            } ]
          }
        }
      },
      "CustomErrorMessage" : {
        "required" : [ "errorCode", "message", "errorId" ],
        "type" : "object",
        "properties" : {
          "errorCode" : {
            "type" : "string",
            "description" : "A short code for the type of error. Most codes are the name of the exception that caused the error, without its\n`Mesh` prefix and `Exception` suffix, for example `NotFound` or `MethodArgumentTypeMismatch`. Most codes name a\nmeshStack domain error, some a technical one. Later releases may add codes."
          },
          "message" : {
            "type" : "string",
            "description" : "A message that describes the error."
          },
          "errorId" : {
            "type" : "string",
            "description" : "An identifier that links this error to the meshStack logs.",
            "example" : "Kq7wZ3xRbN"
          },
          "terraformProviderVersionHint" : {
            "type" : "string",
            "description" : "Advice to upgrade the Terraform provider. meshStack sets it only when the request came from a version of\nterraform-provider-meshstack that is too old for this endpoint.",
            "nullable" : true,
            "example" : "You are using version 0.10.0 of the terraform-provider-meshstack, but version 0.12.0 or later is required for this resource."
          }
        },
        "description" : "The body of every error response."
      }
    },
    "securitySchemes" : {
      "basicAuth" : {
        "type" : "http",
        "description" : "Username and password of an API user. The metering API does not support API keys yet.",
        "scheme" : "basic"
      }
    }
  },
  "x-meshstack-retired-endpoints" : [ {
    "method" : "GET",
    "path" : "/api/meshobjects/meshtenantusagereports",
    "mediaType" : "application/vnd.meshcloud.api.meshtenantusagereport.v1.hal+json",
    "meshObject" : "meshTenantUsageReport.v1",
    "state" : "Retired",
    "retiredAfter" : "2025-10-01",
    "notice" : "v3 aggregates line items by seller product group and supports report versioning and cancellation.",
    "latest" : "meshTenantUsageReport.v3"
  }, {
    "method" : "GET",
    "path" : "/api/meshobjects/meshtenantusagereports/{tenantUsageReportTenant}/{tenantUsageReportPeriod}",
    "mediaType" : "application/vnd.meshcloud.api.meshtenantusagereport.v1.hal+json",
    "meshObject" : "meshTenantUsageReport.v1",
    "state" : "Retired",
    "retiredAfter" : "2025-10-01",
    "notice" : "v3 aggregates line items by seller product group and supports report versioning and cancellation.",
    "latest" : "meshTenantUsageReport.v3"
  } ]
}
