Entur Payment Agreements API

Register and manage payment agreements for recurring billing.

Operations 5

GET /v1/payment-agreements/{agreementId} Get payment agreement status #
PATCH /v1/payment-agreements/{agreementId} Update payment agreement #
POST /v1/payment-agreements/{agreementId}/stop Stop payment agreement #
GET /v1/payment-agreements Query payment agreements #
POST /v1/payment-agreements Register a new payment agreement #

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-partner-dataset-rpt-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-partner-dataset-download-job-dto-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-partner-settlement-import-dto-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-partner-settlement-import-response-dto-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-given-consent-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-consent-crm-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-consent-base-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-given-consent-bulk-update-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-given-consent-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-consent-base-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-customer-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-temporary-customer-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-customer-post-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-customer-put-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-ecard-ownership-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-temporary-customer-post-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-result-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-quota-request-v1-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-quota-configuration-response-v1-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-quota-response-v1-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-reservation-response-v1-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-quota-configuration-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-multi-stock-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-search-geo-location-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-search-authority-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-search-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-search-trip-pattern-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-collection-info-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-customer-input-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-search-offer-input-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-subscriber-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-extend-expiry-time-input-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-update-traveller-input-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-note-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-note-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-page-of-order-note-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-line-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-fee-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-create-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-line-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-payment-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-transaction-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-credit-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-transaction-import-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-transaction-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-terminal-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-program-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-transaction-by-order-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-current-level-summary-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-current-level-summary-query-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-point-period-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-customer-membership-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-employee-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-imported-employee-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-imported-employee-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-contract-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-imported-employee-merge-patch-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-entitlement-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-zonal-stop-place-distance-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-fare-zone-distance-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-fare-zone-distance-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-coordinate-distance-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-distance-calculation-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-fare-table-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-fare-table-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-version-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-version-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-purchase-window-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-purchase-window-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-purchase-window-list-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-supplement-product-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-supplement-product-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-sales-offer-package-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-sales-offer-package-publication-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-sales-offer-package-assignment-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-supplement-product-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-generic-parameter-assignment-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-exchanging-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-amount-of-price-unit-product-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-capped-discount-right-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-sale-discount-right-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-netex-import-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-send-receipt-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-user-receipt-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-receipt-type-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-refund-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-refund-option-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-dry-run-refund-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-compensation-operation-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-refund-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-compensation-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-change-order-lines-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-order-line-ids-and-reservation-ids-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-reserve-offers-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-add-supplement-products-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-reserve-third-party-products-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-reserve-third-party-products-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-seating-offer-debug-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-rebooked-reservation-response-v1-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-rebooked-reservation-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-reservation-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-seating-offer-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-reservation-line-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-reserve-specific-seats-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-map-string-string-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-seq-cancel-seat-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-seq-companion-for-seat-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-seq-journey-query-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-seq-product-attribute-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-asset-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-booking-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-support-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-one-stop-booking-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-one-stop-booking-event-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-notification-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-post-skoleskyss-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-post-skoleskyss-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/entur/refs/heads/main/json-schema/entur-delete-skoleskyss-response-schema.json

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/entur:entur-payment-agreements-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

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

Get an API key

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

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

OpenAPI Specification

entur-payment-agreements-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Payments Payment Agreements API
  description: The Payments API acts as a gateway to external payment service providers and provides endpoints to create, process and credit payment transactions.
  contact:
    name: Entur
    url: https://developer.entur.org
  version: 2026.10.2
servers:
- url: https://api.entur.io/sales
  description: Entur's Production environment
- url: https://api.staging.entur.io/sales
  description: Entur's Staging environment
- url: https://api.dev.entur.io/sales
  description: Entur's Development environment
security:
- jwt: []
tags:
- name: Payment Agreements
  description: Register and manage payment agreements for recurring billing.
paths:
  /v1/payment-agreements/{agreementId}:
    parameters:
    - $ref: '#/components/parameters/agreementIdPathParam'
    - $ref: '#/components/parameters/ET-Client-Name'
    - $ref: '#/components/parameters/X-Correlation-Id'
    get:
      tags:
      - Payment Agreements
      summary: Get payment agreement status
      description: Returns the current status and details of a payment agreement. The Vipps confirmation URL is only included while the agreement is pending customer confirmation (CREATED or PENDING status).
      operationId: getPaymentAgreement
      parameters:
      - $ref: '#/components/parameters/dciHeader'
      - $ref: '#/components/parameters/posHeader'
      responses:
        '200':
          description: Ok
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/PaymentAgreementResponse'
              examples:
                vipps-pending:
                  summary: Vipps-avtale som venter på kundebekreftelse
                  value:
                    agreementId: 42
                    status: PENDING
                    productName: Månedlig reisekort Oslo
                    productDescription: Månedlig reisekort gyldig i Oslo-sonen
                    pricing:
                      agreementType: FIXED
                      amount: 49900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 1
                    providerData:
                      agreementProvider: VIPPS
                      confirmationUrl: https://api.vipps.no/dwo-api-application/v1/deeplink/vippsgateway?v=2&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
                vipps-active:
                  summary: Vipps-avtale som er aktiv (uten signeringslenke)
                  value:
                    agreementId: 42
                    status: ACTIVE
                    productName: Månedlig reisekort Oslo
                    pricing:
                      agreementType: FIXED
                      amount: 49900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 1
                    providerData:
                      agreementProvider: VIPPS
        '404':
          $ref: '#/components/responses/notFound'
        '500':
          $ref: '#/components/responses/internalServerError'
    patch:
      tags:
      - Payment Agreements
      summary: Update payment agreement
      description: 'Updates the mutable parts of a payment agreement, both at the provider and locally.


        Every field is optional and at least one must be supplied; omitting a field leaves it unchanged.


        `pricing` is **not currently supported** — supplying it returns 501. Only FLEXIBLE agreements can be created, and FLEXIBLE pricing has no updatable fields. The `pricing` field and the underlying `FixedPricing`/`VariablePricing` schemas are kept in the spec and reserved for future use; they will be enabled when FIXED and VARIABLE agreement types are introduced.


        `productName` and the provider''s `merchantAgreementUrl` can be updated on FLEXIBLE agreements.


        The agreement must be in status PENDING or ACTIVE.'
      operationId: updatePaymentAgreement
      parameters:
      - $ref: '#/components/parameters/dciHeader'
      - $ref: '#/components/parameters/posHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePaymentAgreementRequest'
            examples:
              fixed-new-amount:
                summary: Ny pris på en avtale med fast pris (hele pricing-objektet må sendes)
                value:
                  pricing:
                    agreementType: FIXED
                    amount: 59900
                    currency: NOK
                    interval:
                      unit: MONTH
                      count: 1
              fixed-new-amount-and-interval:
                summary: Ny pris og nytt intervall på en avtale med fast pris
                value:
                  pricing:
                    agreementType: FIXED
                    amount: 59900
                    currency: NOK
                    interval:
                      unit: MONTH
                      count: 3
              variable-new-suggested-max-amount:
                summary: Nytt foreslått maksbeløp på en avtale med variabel pris
                value:
                  pricing:
                    agreementType: VARIABLE
                    amount: 49900
                    currency: NOK
                    interval:
                      unit: MONTH
                      count: 1
                    suggestedMaxAmount: 120000
              product-name-only:
                summary: Bare nytt produktnavn — gjelder alle avtaletyper
                value:
                  productName: Månedlig reisekort Oslo og Viken
              product-description-only:
                summary: Bare ny produktbeskrivelse — gjelder alle avtaletyper
                value:
                  productDescription: Månedlig reisekort gyldig i Oslo og Viken
              merchant-agreement-url-only:
                summary: Bare ny lenke til avtaleadministrasjon — gjelder alle avtaletyper
                value:
                  providerData:
                    agreementProvider: VIPPS
                    merchantAgreementUrl: https://entur.no/avtaler/456
              product-name-and-url:
                summary: Produktnavn og avtalelenke samtidig, uten å røre pricing
                value:
                  productName: Månedlig reisekort Oslo og Viken
                  providerData:
                    agreementProvider: VIPPS
                    merchantAgreementUrl: https://entur.no/avtaler/456
        required: true
      responses:
        '200':
          description: Ok
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/PaymentAgreementResponse'
              examples:
                fixed-updated:
                  summary: Oppdatert avtale med fast pris
                  value:
                    agreementId: 42
                    status: ACTIVE
                    productName: Månedlig reisekort Oslo
                    pricing:
                      agreementType: FIXED
                      amount: 59900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 3
                    providerData:
                      agreementProvider: VIPPS
                variable-updated:
                  summary: Oppdatert avtale med variabel pris
                  value:
                    agreementId: 43
                    status: ACTIVE
                    productName: Fleksibelt reisekort
                    pricing:
                      agreementType: VARIABLE
                      amount: 49900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 1
                      suggestedMaxAmount: 120000
                    providerData:
                      agreementProvider: VIPPS
        '400':
          $ref: '#/components/responses/badRequestValidationError'
        '404':
          $ref: '#/components/responses/notFound'
        '409':
          $ref: '#/components/responses/conflict'
        '500':
          $ref: '#/components/responses/internalServerError'
        '501':
          $ref: '#/components/responses/notImplemented'
  /v1/payment-agreements/{agreementId}/stop:
    parameters:
    - $ref: '#/components/parameters/agreementIdPathParam'
    - $ref: '#/components/parameters/ET-Client-Name'
    - $ref: '#/components/parameters/X-Correlation-Id'
    post:
      tags:
      - Payment Agreements
      summary: Stop payment agreement
      description: 'Stops a payment agreement, both at the provider and locally. The agreement must be in status PENDING or ACTIVE.


        **Stopping is irreversible.** A stopped agreement cannot be reactivated — resuming service for the customer requires setting up a new agreement. The provider also cancels any outstanding charges on the agreement as part of the stop, so a charge that has not yet been captured will not be captured afterwards.


        Any charge on the agreement that has not yet reached the provider is cancelled as part of the stop, and its transaction ends up CANCELLED. That covers the initial charge of an agreement stopped before the customer confirmed it, and a charge on an ACTIVE agreement that had been created but not yet claimed. Neither can make progress once the agreement is stopped.


        The endpoint is idempotent: stopping an already STOPPED agreement returns 200 with the unchanged agreement and does not call the provider. An agreement in status CREATED or EXPIRED cannot be stopped and is rejected with 409.


        The request has no body.'
      operationId: stopPaymentAgreement
      parameters:
      - $ref: '#/components/parameters/dciHeader'
      - $ref: '#/components/parameters/posHeader'
      responses:
        '200':
          description: Ok
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/PaymentAgreementResponse'
              examples:
                stopped-active-agreement:
                  summary: Aktiv avtale som er stoppet
                  value:
                    agreementId: 42
                    status: STOPPED
                    productName: Månedlig reisekort Oslo
                    pricing:
                      agreementType: FLEXIBLE
                      currency: NOK
                    providerData:
                      agreementProvider: VIPPS
                stopped-pending-agreement:
                  summary: Avtale som ble stoppet før kunden rakk å bekrefte den
                  value:
                    agreementId: 43
                    status: STOPPED
                    productName: Månedlig reisekort Oslo
                    pricing:
                      agreementType: FLEXIBLE
                      currency: NOK
                    providerData:
                      agreementProvider: VIPPS
        '400':
          $ref: '#/components/responses/badRequestValidationError'
        '404':
          $ref: '#/components/responses/notFound'
        '409':
          $ref: '#/components/responses/conflict'
        '500':
          $ref: '#/components/responses/internalServerError'
  /v1/payment-agreements:
    parameters:
    - $ref: '#/components/parameters/ET-Client-Name'
    - $ref: '#/components/parameters/X-Correlation-Id'
    get:
      tags:
      - Payment Agreements
      summary: Query payment agreements
      description: Returns payment agreements for a given customer across all organisations the caller has access to. Optionally filter by one or more statuses.
      operationId: queryPaymentAgreements
      parameters:
      - name: customerNumber
        in: query
        description: Customer number to query agreements for. Required.
        required: true
        style: form
        explode: true
        schema:
          type: string
      - name: status
        in: query
        description: Optional. Filter by one or more agreement statuses.
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
            enum:
            - CREATED
            - PENDING
            - ACTIVE
            - STOPPED
            - EXPIRED
      responses:
        '200':
          description: Ok
          content:
            application/hal+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PaymentAgreementResponse'
              examples:
                single-active-agreement:
                  summary: Kunde med én aktiv Vipps-avtale
                  value:
                  - agreementId: 42
                    status: ACTIVE
                    productName: Månedlig reisekort Oslo
                    pricing:
                      agreementType: FIXED
                      amount: 49900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 1
                    providerData:
                      agreementProvider: VIPPS
                multiple-agreements-mixed-status:
                  summary: Kunde med flere avtaler i ulike statuser
                  value:
                  - agreementId: 42
                    status: ACTIVE
                    productName: Månedlig reisekort Oslo
                    pricing:
                      agreementType: FIXED
                      amount: 49900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 1
                    providerData:
                      agreementProvider: VIPPS
                  - agreementId: 51
                    status: PENDING
                    productName: Fleksibelt reisekort
                    pricing:
                      agreementType: FLEXIBLE
                      currency: NOK
                    providerData:
                      agreementProvider: VIPPS
                      confirmationUrl: https://api.vipps.no/dwo-api-application/v1/deeplink/vippsgateway?v=2&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
                no-agreements:
                  summary: Kunde uten avtaler (tom liste)
                  value: []
        '500':
          $ref: '#/components/responses/internalServerError'
    post:
      tags:
      - Payment Agreements
      summary: Register a new payment agreement
      description: 'Registers a payment agreement with the specified provider. For Vipps, this drafts the agreement and returns a confirmation URL to redirect the customer to.


        Only **FLEXIBLE** pricing is currently supported. Supplying `FixedPricing` or `VariablePricing` returns 501; those agreement types are reserved for future use.'
      operationId: createPaymentAgreement
      parameters:
      - $ref: '#/components/parameters/dciHeader'
      - $ref: '#/components/parameters/posHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePaymentAgreementRequest'
            examples:
              vipps-fixed-pricing:
                summary: Vipps-avtale med fast pris
                value:
                  productName: Månedlig reisekort Oslo
                  productDescription: Månedlig reisekort gyldig i Oslo-sonen
                  customerNumber: '12345678'
                  pricing:
                    agreementType: FIXED
                    amount: 49900
                    currency: NOK
                    interval:
                      unit: MONTH
                      count: 1
                  providerData:
                    agreementProvider: VIPPS
                    merchantRedirectUrl: https://entur.no/avtaler/bekreftelse
                    merchantAgreementUrl: https://entur.no/avtaler/123
                    phoneNumber: '4791234567'
              vipps-variable-pricing:
                summary: Vipps-avtale med variabel pris
                value:
                  productName: Fleksibelt reisekort
                  customerNumber: '12345678'
                  pricing:
                    agreementType: VARIABLE
                    amount: 49900
                    currency: NOK
                    interval:
                      unit: MONTH
                      count: 1
                    suggestedMaxAmount: 100000
                  providerData:
                    agreementProvider: VIPPS
                    merchantRedirectUrl: https://entur.no/avtaler/bekreftelse
                    merchantAgreementUrl: https://entur.no/avtaler/123
              vipps-flexible-pricing:
                summary: Vipps-avtale med fleksibel pris
                value:
                  productName: Reisekortkonto
                  customerNumber: '12345678'
                  pricing:
                    agreementType: FLEXIBLE
                    currency: NOK
                  providerData:
                    agreementProvider: VIPPS
                    merchantRedirectUrl: https://entur.no/avtaler/bekreftelse
                    merchantAgreementUrl: https://entur.no/avtaler/123
        required: true
      responses:
        '201':
          description: Created
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/PaymentAgreementResponse'
              examples:
                vipps-fixed-pricing:
                  summary: Vipps-avtale opprettet med fast pris
                  value:
                    agreementId: 42
                    status: PENDING
                    productName: Månedlig reisekort Oslo
                    productDescription: Månedlig reisekort gyldig i Oslo-sonen
                    pricing:
                      agreementType: FIXED
                      amount: 49900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 1
                    providerData:
                      agreementProvider: VIPPS
                      confirmationUrl: https://api.vipps.no/dwo-api-application/v1/deeplink/vippsgateway?v=2&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
                vipps-variable-pricing:
                  summary: Vipps-avtale opprettet med variabel pris
                  value:
                    agreementId: 43
                    status: PENDING
                    productName: Fleksibelt reisekort
                    pricing:
                      agreementType: VARIABLE
                      amount: 49900
                      currency: NOK
                      interval:
                        unit: MONTH
                        count: 1
                      suggestedMaxAmount: 100000
                    providerData:
                      agreementProvider: VIPPS
                      confirmationUrl: https://api.vipps.no/dwo-api-application/v1/deeplink/vippsgateway?v=2&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
                vipps-flexible-pricing:
                  summary: Vipps-avtale opprettet med fleksibel pris
                  value:
                    agreementId: 44
                    status: PENDING
                    productName: Reisekortkonto
                    pricing:
                      agreementType: FLEXIBLE
                      currency: NOK
                    providerData:
                      agreementProvider: VIPPS
                      confirmationUrl: https://api.vipps.no/dwo-api-application/v1/deeplink/vippsgateway?v=2&token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
        '400':
          $ref: '#/components/responses/badRequestValidationError'
        '500':
          $ref: '#/components/responses/internalServerError'
        '501':
          $ref: '#/components/responses/notImplemented'
components:
  schemas:
    UpdatePaymentAgreementRequest:
      type: object
      properties:
        productName:
          maxLength: 45
          type: string
          description: Name of the product or subscription.
        productDescription:
          maxLength: 100
          type: string
          description: Description of the product or subscription, shown to the customer in the provider's app.
        pricing:
          $ref: '#/components/schemas/AgreementUpdatePricing'
        providerData:
          $ref: '#/components/schemas/AgreementUpdateProviderData'
      description: Request to update a payment agreement. Every field is optional, but at least one must be supplied — omitting a field leaves it unchanged. `pricing` is not currently supported and returns 501; only `productName`, `productDescription`, and `providerData` can be updated on FLEXIBLE agreements.
    PaymentError:
      title: PaymentError
      required:
      - error
      - exception
      - message
      - path
      - status
      - timestamp
      type: object
      properties:
        error:
          type: string
          description: The error that occurred.
          examples:
          - Internal Server Error
        exception:
          type: string
          description: What exception caused the error.
          examples:
          - org.entur.payment.faulthandling.exceptions.psp.InternalPSPFailureException
        message:
          type: string
          description: A message detailing the error.
          examples:
          - An internal error occurred in the PSP. message='Unable to sale', errorCode='99', errorSource='Netaxept', errorText='Internal failure'
        path:
          type: string
          description: The url path that was accessed when the error happenened.
          examples:
          - /v1/payments/1/transactions/1/capture
        status:
          type: integer
          description: The http status of the response.
          format: int32
          examples:
          - 500
        timestamp:
          type: string
          description: When the error occurred
          format: date-time
          examples:
          - '2025-01-12T16:13:13Z'
        errorReason:
          type: string
          description: 'In some cases, the client is required to act upon getting a PaymentError. When action is required from the client, this field will be populated. Valid values: SOFT_DECLINE, REFUSED_BY_ISSUER, ISSUER_UNAVAILABLE, RESOURCE_BUSY, USER_ERROR, COMPLIANCE_CHECK_FAILED.'
          examples:
          - SOFT_DECLINE
      x-examples: {}
      examples:
      - error: Internal Server Error
        exception: org.entur.payment.faulthandling.exceptions.psp.InternalPSPFailureException
        message: An internal error occurred in the PSP. message='Unable to sale', errorCode='99', errorSource='Netaxept', errorText='Internal failure'
        path: /v1/payments/1/transactions/1/capture
        status: 500
        timestamp: '2025-08-24T14:15:22Z'
    AgreementUpdateProviderData:
      required:
      - agreementProvider
      type: object
      properties:
        agreementProvider:
          type: string
          description: The payment provider for the agreement. Cannot be changed, and must match the agreement's existing provider.
          enum:
          - VIPPS
      description: Base provider-specific data for updating an agreement. Contains only the fields the provider allows changing after the agreement exists — which is why this is a separate schema from AgreementRequestProviderData.
      discriminator:
        propertyName: agreementProvider
        mapping:
          VIPPS: '#/components/schemas/VippsAgreementUpdateProviderData'
    FixedPricing:
      description: Fixed pricing charges a set amount each interval. **Not yet supported** — creating a FIXED agreement returns 501. Reserved for future use.
      allOf:
      - $ref: '#/components/schemas/AgreementPricing'
      - required:
        - amount
        - currency
        - interval
        type: object
        properties:
          amount:
            type: integer
            description: 'The fixed amount to charge per interval, in minor units, e.g: øre.'
          currency:
            maxLength: 3
            minLength: 3
            type: string
            description: ISO 4217 currency code.
          interval:
            $ref: '#/components/schemas/AgreementInterval'
    AgreementPricing:
      required:
      - agreementType
      type: object
      properties:
        agreementType:
          type: string
          description: The pricing model type.
          enum:
          - FIXED
          - VARIABLE
          - FLEXIBLE
      description: Base pricing model for a payment agreement.
      discriminator:
        propertyName: agreementType
        mapping:
          FIXED: '#/components/schemas/FixedPricing'
          VARIABLE: '#/components/schemas/VariablePricing'
          FLEXIBLE: '#/components/schemas/FlexiblePricing'
    CreatePaymentAgreementRequest:
      required:
      - customerNumber
      - pricing
      - productName
      - providerData
      type: object
      properties:
        productName:
          maxLength: 45
          type: string
          description: Name of the product or subscription.
        productDescription:
          maxLength: 100
          type: string
          description: Optional description of the product or subscription, shown to the customer in the provider's app.
        customerNumber:
          type: string
          description: The customer number for the agreement.
        pricing:
          $ref: '#/components/schemas/AgreementPricing'
        providerData:
          $ref: '#/components/schemas/AgreementRequestProviderData'
      description: Request to create a new payment agreement.
    AgreementRequestProviderData:
      required:
      - agreementProvider
      type: object
      properties:
        agreementProvider:
          type: string
          description: The payment provider for the agreement.
          enum:
          - VIPPS
      description: Base provider-specific data for creating an agreement.
      discriminator:
        propertyName: agreementProvider
        mapping:
          VIPPS: '#/components/schemas/VippsAgreementRequestProviderData'
    PaymentAgreementResponse:
      type: object
      properties:
        agreementId:
          type: integer
          description: The unique identifier of the payment agreement.
          format: int64
        status:
          type: string
          description: The current status of the agreement.
          enum:
          - CREATED
          - PENDING
          - ACTIVE
          - STOPPED
          - EXPIRED
        productName:
          type: string
          description: Name of the product or subscription.
        productDescription:
          type: string
          description: Description of the product or subscription, shown to the customer in the provider's app.
        pricing:
          $ref: '#/components/schemas/AgreementPricing'
        providerData:
          $ref: '#/components/schemas/AgreementResponseProviderData'
      description: Response containing payment agreement details.
    VariablePricing:
      description: Variable pricing charges a varying amount each interval and requires a suggested maximum amount. **Not yet supported** — creating a VARIABLE agreement returns 501. Reserved for future use.
      allOf:
      - $ref: '#/components/schemas/AgreementPricing'
      - required:
        - amount
        - currency
        - interval
        - suggestedMaxAmount
        type: object
        properties:
          amount:
            type: integer
            description: 'The amount to charge per interval, in minor units, e.g: øre.'
          currency:
            maxLength: 3
            minLength: 3
            type: string
            description: ISO 4217 currency code.
          interval:
            $ref: '#/components/schemas/AgreementInterval'
          suggestedMaxAmount:
            type: integer
            description: A suggested maximum amount per charge, in minor units.
    AgreementResponseProviderData:
      required:
      - agreementProvider
      type: object
      properties:
        agreementProvider:
          type: string
          description: The payment provider for the agreement.
          enum:
          - VIPPS
      description: Base provider-specific data in an agreement response.
      discriminator:
        propertyName: agreementProvider
        mapping:
          VIPPS: '#/components/schemas/VippsAgreementResponseProviderData'
    AgreementUpdatePricing:
      description: Pricing model for updating an agreement. Not yet supported — supplying this field returns 501. FLEXIBLE is absent because its amount is set per charge and has nothing to update; FIXED and VARIABLE are reserved for future use.
      discriminator:
        propertyName: agreementType
        mapping:
          FIXED: '#/components/schemas/FixedPricing'
          VARIABLE: '#/components/schemas/VariablePricing'
      oneOf:
      - $ref: '#/components/schemas/FixedPricing'
      - $ref: '#/components/schemas/VariablePricing'
    AgreementInterval:
      required:
      - count
      - unit
      type: object
      properties:
        unit:
          type: string
          description: The time unit for the interval.
          enum:
          - WEEK
          - MONTH
          - YEAR
        count:
          minimum: 1
          type: integer
          description: The number of time units per interval.
      description: Defines the billing interval for a payment agreement.
  parameters:
    dciHeader:
      name: Entur-Distribution-Channel
      in: header
      description: Distribution channel identifier.
      required: false
      style: simple
      explode: false
      schema:
        type: string
    agreementIdPathParam:
      name: agreementId
      in: path
      description: agreementId
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int64
    posHeader:
      name: Entur-POS
      in: header
      description: Point-of-sale identifier.
      required: true
      style: simple
      explode: false
      schema:
        type: string
    ET-Client-Name:
      name: ET-Client-Name
      in: header
      description: 'Entur Client Header.

        It is required that all consumers identify themselves by using this header.

        Entur will deploy strict rate-limiting policies on API-consumers who do not identify with a header and reserves the right to block unidentified consumers.

        The structure of ET-Client-Name should be: `<company>-<application>`.'
      required: false
      style: simple
      explode: false
      schema:
        type: string
    X-Correlation-Id:
      name: X-Correlation-Id
      in: header
      description: Correlation id
      required: false
      style: simple
      explode: false
      schema:
        type: string
  responses:
    internalServerError:
      description: Internal Server Error
      content:
        application/hal+json:
          schema:
            $ref: '#/components/schemas/PaymentError'
    notImplemented:
      description: Not Implemented
      content:
        application/hal+json:
          schema:
            $ref: '#/components/schemas/PaymentError'
    conflict:
      description: Conflict
      content:
        application/hal+json:
          schema:
            $ref: '#/components/schemas/PaymentError'
    badRequestValidationError:
      description: Bad Request
      content:
        application/hal+json:
          schema:
            $ref: '#/components/schemas/PaymentError'
    notFound:
      description: Not Found
      content:
        application/hal+json:
          schema:
            $ref: '#/components/schemas/PaymentError'
  securitySchemes:
    jwt:
      type: http
      scheme: bearer
      bearerFormat: JWT