Entur · Schema

Exchanging

Exchanging

CompanyPublic TransportJourney PlanningMobilityOpen DataNorwayTransitGraphQL

Properties

Name Type Description
allowed string Allowed.
canChangeClass boolean Whether user can change class.
changed string Changed datetime.
compatibleWithVersionRef string Compatible with version.
created string Created datetime.
derivedFromVersionRef string Derived from version.
description array Description represented in different languages. Language codes are ISO-639.
exchangeableFromAnyTime boolean Can be exchanged or refunded from any point after purchase.
exchangeableFromDuration string Duration to start of period before (negative) or after (positive) the trigger point resellWhen (i.e. either BEFORE_START_OF_VALIDITY_PERIOD or BEFORE_FIRST_USE) or that ticket may be exchanged or refu
exchangeableTo string Type of exchange allowed.
exchangeableUntilAnyTime boolean Can be exchanged or refunded until any point after purchase.
exchangeableUntilDuration string Duration to end of period before (negative) or after ( positive) the trigger point (i.e. either BEFORE_START_OF_VALIDITY_PERIOD or BEFORE_FIRST_USE) that ticket may be exchanged or refunded.
fareFrameRef object
fareTableRefs array References for associated fare tables.
hasFee boolean Has fee.
id string Id.
limitingRule object
limitingRuleRef object
modification string Modification status.
name array Name represented in different languages. Language codes are ISO-639.
nameOfClass string Name of class.
numberOfExchangesAllowed integer Number of times a ticket may be exchanged.
onlyAtCertainDistributionPoints boolean Whether distribution is restricted to certain points.
prices array Prices in different currencies for the exchanging rule.
refundBasis string Basis on which refund is made. See allowed values below.
resellWhen string Event marking when the exchangeable status of the ticket changes.
specifiedProducts array Reference to the product IDs where exchanging to is allowed. Only use this in combination with 'exchangeableTo.SPECIFIED_PRODUCTS'
status string Exchanging status.
toFareClass string Fare class to which can be exchanged.
unusedTicketsOnly boolean Unused tickets only.
version string Exchanging version.
View JSON Schema on GitHub

JSON Schema

entur-exchanging-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/entur/main/json-schema/entur-exchanging-schema.json",
  "title": "Exchanging",
  "description": "Exchanging",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/entur-products-openapi.yml#/components/schemas/Exchanging",
  "required": [
    "changed",
    "created",
    "fareFrameRef",
    "id",
    "modification",
    "nameOfClass",
    "status"
  ],
  "type": "object",
  "properties": {
    "allowed": {
      "type": "string",
      "description": "Allowed.",
      "enum": [
        "NONE",
        "PARTIAL",
        "FULL"
      ]
    },
    "canChangeClass": {
      "type": "boolean",
      "description": "Whether user can change class."
    },
    "changed": {
      "type": "string",
      "description": "Changed datetime."
    },
    "compatibleWithVersionRef": {
      "type": "string",
      "description": "Compatible with version."
    },
    "created": {
      "type": "string",
      "description": "Created datetime."
    },
    "derivedFromVersionRef": {
      "type": "string",
      "description": "Derived from version."
    },
    "description": {
      "type": "array",
      "description": "Description represented in different languages. Language codes are ISO-639.",
      "items": {
        "$ref": "#/$defs/TextInLanguage"
      }
    },
    "exchangeableFromAnyTime": {
      "type": "boolean",
      "description": "Can be exchanged or refunded from any point after purchase."
    },
    "exchangeableFromDuration": {
      "type": "string",
      "description": "Duration to start of period before (negative) or after (positive) the trigger point resellWhen (i.e. either BEFORE_START_OF_VALIDITY_PERIOD or BEFORE_FIRST_USE) or that ticket may be exchanged or refunded."
    },
    "exchangeableTo": {
      "type": "string",
      "description": "Type of exchange allowed.",
      "enum": [
        "ANY_PRODUCT",
        "SAME_PRODUCT_SAME_DAY",
        "SAME_PRODUCT_ANY_DAY",
        "UPGRADE_TO_STANDARD_FARE",
        "SPECIFIED_PRODUCTS"
      ]
    },
    "exchangeableUntilAnyTime": {
      "type": "boolean",
      "description": "Can be exchanged or refunded until any point after purchase."
    },
    "exchangeableUntilDuration": {
      "type": "string",
      "description": "Duration to end of period before (negative) or after ( positive) the trigger point (i.e. either BEFORE_START_OF_VALIDITY_PERIOD or BEFORE_FIRST_USE) that ticket may be exchanged or refunded."
    },
    "fareFrameRef": {
      "$ref": "#/$defs/VersionOfObjectRef"
    },
    "fareTableRefs": {
      "type": "array",
      "description": "References for associated fare tables.",
      "items": {
        "$ref": "#/$defs/VersionOfObjectRef"
      }
    },
    "hasFee": {
      "type": "boolean",
      "description": "Has fee."
    },
    "id": {
      "minLength": 1,
      "pattern": "^([A-Z]{3}):([A-Za-z]*):([0-9A-Za-z_\\-]*)$",
      "type": "string",
      "description": "Id."
    },
    "limitingRule": {
      "$ref": "#/$defs/LimitingRule"
    },
    "limitingRuleRef": {
      "$ref": "#/$defs/VersionOfObjectRef"
    },
    "modification": {
      "type": "string",
      "description": "Modification status.",
      "enum": [
        "NEW",
        "REVISE",
        "DELETE"
      ]
    },
    "name": {
      "type": "array",
      "description": "Name represented in different languages. Language codes are ISO-639.",
      "items": {
        "$ref": "#/$defs/TextInLanguage"
      }
    },
    "nameOfClass": {
      "type": "string",
      "description": "Name of class."
    },
    "numberOfExchangesAllowed": {
      "type": "integer",
      "description": "Number of times a ticket may be exchanged.",
      "format": "int32"
    },
    "onlyAtCertainDistributionPoints": {
      "type": "boolean",
      "description": "Whether distribution is restricted to certain points."
    },
    "prices": {
      "type": "array",
      "description": "Prices in different currencies for the exchanging rule.",
      "items": {
        "$ref": "#/$defs/FarePrice"
      }
    },
    "refundBasis": {
      "type": "string",
      "description": "Basis on which refund is made. See allowed values below.",
      "enum": [
        "PER_OFFER",
        "PER_PERSON"
      ]
    },
    "resellWhen": {
      "type": "string",
      "description": "Event marking when the exchangeable status of the ticket changes.",
      "enum": [
        "NEVER",
        "BEFORE_START_OF_VALIDITY_PERIOD",
        "AFTER_START_OF_VALIDITY_PERIOD",
        "AFTER_END_OF_VALIDITY_PERIOD",
        "BEFORE_FIRST_USE",
        "AFTER_FIRST_USE",
        "BEFORE_VALIDATION",
        "AFTER_VALIDATION",
        "AFTER_PURCHASE"
      ]
    },
    "specifiedProducts": {
      "type": "array",
      "description": "Reference to the product IDs where exchanging to is allowed. Only use this in combination with 'exchangeableTo.SPECIFIED_PRODUCTS'",
      "items": {
        "type": "string"
      }
    },
    "status": {
      "type": "string",
      "description": "Exchanging status.",
      "enum": [
        "DRAFT",
        "PROPOSED",
        "VERSIONED",
        "DEPRECATED"
      ]
    },
    "toFareClass": {
      "type": "string",
      "description": "Fare class to which can be exchanged.",
      "enum": [
        "FIRST_CLASS",
        "SECOND_CLASS",
        "THIRD_CLASS",
        "ECONOMY_CLASS",
        "BUSINESS_CLASS",
        "TURISTA",
        "PREFERENTE",
        "STANDARD_CLASS",
        "PREMIUM_CLASS",
        "ANY",
        "UNKNOWN"
      ]
    },
    "unusedTicketsOnly": {
      "type": "boolean",
      "description": "Unused tickets only."
    },
    "version": {
      "minLength": 1,
      "pattern": "^([A-Z]{3}):([A-Za-z]*):([0-9A-Za-z_\\-]*)$",
      "type": "string",
      "description": "Exchanging version."
    }
  },
  "$defs": {
    "FarePrice": {
      "required": [
        "changed",
        "created",
        "fareFrameRef",
        "id",
        "modification",
        "nameOfClass",
        "status"
      ],
      "type": "object",
      "properties": {
        "amount": {
          "type": "string",
          "description": "Amount"
        },
        "canBeCumulative": {
          "type": "boolean",
          "description": "canBeCumulative."
        },
        "changed": {
          "type": "string",
          "description": "Changed datetime.",
          "readOnly": true
        },
        "compatibleWithVersionRef": {
          "type": "string",
          "description": "Compatible with version."
        },
        "created": {
          "type": "string",
          "description": "Created datetime.",
          "readOnly": true
        },
        "currency": {
          "type": "string",
          "description": "Currency."
        },
        "derivedFromVersionRef": {
          "type": "string",
          "description": "Derived from version."
        },
        "discountPercentageUsed": {
          "maximum": 100,
          "minimum": -100,
          "type": "integer",
          "description": "discountPercentageUsed.",
          "format": "int32"
        },
        "fareFrameRef": {
          "$ref": "#/$defs/VersionOfObjectRef"
        },
        "id": {
          "minLength": 1,
          "type": "string",
          "description": "Id."
        },
        "isAllowed": {
          "type": "boolean",
          "description": "isAllowed."
        },
        "limitingRule": {
          "$ref": "#/$defs/LimitingRule"
        },
        "modification": {
          "type": "string",
          "description": "Modification status.",
          "readOnly": true,
          "enum": [
            "NEW",
            "REVISE",
            "DELETE"
          ]
        },
        "name": {
          "type": "array",
          "description": "Name.",
          "items": {
            "$ref": "#/$defs/TextInLanguage"
          }
        },
        "nameOfClass": {
          "type": "string",
          "description": "Name of class.",
          "readOnly": true
        },
        "ranking": {
          "type": "integer",
          "description": "Ranking.",
          "format": "int32"
        },
        "rounding": {
          "$ref": "#/$defs/Rounding"
        },
        "roundingRef": {
          "$ref": "#/$defs/VersionOfObjectRef"
        },
        "status": {
          "type": "string",
          "description": "Status.",
          "readOnly": true,
          "enum": [
            "DRAFT",
            "PROPOSED",
            "VERSIONED",
            "DEPRECATED"
          ]
        },
        "vatRegisterGroup": {
          "type": "string",
          "description": "vatRegisterGroup.",
          "enum": [
            "EXCEPTION_FROM_VAT",
            "GENERAL_VAT",
            "FOOD_VAT",
            "TRANSPORT_AND_TICKETS_VAT"
          ]
        },
        "version": {
          "type": "string",
          "description": "Version.",
          "readOnly": true
        }
      },
      "description": "A description of the price and factor for a set fare"
    },
    "LimitingRule": {
      "required": [
        "changed",
        "created",
        "fareFrameRef",
        "id",
        "modification",
        "nameOfClass",
        "status"
      ],
      "type": "object",
      "properties": {
        "canBeCumulative": {
          "type": "boolean",
          "description": "CanBeCumulative."
        },
        "changed": {
          "type": "string",
          "description": "Changed datetime.",
          "readOnly": true
        },
        "compatibleWithVersionRef": {
          "type": "string",
          "description": "Compatible with version."
        },
        "created": {
          "type": "string",
          "description": "Created datetime.",
          "readOnly": true
        },
        "derivedFromVersionRef": {
          "type": "string",
          "description": "Derived from version."
        },
        "description": {
          "type": "array",
          "description": "Description.",
          "items": {
            "$ref": "#/$defs/TextInLanguage"
          }
        },
        "discountAsPercentage": {
          "type": "number",
          "description": "DiscountAsPercentage.",
          "format": "float"
        },
        "discountAsValue": {
          "type": "number",
          "description": "DiscountAsValue.",
          "format": "float"
        },
        "fareFrameRef": {
          "$ref": "#/$defs/VersionOfObjectRef"
        },
        "id": {
          "minLength": 1,
          "pattern": "^([A-Z]{3}):([A-Za-z]*):([0-9A-Za-z_\\-]*)$",
          "type": "string",
          "description": "Id."
        },
        "maximumPrice": {
          "type": "string",
          "description": "MaximumPrice."
        },
        "maximumPriceAsPercentage": {
          "type": "number",
          "description": "MaximumPriceAsPercentage.",
          "format": "double"
        },
        "minimumLimitPrice": {
          "type": "string",
          "description": "MinimumLimitPrice."
        },
        "minimumPrice": {
          "type": "string",
          "description": "MinimumPrice."
        },
        "modification": {
          "type": "string",
          "description": "Modification status.",
          "readOnly": true,
          "enum": [
            "NEW",
            "REVISE",
            "DELETE"
          ]
        },
        "name": {
          "type": "array",
          "description": "Name.",
          "items": {
            "$ref": "#/$defs/TextInLanguage"
          }
        },
        "nameOfClass": {
          "type": "string",
          "description": "Name of class.",
          "readOnly": true
        },
        "status": {
          "type": "string",
          "description": "Status.",
          "readOnly": true,
          "enum": [
            "DRAFT",
            "PROPOSED",
            "VERSIONED",
            "DEPRECATED"
          ]
        },
        "version": {
          "minLength": 1,
          "pattern": "^([A-Z]{3}):([A-Za-z]*):([0-9A-Za-z_\\-]*)$",
          "type": "string",
          "description": "Version."
        }
      },
      "description": "A LimitingRule"
    },
    "Rounding": {
      "required": [
        "changed",
        "created",
        "fareFrameRef",
        "id",
        "modification",
        "nameOfClass",
        "roundingMethod",
        "status",
        "version"
      ],
      "type": "object",
      "properties": {
        "changed": {
          "type": "string",
          "description": "Changed datetime.",
          "readOnly": true
        },
        "compatibleWithVersionRef": {
          "type": "string",
          "description": "Compatible with version."
        },
        "created": {
          "type": "string",
          "description": "Created datetime.",
          "readOnly": true
        },
        "derivedFromVersionRef": {
          "type": "string",
          "description": "Derived from version."
        },
        "description": {
          "type": "array",
          "description": "Description.",
          "items": {
            "$ref": "#/$defs/TextInLanguage"
          }
        },
        "fareFrameRef": {
          "$ref": "#/$defs/VersionOfObjectRef"
        },
        "id": {
          "minLength": 1,
          "pattern": "^([A-Z]{3}):([A-Za-z]*):([0-9A-Za-z_\\-]*)$",
          "type": "string",
          "description": "Id."
        },
        "modification": {
          "type": "string",
          "description": "Modification status.",
          "readOnly": true,
          "enum": [
            "NEW",
            "REVISE",
            "DELETE"
          ]
        },
        "name": {
          "type": "array",
          "description": "Name.",
          "items": {
            "$ref": "#/$defs/TextInLanguage"
          }
        },
        "nameOfClass": {
          "type": "string",
          "description": "Name of class.",
          "readOnly": true
        },
        "roundingMethod": {
          "type": "string",
          "description": "Type of rounding.",
          "enum": [
            "NONE",
            "DOWN",
            "UP",
            "SPLIT",
            "STEP_TABLE",
            "FIVE",
            "NINE",
            "TEN",
            "FORTY_NINE"
          ]
        },
        "roundingModulus": {
          "type": "number",
          "description": "Amount by which rounding is to be quantised, i.e. results should be quantised to nearest whole multiple of this value.",
          "format": "double"
        },
        "status": {
          "type": "string",
          "description": "Rounding status.",
          "readOnly": true,
          "enum": [
            "DRAFT",
            "PROPOSED",
            "VERSIONED",
            "DEPRECATED"
          ]
        },
        "version": {
          "minLength": 1,
          "pattern": "^([A-Z]{3}):([A-Za-z]*):([0-9A-Za-z_\\-]*)$",
          "type": "string",
          "description": "Rounding version."
        }
      },
      "description": "A description of how prices are rounded post calculation",
      "deprecated": true
    },
    "TextInLanguage": {
      "required": [
        "lang",
        "value"
      ],
      "type": "object",
      "properties": {
        "lang": {
          "minLength": 1,
          "type": "string",
          "description": "Language code."
        },
        "value": {
          "minLength": 1,
          "type": "string",
          "description": "The text."
        }
      },
      "description": "Text in a specific language."
    },
    "VersionOfObjectRef": {
      "required": [
        "nameOfClass",
        "ref",
        "version"
      ],
      "type": "object",
      "properties": {
        "nameOfClass": {
          "minLength": 1,
          "type": "string",
          "description": "Name of class."
        },
        "ref": {
          "minLength": 1,
          "pattern": "^([A-Z]{3}):([A-Za-z]*):([0-9A-Za-z_\\-]*)$",
          "type": "string",
          "description": "The netex id reference to the object."
        },
        "version": {
          "type": "string",
          "description": "Version."
        }
      },
      "description": "Fare frame ref."
    }
  }
}

Work with this as data

Every JSON Schema 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 schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • 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 JSON Schema
curl "https://apis.io/api/v1/json-schemas/entur-exchanging"
All schemas
curl "https://apis.io/api/v1/json-schemas?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.