Telenor Sverige Invoice API

The Invoice API from Telenor Sverige — 6 operation(s) for invoice.

Operations 7

GET /api/invoiceManagement/v1/invoices/{agreementId} Gets invoices for an agreement #
GET /api/invoiceManagement/v1/invoices/settings/{agreementId} Gets invoice settings for an agreement #
POST /api/invoiceManagement/v1/invoices Creates invoice for an agreement #
PATCH /api/invoiceManagement/v1/invoices Updates invoice for an agreement #
PATCH /api/invoiceManagement/v1/invoices/{msisdn} Updates single subscription invoice #
PATCH /api/invoiceManagement/v1/costCentre Renames the agreement invoice cost centre #
PATCH /api/invoiceManagement/v1/assignCostCentre/{agreementId} Assigns cost centre to multiple single accounts #

Work with this as data

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

MCP server

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

https://apis.io/mcp

Tools for apis

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

Call it yourself

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

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

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

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

OpenAPI Specification

telenor-sverige-invoice-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Mobile Subscriptions Administration Invoice API
  description: 'Provides a corporate information model, generic for SME and Large. Used for agreement details for existing customers as creating new agreements or subscriptions.

    This is an API intended for software developers and system integrators implementing client applications for handling order B2B segment. It is assumed that the reader is familiar with software API concepts such as REST, JSON and OpenAPI interface specification OpenAPI Specification.


    Response Codes

    This API follows standard response codes for REST APIs please refer to W3C response codes'
  termsOfService: https://www.telenor.se/foretag/kundservice/villkor-prislistor-och-blanketter/villkor/allmanna-villkor/
  contact:
    name: Telenor Support
    url: https://www.telenor.se/foretag/kundservice/
    email: ''
  version: 1.80.0
servers:
- url: https://apis.telenor.se/
  description: Production environment
tags:
- name: Invoice
paths:
  /api/invoiceManagement/v1/invoices/{agreementId}:
    get:
      tags:
      - Invoice
      summary: Gets invoices for an agreement
      operationId: Invoice_Invoices
      parameters:
      - name: X-Transaction-Id
        in: header
        description: Transaction id defined by calling system could be for instance Epoch time
        schema:
          type: string
        example: '1580371581117'
      - name: agreementId
        in: path
        description: Agreement ID
        required: true
        schema:
          type:
          - integer
          - 'null'
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoicesView'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '422':
          description: Unprocessable Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
      security:
      - bearer-access-token: []
  /api/invoiceManagement/v1/invoices/settings/{agreementId}:
    get:
      tags:
      - Invoice
      summary: Gets invoice settings for an agreement
      operationId: Invoice_InvoiceSettings
      parameters:
      - name: X-Transaction-Id
        in: header
        description: Transaction id defined by calling system could be for instance Epoch time
        schema:
          type: string
        example: '1580371581117'
      - name: agreementId
        in: path
        description: Agreement ID
        required: true
        schema:
          type:
          - integer
          - 'null'
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceSettingsView'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '422':
          description: Unprocessable Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
      security:
      - bearer-access-token: []
  /api/invoiceManagement/v1/invoices:
    post:
      tags:
      - Invoice
      summary: Creates invoice for an agreement
      operationId: Invoice_CreateInvoice
      parameters:
      - name: X-Transaction-Id
        in: header
        description: Transaction id defined by calling system could be for instance Epoch time
        schema:
          type: string
        example: '1580371581117'
      - name: X-Order-User
        in: header
        description: User identity of who is placing the order as a JWT, supported claim types ['sub' * required, 'email', 'family_name', 'given_name']
        example: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJoLnNvbG80MiIsImVtYWlsIjoiaGFuQHNvbG8ubG9jYWwiLCJnaXZlbl9uYW1lIjoiSGFuIiwiZmFtaWx5X25hbWUiOiJTb2xvIiwibmJmIjoxNjgzNjM0Mjg1LCJleHAiOjE2ODM2Mzc4ODUsImlhdCI6MTY4MzYzNDI4NX0.
      requestBody:
        description: Create invoice order
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.CreateInvoiceInput'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.CreateInvoiceResult'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '422':
          description: Unprocessable Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
      security:
      - bearer-access-token: []
    patch:
      tags:
      - Invoice
      summary: Updates invoice for an agreement
      operationId: Invoice_UpdateInvoice
      parameters:
      - name: X-Transaction-Id
        in: header
        description: Transaction id defined by calling system could be for instance Epoch time
        schema:
          type: string
        example: '1580371581117'
      - name: X-Order-User
        in: header
        description: User identity of who is placing the order as a JWT, supported claim types ['sub' * required, 'email', 'family_name', 'given_name']
        example: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJoLnNvbG80MiIsImVtYWlsIjoiaGFuQHNvbG8ubG9jYWwiLCJnaXZlbl9uYW1lIjoiSGFuIiwiZmFtaWx5X25hbWUiOiJTb2xvIiwibmJmIjoxNjgzNjM0Mjg1LCJleHAiOjE2ODM2Mzc4ODUsImlhdCI6MTY4MzYzNDI4NX0.
      requestBody:
        description: Update invoice order
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.UpdateInvoiceInput'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.UpdateInvoiceResult'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
      security:
      - bearer-access-token: []
  /api/invoiceManagement/v1/invoices/{msisdn}:
    patch:
      tags:
      - Invoice
      summary: Updates single subscription invoice
      operationId: Invoice_UpdateSingleInvoice
      parameters:
      - name: X-Transaction-Id
        in: header
        description: Transaction id defined by calling system could be for instance Epoch time
        schema:
          type: string
        example: '1580371581117'
      - name: msisdn
        in: path
        description: Swedish mobile number
        required: true
        schema:
          type:
          - string
          - 'null'
          description: Swedish mobile number
          example: '46701740605'
      - name: X-Order-User
        in: header
        description: User identity of who is placing the order as a JWT, supported claim types ['sub' * required, 'email', 'family_name', 'given_name']
        example: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJoLnNvbG80MiIsImVtYWlsIjoiaGFuQHNvbG8ubG9jYWwiLCJnaXZlbl9uYW1lIjoiSGFuIiwiZmFtaWx5X25hbWUiOiJTb2xvIiwibmJmIjoxNjgzNjM0Mjg1LCJleHAiOjE2ODM2Mzc4ODUsImlhdCI6MTY4MzYzNDI4NX0.
      requestBody:
        description: Update single invoice order
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoreApi.Invoices.UpdateSingleInvoice.Models.UpdateSingleInvoiceInput'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Invoices.UpdateSingleInvoice.Models.UpdateSingleInvoiceResult'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
      security:
      - bearer-access-token: []
  /api/invoiceManagement/v1/costCentre:
    patch:
      tags:
      - Invoice
      summary: Renames the agreement invoice cost centre
      operationId: Invoice_RenameCostCentre
      parameters:
      - name: X-Transaction-Id
        in: header
        description: Transaction id defined by calling system could be for instance Epoch time
        schema:
          type: string
        example: '1580371581117'
      - name: X-Order-User
        in: header
        description: User identity of who is placing the order as a JWT, supported claim types ['sub' * required, 'email', 'family_name', 'given_name']
        example: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJoLnNvbG80MiIsImVtYWlsIjoiaGFuQHNvbG8ubG9jYWwiLCJnaXZlbl9uYW1lIjoiSGFuIiwiZmFtaWx5X25hbWUiOiJTb2xvIiwibmJmIjoxNjgzNjM0Mjg1LCJleHAiOjE2ODM2Mzc4ODUsImlhdCI6MTY4MzYzNDI4NX0.
      requestBody:
        description: Rename cost centre order
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.RenameCostCentreInput'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.UpdateInvoiceResult'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
      security:
      - bearer-access-token: []
  /api/invoiceManagement/v1/assignCostCentre/{agreementId}:
    patch:
      tags:
      - Invoice
      summary: Assigns cost centre to multiple single accounts
      operationId: Invoice_AssignCostCentre
      parameters:
      - name: X-Transaction-Id
        in: header
        description: Transaction id defined by calling system could be for instance Epoch time
        schema:
          type: string
        example: '1580371581117'
      - name: agreementId
        in: path
        description: Agreement ID
        required: true
        schema:
          type:
          - integer
          - 'null'
          format: int32
      - name: X-Order-User
        in: header
        description: User identity of who is placing the order as a JWT, supported claim types ['sub' * required, 'email', 'family_name', 'given_name']
        example: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJoLnNvbG80MiIsImVtYWlsIjoiaGFuQHNvbG8ubG9jYWwiLCJnaXZlbl9uYW1lIjoiSGFuIiwiZmFtaWx5X25hbWUiOiJTb2xvIiwibmJmIjoxNjgzNjM0Mjg1LCJleHAiOjE2ODM2Mzc4ODUsImlhdCI6MTY4MzYzNDI4NX0.
      requestBody:
        description: Billing account list container
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoreApi.Invoices.UpdateMultipleInvoices.Models.BillingAccountsInput'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Invoices.UpdateSingleInvoice.Models.AssignCostCentreResult'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '422':
          description: Unprocessable Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreApi.Common.ErrorResponse'
      security:
      - bearer-access-token: []
components:
  schemas:
    CoreApi.Invoices.Invoice.Models.CostCentreInput:
      required:
      - Name
      type: object
      properties:
        Name:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.UpdateInvoiceResult:
      type: object
      properties:
        OrderId:
          type: integer
          format: int32
        InvoiceName:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.UpdateSingleInvoice.Models.UpdateSingleInvoiceInput:
      required:
      - InvoiceAddress
      type: object
      properties:
        InvoiceAddress:
          $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceAddressInput'
        EventLogCharacteristics:
          type:
          - object
          - 'null'
          additionalProperties:
            type:
            - string
            - 'null'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.InvoiceAddress:
      type: object
      properties:
        Address1:
          type:
          - string
          - 'null'
        Address2:
          type:
          - string
          - 'null'
        City:
          type:
          - string
          - 'null'
        Zip:
          type:
          - string
          - 'null'
        CountryCode:
          type:
          - string
          - 'null'
        Reference:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.UpdateSingleInvoice.Models.AssignCostCentreResult:
      type: object
      properties:
        OrderId:
          type: integer
          format: int32
        Items:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.AssignCostCentreItemResult'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.CreateInvoiceResult:
      type: object
      properties:
        OrderId:
          type: integer
          format: int32
        InvoiceName:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.InvoiceSettingsValue:
      type: object
      properties:
        Value:
          type:
          - string
          - 'null'
        DisplayName:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.UpdateSingleInvoice.Models.UpdateSingleInvoiceResult:
      type: object
      properties:
        OrderId:
          type: integer
          format: int32
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.UpdateInvoiceInput:
      required:
      - AgreementId
      - CostCentres
      - InvoiceName
      type: object
      properties:
        InvoiceName:
          type:
          - string
          - 'null'
        AgreementId:
          type:
          - integer
          - 'null'
          format: int32
        CostCentres:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.CostCentreInput'
        Address:
          $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceAddressInput'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.InvoiceSettingsView:
      type: object
      properties:
        BillingFrequencies:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceSettingsValue'
        BillingCycles:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceSettingsValue'
        CreditLimitCodes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceSettingsValue'
        InvoiceTypes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceSettingsValue'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.InvoiceView:
      type: object
      properties:
        InvoiceName:
          type:
          - string
          - 'null'
        AccountId:
          type: integer
          format: int32
        InvoiceReference:
          type:
          - string
          - 'null'
        CostCentres:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceCostCentreView'
        Address:
          $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceAddress'
        BillingCycle:
          type:
          - string
          - 'null'
        BillingFrequency:
          type:
          - string
          - 'null'
        CreditLimitCode:
          type:
          - string
          - 'null'
        InvoiceType:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.UpdateMultipleInvoices.Models.BillingAccountsInput:
      required:
      - BillingAccounts
      type: object
      properties:
        BillingAccounts:
          type: array
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.UpdateMultipleInvoices.Models.BillingAccountInput'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.CreateInvoiceInput:
      required:
      - Address
      - AgreementId
      - BillingCycle
      - BillingFrequency
      - CostCentres
      - CreditLimitCode
      - InvoiceName
      - InvoiceType
      type: object
      properties:
        InvoiceName:
          type:
          - string
          - 'null'
        AgreementId:
          type:
          - integer
          - 'null'
          format: int32
        CostCentres:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.CostCentreInput'
        Address:
          $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceAddressInput'
        BillingFrequency:
          type:
          - string
          - 'null'
        BillingCycle:
          type:
          - string
          - 'null'
        InvoiceType:
          type:
          - string
          - 'null'
        CreditLimitCode:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.InvoiceAddressInput:
      required:
      - City
      - CountryCode
      - Zip
      type: object
      properties:
        Address1:
          maxLength: 30
          type:
          - string
          - 'null'
        Address2:
          maxLength: 30
          type:
          - string
          - 'null'
        Reference:
          maxLength: 20
          type:
          - string
          - 'null'
        City:
          maxLength: 20
          minLength: 1
          type: string
        Zip:
          maxLength: 9
          minLength: 1
          type: string
        CountryCode:
          maxLength: 3
          minLength: 2
          type: string
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.InvoicesView:
      type: object
      properties:
        AgreementId:
          type:
          - integer
          - 'null'
          format: int32
        Invoices:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CoreApi.Invoices.Invoice.Models.InvoiceView'
      additionalProperties: false
    CoreApi.Invoices.UpdateMultipleInvoices.Models.BillingAccountInput:
      type: object
      properties:
        AccountId:
          type:
          - string
          - 'null'
        PhoneNumber:
          type:
          - string
          - 'null'
        CostCentre:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Invoices.AssignCostCentreItemResult:
      required:
      - AccountId
      - CostCentre
      - OrderId
      type: object
      properties:
        OrderId:
          type: integer
          format: int32
        PhoneNumber:
          type:
          - string
          - 'null'
        CostCentre:
          type:
          - string
          - 'null'
        AccountId:
          type: integer
          format: int32
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.InvoiceCostCentreView:
      required:
      - Name
      type: object
      properties:
        Name:
          type:
          - string
          - 'null'
      additionalProperties: false
    CoreApi.Common.ErrorResponse:
      type: object
      properties:
        ErrorMessage:
          type:
          - string
          - 'null'
        ErrorCode:
          type: integer
          format: int32
      additionalProperties: false
    CoreApi.Invoices.Invoice.Models.RenameCostCentreInput:
      required:
      - AgreementId
      - InvoiceName
      - NewCostCentre
      - OldCostCentre
      type: object
      properties:
        AgreementId:
          type:
          - integer
          - 'null'
          format: int32
        InvoiceName:
          type:
          - string
          - 'null'
        OldCostCentre:
          type:
          - string
          - 'null'
        NewCostCentre:
          type:
          - string
          - 'null'
      additionalProperties: false
x-provenance:
  method: harvested
  publisher: Telenor Sverige
  source: https://developer.telenor.se/mobile-order/openapi
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)