{
  "openapi": "3.1.1",
  "info": {
    "title": "Armada portal API",
    "description": "One account and one API key for all Armada services (listing localization, tariff classification, e-invoice). Authorization: Bearer <API key>. Calls are paid from the account credit or the free quota.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://armada-portal.api.codixio.com/"
    }
  ],
  "paths": {
    "/v1/listing/jobs": {
      "post": {
        "tags": [
          "Listing localization"
        ],
        "summary": "Listing localization: queue a job.",
        "description": "Body: the job request of the service, see https://armada-listing.api.codixio.com/openapi/v1.json (POST /v1/jobs). Send no personal data. The portal sets billing_kind, sales_channel and end_customer_ref itself (400 when sent). Uses the free quota first, then reserves the current maximum price from the credit (402 without cover); the job is charged with its price on success and the reservation is released on failure. Without API key only possible when the operator set a free quota without sign-in; the answer then carries the header Armada-Job-Token, needed to read the job. Answers 202 with the job.",
        "operationId": "CreateListingJob",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonObject"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "202": {
            "description": "Accepted"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Payload Too Large",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Listing localization"
        ],
        "summary": "Listing localization: own jobs, newest first.",
        "description": "Cursor before=<job id>, limit 1 to 100 (default 50).",
        "operationId": "ListListingJobs",
        "parameters": [
          {
            "name": "before",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v1/listing/jobs/{id}": {
      "get": {
        "tags": [
          "Listing localization"
        ],
        "summary": "Listing localization: status, price and result of an own job.",
        "description": "Only own jobs (API key) or, for jobs without sign-in, with the header Armada-Job-Token. Otherwise 404.",
        "operationId": "GetListingJob",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v1/listing/max-price": {
      "get": {
        "tags": [
          "Listing localization"
        ],
        "summary": "Listing localization: current maximum price per job; a paid job reserves this amount.",
        "operationId": "GetListingMaxPrice",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tariff/jobs": {
      "post": {
        "tags": [
          "Tariff classification"
        ],
        "summary": "Tariff classification: queue a job.",
        "description": "Body: the job request of the service, see https://armada-zolltarif.api.codixio.com/openapi/v1.json (POST /v1/jobs). Send no personal data. The portal sets billing_kind, sales_channel and end_customer_ref itself (400 when sent). Uses the free quota first, then reserves the current maximum price from the credit (402 without cover); the job is charged with its price on success and the reservation is released on failure. Without API key only possible when the operator set a free quota without sign-in; the answer then carries the header Armada-Job-Token, needed to read the job. Answers 202 with the job.",
        "operationId": "CreateTariffJob",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonObject"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "202": {
            "description": "Accepted"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Payload Too Large",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Tariff classification"
        ],
        "summary": "Tariff classification: own jobs, newest first.",
        "description": "Cursor before=<job id>, limit 1 to 100 (default 50).",
        "operationId": "ListTariffJobs",
        "parameters": [
          {
            "name": "before",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tariff/jobs/{id}": {
      "get": {
        "tags": [
          "Tariff classification"
        ],
        "summary": "Tariff classification: status, price and result of an own job.",
        "description": "Only own jobs (API key) or, for jobs without sign-in, with the header Armada-Job-Token. Otherwise 404.",
        "operationId": "GetTariffJob",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v1/tariff/max-price": {
      "get": {
        "tags": [
          "Tariff classification"
        ],
        "summary": "Tariff classification: current maximum price per job; a paid job reserves this amount.",
        "operationId": "GetTariffMaxPrice",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/v1/einvoice/validate": {
      "post": {
        "tags": [
          "E-invoice"
        ],
        "summary": "Validate an XRechnung or a ZUGFeRD / Factur-X invoice (application/xml, text/xml or application/pdf).",
        "description": "Answers 200 with request_id, price and the validation report. Billing as for jobs: free quota first, else reservation of the maximum price, charge of the price from the answer on success, release otherwise. The invoice is passed through in memory only; the portal stores and logs no content. See https://armada-erechnung.api.codixio.com/openapi/v1.json for bodies and answers.",
        "operationId": "ValidateEInvoice",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "type": "string"
              }
            },
            "text/xml": {
              "schema": {
                "type": "string"
              }
            },
            "application/pdf": {
              "schema": {
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v1/einvoice/create": {
      "post": {
        "tags": [
          "E-invoice"
        ],
        "summary": "Create an XRechnung (syntax=cii or ubl) or a ZUGFeRD PDF (syntax=zugferd) from invoice data (JSON, EN 16931).",
        "description": "Answers 200 with the XML or PDF; price and request id in the headers Armada-Price-Amount, Armada-Price-Currency and Armada-Request-Id. Billing as for jobs: free quota first, else reservation of the maximum price, charge of the price from the answer on success, release otherwise. The invoice is passed through in memory only; the portal stores and logs no content. See https://armada-erechnung.api.codixio.com/openapi/v1.json for bodies and answers.",
        "operationId": "CreateEInvoice",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonObject"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v1/einvoice/render": {
      "post": {
        "tags": [
          "E-invoice"
        ],
        "summary": "Readable view (format=html or pdf) of an XRechnung or ZUGFeRD invoice.",
        "description": "Answers 200 with HTML or PDF; price and request id in the headers. Billing as for jobs: free quota first, else reservation of the maximum price, charge of the price from the answer on success, release otherwise. The invoice is passed through in memory only; the portal stores and logs no content. See https://armada-erechnung.api.codixio.com/openapi/v1.json for bodies and answers.",
        "operationId": "RenderEInvoice",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "type": "string"
              }
            },
            "text/xml": {
              "schema": {
                "type": "string"
              }
            },
            "application/pdf": {
              "schema": {
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v1/einvoice/max-price": {
      "get": {
        "tags": [
          "E-invoice"
        ],
        "summary": "E-invoice: current maximum price per document; a paid call reserves this amount.",
        "operationId": "GetEInvoiceMaxPrice",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v1/account": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Own balance (available and reserved), free quota per service this month and the credit packages.",
        "operationId": "GetAccount",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/ledger": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Own ledger entries, newest first (cursor before, limit 1 to 100, default 50).",
        "operationId": "GetLedger",
        "parameters": [
          {
            "name": "before",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LedgerPage"
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/calls": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Own calls through the portal (service, billing, state, charged amount), newest first.",
        "operationId": "GetCalls",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceCallDto"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/top-up": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Checkout link at Polar (merchant of record) for one credit package; the credit is booked when Polar confirms the payment.",
        "operationId": "CreateTopUp",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/TopUpRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TopUpResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/accounts": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Accounts, newest first; optional email (exact), cursor before, limit 1 to 100.",
        "operationId": "AdminListAccounts",
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "before",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminAccountList"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create an account (works while registration is closed); the customer sets the password via \"forgot password\".",
        "operationId": "AdminCreateAccount",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/CreateAccountRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminAccountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/accounts/{id}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Account with active keys, last 50 ledger entries and last 50 calls.",
        "operationId": "AdminGetAccount",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminAccountDetailResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Admin"
        ],
        "summary": "Suspend or unsuspend (suspended), confirm the e-mail address (email_confirmed: true).",
        "operationId": "AdminUpdateAccount",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/UpdateAccountRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminAccountResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/accounts/{id}/credits": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Credit an amount in the ledger currency; idempotent over idempotency_key.",
        "operationId": "AdminCredit",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/CreditRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/accounts/{id}/api-keys": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Issue an API key for an account; shown exactly once.",
        "operationId": "AdminCreateApiKey",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/CreateApiKeyRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssuedApiKeyResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/accounts/{id}/api-keys/{keyId}": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Revoke an API key.",
        "operationId": "AdminRevokeApiKey",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "keyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/test-accounts": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Test account for reviewers: confirmed, with credit, password and API key shown once; no mailbox needed.",
        "operationId": "AdminCreateTestAccount",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/CreateTestAccountRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TestAccountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/settings": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Switch \"public\" and whether registration is open (switch on and both legal texts configured).",
        "operationId": "AdminGetSettings",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Set the switch \"public\" (public_registration).",
        "operationId": "AdminUpdateSettings",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/UpdateSettingsRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/admin/quotas": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Free quota per service: per account and month, per IP and day without sign-in (0 = off).",
        "operationId": "AdminGetQuotas",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuotaDto"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/admin/quotas/{service}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Set the free quota of a service (listing, tariff, einvoice).",
        "operationId": "AdminUpdateQuota",
        "parameters": [
          {
            "name": "service",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/UpdateQuotaRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotaDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AccountResponse": {
        "required": [
          "id",
          "balance",
          "free_quota",
          "top_up_enabled",
          "top_up_packages"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "balance": {
            "$ref": "#/components/schemas/BalanceDto"
          },
          "free_quota": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FreeQuotaDto"
            }
          },
          "top_up_enabled": {
            "type": "boolean"
          },
          "top_up_packages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditPackageDto"
            }
          }
        },
        "additionalProperties": false
      },
      "AdminAccountDetailResponse": {
        "required": [
          "account",
          "api_keys",
          "ledger",
          "calls"
        ],
        "type": "object",
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AdminAccountResponse"
          },
          "api_keys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AdminApiKeyResponse"
            }
          },
          "ledger": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LedgerEntryDto"
            }
          },
          "calls": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceCallDto"
            }
          }
        },
        "additionalProperties": false
      },
      "AdminAccountList": {
        "required": [
          "items",
          "next_before"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AdminAccountResponse"
            }
          },
          "next_before": {
            "type": [
              "null",
              "string"
            ],
            "format": "uuid"
          }
        },
        "additionalProperties": false
      },
      "AdminAccountResponse": {
        "required": [
          "id",
          "email",
          "email_confirmed",
          "suspended",
          "is_test_account",
          "created_by_operator",
          "deleted",
          "language",
          "balance",
          "created_at"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "email": {
            "type": [
              "null",
              "string"
            ]
          },
          "email_confirmed": {
            "type": "boolean"
          },
          "suspended": {
            "type": "boolean"
          },
          "is_test_account": {
            "type": "boolean"
          },
          "created_by_operator": {
            "type": "boolean"
          },
          "deleted": {
            "type": "boolean"
          },
          "language": {
            "type": "string"
          },
          "balance": {
            "$ref": "#/components/schemas/BalanceDto"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "AdminApiKeyResponse": {
        "required": [
          "id",
          "name",
          "display_prefix",
          "created_at",
          "last_used_at"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "display_prefix": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_used_at": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "ArmadaService": {
        "enum": [
          "listing",
          "tariff",
          "e_invoice"
        ]
      },
      "BalanceDto": {
        "required": [
          "available",
          "reserved",
          "currency"
        ],
        "type": "object",
        "properties": {
          "available": {
            "type": "string"
          },
          "reserved": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "BillingKind": {
        "enum": [
          "paid",
          "free"
        ]
      },
      "CreateAccountRequest": {
        "required": [
          "email",
          "email_confirmed",
          "language"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": [
              "null",
              "string"
            ]
          },
          "email_confirmed": {
            "type": [
              "null",
              "boolean"
            ]
          },
          "language": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "additionalProperties": false
      },
      "CreateApiKeyRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "additionalProperties": false
      },
      "CreateTestAccountRequest": {
        "required": [
          "email",
          "credit",
          "language"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": [
              "null",
              "string"
            ]
          },
          "credit": {
            "type": [
              "null",
              "string"
            ]
          },
          "language": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "additionalProperties": false
      },
      "CreditPackageDto": {
        "required": [
          "product_id",
          "credit",
          "currency"
        ],
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "credit": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "CreditRequest": {
        "required": [
          "amount",
          "reason",
          "idempotency_key"
        ],
        "type": "object",
        "properties": {
          "amount": {
            "type": [
              "null",
              "string"
            ]
          },
          "reason": {
            "type": [
              "null",
              "string"
            ]
          },
          "idempotency_key": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "additionalProperties": false
      },
      "CreditResponse": {
        "required": [
          "entry_id",
          "duplicate",
          "balance"
        ],
        "type": "object",
        "properties": {
          "entry_id": {
            "type": "string",
            "format": "uuid"
          },
          "duplicate": {
            "type": "boolean"
          },
          "balance": {
            "$ref": "#/components/schemas/BalanceDto"
          }
        },
        "additionalProperties": false
      },
      "FreeQuotaDto": {
        "required": [
          "service",
          "per_month",
          "used_this_month"
        ],
        "type": "object",
        "properties": {
          "service": {
            "$ref": "#/components/schemas/ArmadaService"
          },
          "per_month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "used_this_month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "HttpValidationProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          },
          "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "detail": {
            "type": [
              "null",
              "string"
            ]
          },
          "instance": {
            "type": [
              "null",
              "string"
            ]
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "additionalProperties": false
      },
      "IssuedApiKeyResponse": {
        "required": [
          "id",
          "name",
          "api_key"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "api_key": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "JsonObject": {
        "type": "object"
      },
      "LedgerEntryDto": {
        "required": [
          "id",
          "kind",
          "available_delta",
          "reserved_delta",
          "available_after",
          "reserved_after",
          "currency",
          "service_call_id",
          "uncovered_amount",
          "created_at"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "kind": {
            "$ref": "#/components/schemas/LedgerEntryKind"
          },
          "available_delta": {
            "type": "string"
          },
          "reserved_delta": {
            "type": "string"
          },
          "available_after": {
            "type": "string"
          },
          "reserved_after": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "service_call_id": {
            "type": [
              "null",
              "string"
            ],
            "format": "uuid"
          },
          "uncovered_amount": {
            "type": [
              "null",
              "string"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "LedgerEntryKind": {
        "enum": [
          "top_up",
          "reservation",
          "settlement",
          "release",
          "credit",
          "reversal"
        ]
      },
      "LedgerPage": {
        "required": [
          "items",
          "next_before"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LedgerEntryDto"
            }
          },
          "next_before": {
            "type": [
              "null",
              "string"
            ],
            "format": "uuid"
          }
        },
        "additionalProperties": false
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          },
          "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "detail": {
            "type": [
              "null",
              "string"
            ]
          },
          "instance": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "additionalProperties": false
      },
      "QuotaDto": {
        "required": [
          "service",
          "free_per_account_per_month",
          "free_per_ip_per_day"
        ],
        "type": "object",
        "properties": {
          "service": {
            "$ref": "#/components/schemas/ArmadaService"
          },
          "free_per_account_per_month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "free_per_ip_per_day": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ServiceCallDto": {
        "required": [
          "id",
          "service",
          "operation",
          "billing_kind",
          "state",
          "upstream_id",
          "reserved",
          "charged",
          "currency",
          "created_at",
          "completed_at"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "service": {
            "$ref": "#/components/schemas/ArmadaService"
          },
          "operation": {
            "type": "string"
          },
          "billing_kind": {
            "$ref": "#/components/schemas/BillingKind"
          },
          "state": {
            "$ref": "#/components/schemas/ServiceCallState"
          },
          "upstream_id": {
            "type": [
              "null",
              "string"
            ]
          },
          "reserved": {
            "type": "string"
          },
          "charged": {
            "type": [
              "null",
              "string"
            ]
          },
          "currency": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "completed_at": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "ServiceCallState": {
        "enum": [
          "pending",
          "open",
          "settled",
          "released",
          "rejected"
        ]
      },
      "SettingsResponse": {
        "required": [
          "public_registration",
          "legal_texts_configured",
          "registration_open"
        ],
        "type": "object",
        "properties": {
          "public_registration": {
            "type": "boolean"
          },
          "legal_texts_configured": {
            "type": "boolean"
          },
          "registration_open": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "TestAccountResponse": {
        "required": [
          "id",
          "email",
          "password",
          "api_key",
          "balance"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "api_key": {
            "type": "string"
          },
          "balance": {
            "$ref": "#/components/schemas/BalanceDto"
          }
        },
        "additionalProperties": false
      },
      "TopUpRequest": {
        "required": [
          "product_id"
        ],
        "type": "object",
        "properties": {
          "product_id": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "additionalProperties": false
      },
      "TopUpResponse": {
        "required": [
          "checkout_url"
        ],
        "type": "object",
        "properties": {
          "checkout_url": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "UpdateAccountRequest": {
        "required": [
          "suspended",
          "email_confirmed"
        ],
        "type": "object",
        "properties": {
          "suspended": {
            "type": [
              "null",
              "boolean"
            ]
          },
          "email_confirmed": {
            "type": [
              "null",
              "boolean"
            ]
          }
        },
        "additionalProperties": false
      },
      "UpdateQuotaRequest": {
        "required": [
          "free_per_account_per_month",
          "free_per_ip_per_day"
        ],
        "type": "object",
        "properties": {
          "free_per_account_per_month": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "free_per_ip_per_day": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "UpdateSettingsRequest": {
        "required": [
          "public_registration"
        ],
        "type": "object",
        "properties": {
          "public_registration": {
            "type": [
              "null",
              "boolean"
            ]
          }
        },
        "additionalProperties": false
      }
    }
  },
  "tags": [
    {
      "name": "Listing localization"
    },
    {
      "name": "Tariff classification"
    },
    {
      "name": "E-invoice"
    },
    {
      "name": "Account"
    },
    {
      "name": "Admin"
    }
  ]
}