@ampeco/public-api-mcp 3.260.0 → 3.261.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,13 @@
1
1
  {
2
- "totalEndpoints": 686,
3
- "originalSize": 6626711,
4
- "optimizedSize": 1863124,
5
- "reductionPercent": 71.88,
6
- "buildDuration": 2595,
2
+ "totalEndpoints": 687,
3
+ "originalSize": 6649224,
4
+ "optimizedSize": 1871567,
5
+ "reductionPercent": 71.85,
6
+ "buildDuration": 1665,
7
7
  "responseSchemas": {
8
- "total": 686,
9
- "withSchemas": 686,
10
- "totalSchemaSize": 3803561,
11
- "averageSchemaSize": 5545
8
+ "total": 687,
9
+ "withSchemas": 687,
10
+ "totalSchemaSize": 3815360,
11
+ "averageSchemaSize": 5554
12
12
  }
13
13
  }
@@ -1130,7 +1130,7 @@
1130
1130
  "paymentMethodId": {
1131
1131
  "type": "string",
1132
1132
  "nullable": true,
1133
- "description": "The ID of the payment method, as returned by the payment method listing (User / Payment Method / Listing). When left empty or null, it would be determined by the system - either \"balance\" or \"subscription\" (in case the the user has an active post-paid subscription for home charging sessions and the charge point is a home charger). When it is NOT empty or null, userId is required."
1133
+ "description": "The ID of the payment method, as returned by the payment method listing (User / Payment Method / Listing) or the contextual payment options lookup (User / payment options). When it is not empty or null, `userId` is required. Choosing balance explicitly requires `paymentMethodId: \"balance\"`. Omitting this field, or sending an empty or null value, does not explicitly select balance. The system attempts automatic selection in this order: the charge point's corporate account, an applicable subscription, the user's default personal payment method, then the user's default corporate account. Balance is the fallback only when none of these applies. For OCPI or Hubject roaming EVSEs, an omitted, empty or null payment method is rejected; provide an explicit `paymentMethodId`."
1134
1134
  },
1135
1135
  "externalSessionId": {
1136
1136
  "type": "string",
@@ -1230,7 +1230,7 @@
1230
1230
  "paymentMethodId": {
1231
1231
  "type": "string",
1232
1232
  "nullable": true,
1233
- "description": "The ID of the payment method, as returned by the payment method listing (User / Payment Method / Listing). When left empty or null, it would be determined by the system - either \"balance\" or \"subscription\" (in case the the user has an active post-paid subscription for home charging sessions and the charge point is a home charger). When it is NOT empty or null, userId is required."
1233
+ "description": "The ID of the payment method, as returned by the payment method listing (User / Payment Method / Listing) or the contextual payment options lookup (User / payment options). When it is not empty or null, `userId` is required. Choosing balance explicitly requires `paymentMethodId: \"balance\"`. Omitting this field, or sending an empty or null value, does not explicitly select balance. The system attempts automatic selection in this order: the charge point's corporate account, an applicable subscription, the user's default personal payment method, then the user's default corporate account. Balance is the fallback only when none of these applies. For OCPI or Hubject roaming EVSEs, an omitted, empty or null payment method is rejected; provide an explicit `paymentMethodId`."
1234
1234
  },
1235
1235
  "externalSessionId": {
1236
1236
  "type": "string",
@@ -3039,7 +3039,7 @@
3039
3039
  "paymentMethodId": {
3040
3040
  "type": "string",
3041
3041
  "nullable": true,
3042
- "description": "The ID of the payment method, as returned by the payment method listing (User / Payment Method / Listing). When left empty or null, it would be determined by the system - either \"balance\" or \"subscription\" (in case the the user has an active post-paid subscription for home charging sessions and the charge point is a home charger). When it is NOT empty or null, userId is required."
3042
+ "description": "The ID of the payment method, as returned by the payment method listing (User / Payment Method / Listing) or the contextual payment options lookup (User / payment options). When it is not empty or null, `userId` is required. Choosing balance explicitly requires `paymentMethodId: \"balance\"`. Omitting this field, or sending an empty or null value, does not explicitly select balance. The system attempts automatic selection in this order: the charge point's corporate account, an applicable subscription, the user's default personal payment method, then the user's default corporate account. Balance is the fallback only when none of these applies. For OCPI or Hubject roaming EVSEs, an omitted, empty or null payment method is rejected; provide an explicit `paymentMethodId`."
3043
3043
  },
3044
3044
  "externalSessionId": {
3045
3045
  "type": "string",
@@ -5704,7 +5704,7 @@
5704
5704
  "description": "The record is not found"
5705
5705
  },
5706
5706
  "409": {
5707
- "description": "Conflict - The request cannot be completed due to a conflict with the current state of the resource. Possible errors: * Session payment cannot be retried - Payment status must be either 'failed' or 'partially paid' * Session total amount is below the minimum transaction amount required by the payment provider * Session billing status is not completed * Session is not finalized"
5707
+ "description": "Conflict - The request cannot be completed due to a conflict with the current state of the resource. Possible errors: * Session payment cannot be retried - Payment status must be either 'failed' or 'partially paid' * Session total amount is below the minimum transaction amount required by the payment provider * Session billing status is not completed * Session is not finalized * No payment processor is configured for the session user's stored payment method"
5708
5708
  },
5709
5709
  "422": {
5710
5710
  "description": "The payload you provided is invalid"
@@ -59896,7 +59896,7 @@
59896
59896
  "type": "number",
59897
59897
  "format": "decimal",
59898
59898
  "nullable": true,
59899
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision."
59899
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision. For energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails."
59900
59900
  },
59901
59901
  "dayPricePerKwh": {
59902
59902
  "type": "number",
@@ -60661,7 +60661,7 @@
60661
60661
  "description": "Present when `discountMode=per_element` and `discountReferenceType` is `base_tariff` or `specific_tariff`. Omitted otherwise. Each entry configures a discount for a specific fee component of the referenced tariff. At least one entry is required. Prohibited when `discountReferenceType=roaming_tariff`."
60662
60662
  }
60663
60663
  },
60664
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise."
60664
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise. Tariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read."
60665
60665
  },
60666
60666
  "stopSession": {
60667
60667
  "type": "object",
@@ -61033,7 +61033,7 @@
61033
61033
  "type": "number",
61034
61034
  "format": "decimal",
61035
61035
  "nullable": true,
61036
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision."
61036
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision. For energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails."
61037
61037
  },
61038
61038
  "dayPricePerKwh": {
61039
61039
  "type": "number",
@@ -61798,7 +61798,7 @@
61798
61798
  "description": "Present when `discountMode=per_element` and `discountReferenceType` is `base_tariff` or `specific_tariff`. Omitted otherwise. Each entry configures a discount for a specific fee component of the referenced tariff. At least one entry is required. Prohibited when `discountReferenceType=roaming_tariff`."
61799
61799
  }
61800
61800
  },
61801
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise."
61801
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise. Tariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read."
61802
61802
  },
61803
61803
  "stopSession": {
61804
61804
  "type": "object",
@@ -62196,7 +62196,7 @@
62196
62196
  "type": "number",
62197
62197
  "format": "decimal",
62198
62198
  "nullable": true,
62199
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision."
62199
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision. For energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails."
62200
62200
  },
62201
62201
  "dayPricePerKwh": {
62202
62202
  "type": "number",
@@ -62961,7 +62961,7 @@
62961
62961
  "description": "Present when `discountMode=per_element` and `discountReferenceType` is `base_tariff` or `specific_tariff`. Omitted otherwise. Each entry configures a discount for a specific fee component of the referenced tariff. At least one entry is required. Prohibited when `discountReferenceType=roaming_tariff`."
62962
62962
  }
62963
62963
  },
62964
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise."
62964
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise. Tariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read."
62965
62965
  },
62966
62966
  "stopSession": {
62967
62967
  "type": "object",
@@ -63404,7 +63404,7 @@
63404
63404
  "type": "number",
63405
63405
  "format": "decimal",
63406
63406
  "nullable": true,
63407
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision."
63407
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision. For energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails."
63408
63408
  },
63409
63409
  "dayPricePerKwh": {
63410
63410
  "type": "number",
@@ -64355,7 +64355,7 @@
64355
64355
  "type": "number",
64356
64356
  "format": "decimal",
64357
64357
  "nullable": true,
64358
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision."
64358
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision. For energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails."
64359
64359
  },
64360
64360
  "dayPricePerKwh": {
64361
64361
  "type": "number",
@@ -73517,6 +73517,65 @@
73517
73517
  }
73518
73518
  }
73519
73519
  },
73520
+ {
73521
+ "path": "/public-api/resources/users/v1.1/{user}/payment-options",
73522
+ "method": "GET",
73523
+ "operationId": "userPaymentOptionsReadV1_1",
73524
+ "summary": "User / payment options",
73525
+ "description": "Get the payment options available to a user for starting a session at the specified EVSE. Options are returned in display order, with at most one option marked as preselected. An empty array means no payment options are available for this context. The offer is limited to tokenized payment methods, corporate accounts, subscriptions and balance. Preselection is calculated within this supported subset; it may differ from a client that offers additional payment categories. This read-only lookup does not create or change business state, reserve or authorize a session, or guarantee that a session can start. Preselection is a recommendation, not a payment selection for a subsequent start request. Pass the chosen `paymentMethodId` explicitly to a start action; choosing balance requires `paymentMethodId: \"balance\"`. Both query parameters are required: `context` must be `session_start`, and `evseId` must be an integer database ID greater than or equal to 1. The `user` route parameter must be an integer database ID. Missing, unsupported or malformed query values and malformed user identifiers return 422 before resource lookup. The route value takes precedence over any `user` query parameter. The caller must have permission to list payment methods (403 otherwise), and both the user and EVSE must be visible to the authenticated token-owner or impersonated admin. Unknown or inaccessible integer IDs return 404. This lookup does not require permission to start sessions. ⚠️ Experimental endpoint — not yet a stable contract. This resource ships as experimental / beta. While experimental, its schema and behaviour may change without a version bump — including breaking changes within v1.1 itself. Anyone consuming it does so for evaluation only, or by coordinating adoption with their account manager so changes can be sequenced with them. It graduates to a stable, version-locked contract (where the normal breaking-change rules apply) only when this experimental notice is removed. This notice applies only to GET `users/v1.1/{user}/payment-options`; other users v1.1 operations remain version-locked.",
73526
+ "tags": [
73527
+ "resource / users"
73528
+ ],
73529
+ "parameters": {
73530
+ "path": {
73531
+ "user": {
73532
+ "type": "integer",
73533
+ "required": true
73534
+ }
73535
+ },
73536
+ "query": {
73537
+ "context": {
73538
+ "description": "The context in which the payment options will be used.",
73539
+ "schema": {
73540
+ "type": "string",
73541
+ "enum": [
73542
+ "session_start"
73543
+ ],
73544
+ "example": "session_start",
73545
+ "description": "The context for computing the user's payment options. Only session start is supported."
73546
+ },
73547
+ "required": true
73548
+ },
73549
+ "evseId": {
73550
+ "description": "The ID of the EVSE at which the user intends to start a session.",
73551
+ "type": "integer",
73552
+ "minimum": 1,
73553
+ "required": true,
73554
+ "example": 123
73555
+ }
73556
+ }
73557
+ },
73558
+ "responses": {
73559
+ "200": {
73560
+ "description": "Success"
73561
+ },
73562
+ "401": {
73563
+ "description": "Access token is missing or invalid"
73564
+ },
73565
+ "403": {
73566
+ "description": "You do not have permission to perform the action"
73567
+ },
73568
+ "404": {
73569
+ "description": "The record is not found"
73570
+ },
73571
+ "422": {
73572
+ "description": "The payload you provided is invalid"
73573
+ },
73574
+ "429": {
73575
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
73576
+ }
73577
+ }
73578
+ },
73520
73579
  {
73521
73580
  "path": "/public-api/resources/utilities/v1.0",
73522
73581
  "method": "GET",
@@ -75344,7 +75403,7 @@
75344
75403
  ],
75345
75404
  "info": {
75346
75405
  "title": "Public API",
75347
- "version": "3.260.0",
75406
+ "version": "3.261.0",
75348
75407
  "description": "The Public API provides server-to-server integration capabilities for your EV charging platform.\n\n**Authentication.** Existing integrations continue to work unchanged — long-lived UUID admin tokens are sent in `Authorization: Bearer ...` with no exchange required. Two security schemes are documented for OpenAPI client tooling, both resulting in the same Bearer header at the wire level:\n - `bearerAuth` — the token in the `Authorization: Bearer ...` header is either a long-lived UUID admin token (issued via the admin UI, used directly) or a short-lived access token previously obtained via OAuth.\n - `oauth2ClientCredentials` - a `client_id` / `client_secret` pair should be exchanged for a short-lived access token at `/public-api/oauth/token` per RFC 6749 Section 4.4 (Client Credentials Grant), and the short-lived token should be used in the `Authorization: Bearer ...` header. The OAuth `client_secret` itself cannot be sent directly as a bearer token — it must be exchanged first.\n"
75349
75408
  },
75350
75409
  "servers": [
@@ -75358,18 +75417,18 @@
75358
75417
  }
75359
75418
  }
75360
75419
  ],
75361
- "buildTimestamp": "2026-10-07T10:47:09.087Z",
75420
+ "buildTimestamp": "2026-10-08T08:30:58.512Z",
75362
75421
  "stats": {
75363
- "totalEndpoints": 686,
75364
- "originalSize": 6626711,
75365
- "optimizedSize": 1863124,
75366
- "reductionPercent": 71.88,
75367
- "buildDuration": 2595,
75422
+ "totalEndpoints": 687,
75423
+ "originalSize": 6649224,
75424
+ "optimizedSize": 1871567,
75425
+ "reductionPercent": 71.85,
75426
+ "buildDuration": 1665,
75368
75427
  "responseSchemas": {
75369
- "total": 686,
75370
- "withSchemas": 686,
75371
- "totalSchemaSize": 3803561,
75372
- "averageSchemaSize": 5545
75428
+ "total": 687,
75429
+ "withSchemas": 687,
75430
+ "totalSchemaSize": 3815360,
75431
+ "averageSchemaSize": 5554
75373
75432
  }
75374
75433
  }
75375
75434
  }
@@ -18649,7 +18649,7 @@
18649
18649
  "pricePerKwh": {
18650
18650
  "type": "number",
18651
18651
  "format": "decimal",
18652
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
18652
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
18653
18653
  "nullable": true
18654
18654
  },
18655
18655
  "dayPricePerKwh": {
@@ -19336,7 +19336,7 @@
19336
19336
  },
19337
19337
  "discountTariffSettings": {
19338
19338
  "type": "object",
19339
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n",
19339
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n\nTariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read.\n",
19340
19340
  "properties": {
19341
19341
  "discountReferenceType": {
19342
19342
  "type": "string",
@@ -155847,7 +155847,7 @@
155847
155847
  "pricePerKwh": {
155848
155848
  "type": "number",
155849
155849
  "format": "decimal",
155850
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
155850
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
155851
155851
  "nullable": true
155852
155852
  },
155853
155853
  "dayPricePerKwh": {
@@ -156534,7 +156534,7 @@
156534
156534
  },
156535
156535
  "discountTariffSettings": {
156536
156536
  "type": "object",
156537
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n",
156537
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n\nTariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read.\n",
156538
156538
  "properties": {
156539
156539
  "discountReferenceType": {
156540
156540
  "type": "string",
@@ -157035,7 +157035,7 @@
157035
157035
  "pricePerKwh": {
157036
157036
  "type": "number",
157037
157037
  "format": "decimal",
157038
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
157038
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
157039
157039
  "nullable": true
157040
157040
  },
157041
157041
  "dayPricePerKwh": {
@@ -157722,7 +157722,7 @@
157722
157722
  },
157723
157723
  "discountTariffSettings": {
157724
157724
  "type": "object",
157725
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n",
157725
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n\nTariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read.\n",
157726
157726
  "properties": {
157727
157727
  "discountReferenceType": {
157728
157728
  "type": "string",
@@ -158372,7 +158372,7 @@
158372
158372
  "pricePerKwh": {
158373
158373
  "type": "number",
158374
158374
  "format": "decimal",
158375
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
158375
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
158376
158376
  "nullable": true
158377
158377
  },
158378
158378
  "dayPricePerKwh": {
@@ -159059,7 +159059,7 @@
159059
159059
  },
159060
159060
  "discountTariffSettings": {
159061
159061
  "type": "object",
159062
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n",
159062
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n\nTariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read.\n",
159063
159063
  "properties": {
159064
159064
  "discountReferenceType": {
159065
159065
  "type": "string",
@@ -159584,7 +159584,7 @@
159584
159584
  "pricePerKwh": {
159585
159585
  "type": "number",
159586
159586
  "format": "decimal",
159587
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
159587
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
159588
159588
  "nullable": true
159589
159589
  },
159590
159590
  "dayPricePerKwh": {
@@ -160271,7 +160271,7 @@
160271
160271
  },
160272
160272
  "discountTariffSettings": {
160273
160273
  "type": "object",
160274
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n",
160274
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n\nTariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read.\n",
160275
160275
  "properties": {
160276
160276
  "discountReferenceType": {
160277
160277
  "type": "string",
@@ -160784,7 +160784,7 @@
160784
160784
  "pricePerKwh": {
160785
160785
  "type": "number",
160786
160786
  "format": "decimal",
160787
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
160787
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
160788
160788
  "nullable": true
160789
160789
  },
160790
160790
  "dayPricePerKwh": {
@@ -161471,7 +161471,7 @@
161471
161471
  },
161472
161472
  "discountTariffSettings": {
161473
161473
  "type": "object",
161474
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n",
161474
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n\nTariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read.\n",
161475
161475
  "properties": {
161476
161476
  "discountReferenceType": {
161477
161477
  "type": "string",
@@ -162059,7 +162059,7 @@
162059
162059
  "pricePerKwh": {
162060
162060
  "type": "number",
162061
162061
  "format": "decimal",
162062
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
162062
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
162063
162063
  "nullable": true
162064
162064
  },
162065
162065
  "dayPricePerKwh": {
@@ -162746,7 +162746,7 @@
162746
162746
  },
162747
162747
  "discountTariffSettings": {
162748
162748
  "type": "object",
162749
- "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n",
162749
+ "description": "Discount configuration for discount based tariffs. Present only when `type=discount based`, omitted otherwise.\n\nTariff list and detail responses describe tariff configuration, not a price for a specific charging context. Discounts referencing `specific_tariff` can return discounted pricing from the configured source tariff. Discounts referencing `base_tariff` or `roaming_tariff` return an empty `pricing` object because these reads do not supply the source tariff group or roaming source needed to calculate an effective price. A price derived for an earlier session does not select the source for a later tariff read.\n",
162750
162750
  "properties": {
162751
162751
  "discountReferenceType": {
162752
162752
  "type": "string",
@@ -163299,7 +163299,7 @@
163299
163299
  "pricePerKwh": {
163300
163300
  "type": "number",
163301
163301
  "format": "decimal",
163302
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
163302
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
163303
163303
  "nullable": true
163304
163304
  },
163305
163305
  "dayPricePerKwh": {
@@ -164309,7 +164309,7 @@
164309
164309
  "pricePerKwh": {
164310
164310
  "type": "number",
164311
164311
  "format": "decimal",
164312
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
164312
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
164313
164313
  "nullable": true
164314
164314
  },
164315
164315
  "dayPricePerKwh": {
@@ -165292,7 +165292,7 @@
165292
165292
  "pricePerKwh": {
165293
165293
  "type": "number",
165294
165294
  "format": "decimal",
165295
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
165295
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
165296
165296
  "nullable": true
165297
165297
  },
165298
165298
  "dayPricePerKwh": {
@@ -166296,7 +166296,7 @@
166296
166296
  "pricePerKwh": {
166297
166297
  "type": "number",
166298
166298
  "format": "decimal",
166299
- "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.",
166299
+ "description": "Price per kWh. Up to 5 digits after the decimal point depending on the currency precision.\n\nFor energy time-of-use tariffs, tariff responses calculate this value from the tariff's fallback electricity rate at the time of calculation, including applicable markup and subsidy rules. It is not a charge-point-specific quote or a historical session price. When `chargePointElectricityRate` is enabled, charging can use the charge point's electricity rate instead, so the charged price can differ. The value is null if the fallback rate is unavailable or the calculation fails.\n",
166300
166300
  "nullable": true
166301
166301
  },
166302
166302
  "dayPricePerKwh": {
@@ -202837,6 +202837,147 @@
202837
202837
  }
202838
202838
  }
202839
202839
  },
202840
+ "userPaymentOptionsReadV1_1": {
202841
+ "200": {
202842
+ "schema": {
202843
+ "type": "object",
202844
+ "description": "⚠️ Experimental endpoint — not yet a stable contract. This resource ships as experimental / beta. While experimental, its schema and behaviour may change without a version bump — including breaking changes within v1.1 itself. Anyone consuming it does so for evaluation only, or by coordinating adoption with their account manager so changes can be sequenced with them. It graduates to a stable, version-locked contract (where the normal breaking-change rules apply) only when this experimental notice is removed.\n\nThis notice applies only to GET `users/v1.1/{user}/payment-options`; other users v1.1 operations remain version-locked.\n",
202845
+ "required": [
202846
+ "data"
202847
+ ],
202848
+ "properties": {
202849
+ "data": {
202850
+ "type": "object",
202851
+ "required": [
202852
+ "options"
202853
+ ],
202854
+ "properties": {
202855
+ "options": {
202856
+ "type": "array",
202857
+ "description": "Available payment options in display order. At most one option is preselected; the array may be empty.",
202858
+ "items": {
202859
+ "type": "object",
202860
+ "required": [
202861
+ "paymentMethodId",
202862
+ "type",
202863
+ "isPreselected"
202864
+ ],
202865
+ "properties": {
202866
+ "paymentMethodId": {
202867
+ "type": "string",
202868
+ "description": "The identifier accepted as paymentMethodId by the session start actions. Use the value as returned, including any prefix. The balance option uses the explicit identifier `balance`.",
202869
+ "example": "1234"
202870
+ },
202871
+ "type": {
202872
+ "type": "string",
202873
+ "enum": [
202874
+ "tokenized",
202875
+ "corporate",
202876
+ "subscription",
202877
+ "balance"
202878
+ ],
202879
+ "description": "The type of payment option available for starting a session:\n * `tokenized` — A saved payment method, including saved wallet cards and eligible stored bank debit methods.\n * `corporate` — An eligible corporate billing account for this user and EVSE.\n * `subscription` — An eligible subscription installment payment method.\n * `balance` — The user's balance payment option.\n",
202880
+ "example": "tokenized"
202881
+ },
202882
+ "isPreselected": {
202883
+ "type": "boolean",
202884
+ "description": "Whether this option is recommended for this context. This does not select payment for a subsequent start request.",
202885
+ "example": true
202886
+ }
202887
+ }
202888
+ },
202889
+ "example": [
202890
+ {
202891
+ "paymentMethodId": "1234",
202892
+ "type": "tokenized",
202893
+ "isPreselected": true
202894
+ },
202895
+ {
202896
+ "paymentMethodId": "corporate:1235",
202897
+ "type": "corporate",
202898
+ "isPreselected": false
202899
+ },
202900
+ {
202901
+ "paymentMethodId": "subscription_installment:1234",
202902
+ "type": "subscription",
202903
+ "isPreselected": false
202904
+ },
202905
+ {
202906
+ "paymentMethodId": "balance",
202907
+ "type": "balance",
202908
+ "isPreselected": false
202909
+ }
202910
+ ]
202911
+ }
202912
+ }
202913
+ }
202914
+ }
202915
+ }
202916
+ },
202917
+ "401": {
202918
+ "schema": {
202919
+ "type": "object",
202920
+ "properties": {
202921
+ "message": {
202922
+ "type": "string"
202923
+ }
202924
+ }
202925
+ }
202926
+ },
202927
+ "403": {
202928
+ "schema": {
202929
+ "type": "object",
202930
+ "properties": {
202931
+ "message": {
202932
+ "type": "string",
202933
+ "default": "This action is unauthorized."
202934
+ }
202935
+ }
202936
+ }
202937
+ },
202938
+ "404": {
202939
+ "schema": {
202940
+ "type": "object",
202941
+ "properties": {
202942
+ "message": {
202943
+ "type": "string"
202944
+ }
202945
+ }
202946
+ }
202947
+ },
202948
+ "422": {
202949
+ "schema": {
202950
+ "type": "object",
202951
+ "required": [
202952
+ "message"
202953
+ ],
202954
+ "properties": {
202955
+ "message": {
202956
+ "type": "string"
202957
+ },
202958
+ "errors": {
202959
+ "type": "object",
202960
+ "additionalProperties": {
202961
+ "type": "array",
202962
+ "items": {
202963
+ "type": "string"
202964
+ }
202965
+ }
202966
+ }
202967
+ }
202968
+ }
202969
+ },
202970
+ "429": {
202971
+ "schema": {
202972
+ "type": "object",
202973
+ "properties": {
202974
+ "message": {
202975
+ "type": "string"
202976
+ }
202977
+ }
202978
+ }
202979
+ }
202980
+ },
202840
202981
  "listUtilities": {
202841
202982
  "200": {
202842
202983
  "schema": {