@ampeco/public-api-mcp 3.251.10 → 3.253.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.
@@ -390,7 +390,7 @@
390
390
  "description": "The payload you provided is invalid"
391
391
  },
392
392
  "424": {
393
- "description": "The requested operation cannot be completed because it depends on communication with an external system (e.g., charge point) that is currently disconnected or unreachable"
393
+ "description": "The requested operation cannot be completed because something it depends on is currently unavailable, such as an external system (e.g., a charge point) that is disconnected or unreachable, or required reference data (e.g., an exchange rate) that is missing. The `message` property carries the reason."
394
394
  },
395
395
  "429": {
396
396
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
@@ -515,7 +515,7 @@
515
515
  "description": "The payload you provided is invalid"
516
516
  },
517
517
  "424": {
518
- "description": "The requested operation cannot be completed because it depends on communication with an external system (e.g., charge point) that is currently disconnected or unreachable"
518
+ "description": "The requested operation cannot be completed because something it depends on is currently unavailable, such as an external system (e.g., a charge point) that is disconnected or unreachable, or required reference data (e.g., an exchange rate) that is missing. The `message` property carries the reason."
519
519
  },
520
520
  "429": {
521
521
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
@@ -817,7 +817,7 @@
817
817
  "description": "The payload you provided is invalid"
818
818
  },
819
819
  "424": {
820
- "description": "The requested operation cannot be completed because it depends on communication with an external system (e.g., charge point) that is currently disconnected or unreachable"
820
+ "description": "The requested operation cannot be completed because something it depends on is currently unavailable, such as an external system (e.g., a charge point) that is disconnected or unreachable, or required reference data (e.g., an exchange rate) that is missing. The `message` property carries the reason."
821
821
  },
822
822
  "429": {
823
823
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
@@ -4946,7 +4946,7 @@
4946
4946
  "method": "POST",
4947
4947
  "operationId": "sessionChangeTariff",
4948
4948
  "summary": "Session / Change tariff",
4949
- "description": "Change the tariff for a session and trigger recalculation of charging periods. This action supports loyalty program integrations where discounts need to be applied mid-session. The tariff change is only available when: - Billing status is NOT \"Completed\" - For running sessions: duration is under 3 hours - For roaming sessions (Ampeco as eMSP): session must be finished and have a CDR received - No recalculation is already in progress - For local charge point sessions: a StartTransaction message must exist",
4949
+ "description": "Change the tariff for a session and trigger recalculation of charging periods. This action supports loyalty program integrations where discounts need to be applied mid-session. The tariff change is only available when: - Billing status is NOT \"Completed\" - For running sessions: duration is under 3 hours - For roaming sessions (the platform as eMSP): session must be finished and have a CDR received - No recalculation is already in progress - For local charge point sessions: a StartTransaction message must exist - The selected tariff already has usable concrete pricing",
4950
4950
  "tags": [
4951
4951
  "action / session"
4952
4952
  ],
@@ -4959,7 +4959,7 @@
4959
4959
  "properties": {
4960
4960
  "tariffId": {
4961
4961
  "type": "integer",
4962
- "description": "The ID of the tariff to apply to the session"
4962
+ "description": "The ID of the tariff to apply to the session. The tariff must already have usable concrete pricing; unresolved markup or discount tariff definitions cannot be assigned directly and produce a tariffId validation error (422)."
4963
4963
  }
4964
4964
  },
4965
4965
  "required": [
@@ -5466,7 +5466,7 @@
5466
5466
  "description": "The payload you provided is invalid"
5467
5467
  },
5468
5468
  "424": {
5469
- "description": "The requested operation cannot be completed because it depends on communication with an external system (e.g., charge point) that is currently disconnected or unreachable"
5469
+ "description": "The requested operation cannot be completed because something it depends on is currently unavailable, such as an external system (e.g., a charge point) that is disconnected or unreachable, or required reference data (e.g., an exchange rate) that is missing. The `message` property carries the reason."
5470
5470
  },
5471
5471
  "429": {
5472
5472
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
@@ -6631,7 +6631,7 @@
6631
6631
  "description": "The payload you provided is invalid"
6632
6632
  },
6633
6633
  "424": {
6634
- "description": "The requested operation cannot be completed because it depends on communication with an external system (e.g., charge point) that is currently disconnected or unreachable"
6634
+ "description": "The requested operation cannot be completed because something it depends on is currently unavailable, such as an external system (e.g., a charge point) that is disconnected or unreachable, or required reference data (e.g., an exchange rate) that is missing. The `message` property carries the reason."
6635
6635
  },
6636
6636
  "429": {
6637
6637
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
@@ -32822,6 +32822,192 @@
32822
32822
  }
32823
32823
  }
32824
32824
  },
32825
+ {
32826
+ "path": "/public-api/resources/ocpi-commands/v1.0",
32827
+ "method": "GET",
32828
+ "operationId": "ocpiCommandsListing",
32829
+ "summary": "OCPI commands / Listing",
32830
+ "description": "List commands received from eMSPs over OCPI.",
32831
+ "tags": [
32832
+ "resource / ocpi commands"
32833
+ ],
32834
+ "parameters": {
32835
+ "query": {
32836
+ "per_page": {
32837
+ "description": "The number of items to return per page.",
32838
+ "type": "integer",
32839
+ "minimum": 1,
32840
+ "maximum": 100,
32841
+ "default": 100
32842
+ },
32843
+ "cursor": {
32844
+ "description": "The cursor to fetch the next page. **Do not construct this value manually.** Use one of the following methods: - Use the value from the previous response's `links.next` to fetch the next page - Pass an empty string (e.g., `?cursor` or `?cursor=`) to initiate cursor pagination on the first page",
32845
+ "type": "string"
32846
+ },
32847
+ "filter": {
32848
+ "schema": {
32849
+ "type": "object",
32850
+ "properties": {
32851
+ "roamingConnectionId": {
32852
+ "type": "integer",
32853
+ "description": "Filter by roaming connection ID."
32854
+ },
32855
+ "result": {
32856
+ "type": "string",
32857
+ "enum": [
32858
+ "accepted",
32859
+ "rejected",
32860
+ "not_supported",
32861
+ "timeout",
32862
+ "unknown_session",
32863
+ "failed",
32864
+ "evse_occupied",
32865
+ "evse_inoperative",
32866
+ "unknown_reservation",
32867
+ "canceled_reservation",
32868
+ "unknown"
32869
+ ],
32870
+ "description": "The result the platform returned to the roaming partner: - **accepted**: The command was accepted - **rejected**: The command was rejected - **not_supported**: The command is not supported for this charge point - **timeout**: The charge point did not respond in time - **unknown_session**: The referenced session is unknown - **failed**: The command failed during execution - **evse_occupied**: The EVSE is already in use - **evse_inoperative**: The EVSE is not operational - **unknown_reservation**: The referenced reservation is unknown - **canceled_reservation**: The reservation was cancelled - **unknown**: Any result outside the OCPI result set"
32871
+ },
32872
+ "type": {
32873
+ "type": "string",
32874
+ "enum": [
32875
+ "cancel_reservation",
32876
+ "reserve_now",
32877
+ "start_session",
32878
+ "stop_session",
32879
+ "unlock_connector",
32880
+ "change_availability",
32881
+ "get_diagnostics",
32882
+ "reset_evse",
32883
+ "unknown"
32884
+ ],
32885
+ "description": "The command the roaming partner sent: - **cancel_reservation**: Cancel a reservation - **reserve_now**: Reserve an EVSE - **start_session**: Start a charging session - **stop_session**: Stop a charging session - **unlock_connector**: Unlock a connector - **change_availability**: Change the availability of an EVSE (protocol extension) - **get_diagnostics**: Request charge point diagnostics (protocol extension) - **reset_evse**: Reset an EVSE (protocol extension) - **unknown**: Any command outside this set"
32886
+ },
32887
+ "failureReason": {
32888
+ "type": "string",
32889
+ "enum": [
32890
+ "charging_not_allowed",
32891
+ "location_is_closed",
32892
+ "access_restricted",
32893
+ "user_verification_not_complete",
32894
+ "terms_not_accepted",
32895
+ "subscription_required",
32896
+ "cannot_bill_payment_method",
32897
+ "session_already_running",
32898
+ "previous_session_not_paid",
32899
+ "unpaid_subscription_fees",
32900
+ "payment_method_required",
32901
+ "corporate_billing_policy_inactive",
32902
+ "corporate_billing_limit_exceeded",
32903
+ "corporate_account_limit_reached",
32904
+ "corporate_billing_currency_mismatch",
32905
+ "corporate_billing_cross_operator_not_opted_in",
32906
+ "corporate_billing_exchange_rate_unavailable",
32907
+ "corporate_billing_charger_type_not_covered",
32908
+ "corporate_billing_partner_not_covered",
32909
+ "corporate_billing_country_not_covered",
32910
+ "corporate_billing_location_not_covered",
32911
+ "corporate_billing_location_tag_not_covered",
32912
+ "corporate_billing_roaming_not_covered",
32913
+ "payment_method_expired",
32914
+ "payment_method_not_allowed",
32915
+ "payment_method_doesnt_have_sufficient_funds",
32916
+ "internal_roaming_not_setup",
32917
+ "rfid_tag_expired",
32918
+ "rfid_tag_disabled",
32919
+ "rfid_tag_suspended",
32920
+ "user_invoice_details_not_provided",
32921
+ "invalid_payment_method_for_direct_charges",
32922
+ "user_is_disabled",
32923
+ "token_not_authorized_for_booking",
32924
+ "evse_has_queued_reservations",
32925
+ "evse_disabled",
32926
+ "evse_out_of_order",
32927
+ "tariff_charging_not_allowed",
32928
+ "no_tariff_group_configured",
32929
+ "tariff_resolution_failed",
32930
+ "operator_in_migration_mode",
32931
+ "rfid_charge_point_scope_mismatch",
32932
+ "remote_start_failed",
32933
+ "rejected",
32934
+ "canceled_reservation",
32935
+ "evse_occupied",
32936
+ "evse_inoperative",
32937
+ "failed",
32938
+ "not_supported",
32939
+ "timeout",
32940
+ "unknown_reservation",
32941
+ "ev_not_connected_to_evse",
32942
+ "authorization_failed",
32943
+ "pre_authorization_failed",
32944
+ "unknown_session",
32945
+ "ocpi_roaming_not_setup",
32946
+ "command_expired"
32947
+ ],
32948
+ "description": "The reason a command did not succeed: Authorization and access: - **charging_not_allowed**: Charging is not allowed for the authorizing token - **location_is_closed**: The location was closed when the command was received - **access_restricted**: Access to the charge point is restricted for the authorizing token - **user_verification_not_complete**: The user behind the token has not completed verification - **terms_not_accepted**: The user has not accepted the required terms and policies - **user_is_disabled**: The user account is disabled - **authorization_failed**: The authorization of the token was refused - **pre_authorization_failed**: The payment pre-authorization for the session failed - **token_not_authorized_for_booking**: The token is not authorized to book the requested EVSE - **operator_in_migration_mode**: The operator is in migration mode and does not accept new charging Payment, subscription and billing: - **subscription_required**: A subscription plan is required to start charging - **unpaid_subscription_fees**: The user has unpaid subscription fees - **previous_session_not_paid**: An earlier session of the user is still unpaid - **payment_method_required**: The user has no payment method that can be charged - **payment_method_expired**: The user's payment method has expired - **payment_method_not_allowed**: The user's payment method is not allowed for this charge point - **payment_method_doesnt_have_sufficient_funds**: The user's payment method has insufficient funds - **cannot_bill_payment_method**: The user's payment method could not be billed - **invalid_payment_method_for_direct_charges**: The user's payment method cannot be used for direct charges - **user_invoice_details_not_provided**: The user has not provided the invoice details required to be billed Corporate billing: - **corporate_billing_policy_inactive**: The corporate billing policy is not active - **corporate_billing_limit_exceeded**: The corporate billing policy limit is exceeded - **corporate_account_limit_reached**: The corporate account limit is reached - **corporate_billing_currency_mismatch**: The session currency differs from the corporate billing currency - **corporate_billing_cross_operator_not_opted_in**: The operator serving the session is not opted in to the partner's cross-operator corporate billing - **corporate_billing_exchange_rate_unavailable**: No exchange rate is available to convert the session amount into the corporate billing currency - **corporate_billing_charger_type_not_covered**: The charger type is not covered by the corporate billing policy - **corporate_billing_partner_not_covered**: The partner is not covered by the corporate billing policy - **corporate_billing_country_not_covered**: The country is not covered by the corporate billing policy - **corporate_billing_location_not_covered**: The location is not covered by the corporate billing policy - **corporate_billing_location_tag_not_covered**: The location tag is not covered by the corporate billing policy - **corporate_billing_roaming_not_covered**: Roaming is not covered by the corporate billing policy Tariffs: - **tariff_charging_not_allowed**: The applicable tariff does not allow charging - **no_tariff_group_configured**: No tariff group is configured for the charge point - **tariff_resolution_failed**: No tariff could be resolved for the requested charging Charge point and EVSE state: - **evse_disabled**: The requested EVSE is disabled - **evse_out_of_order**: The requested EVSE is out of order - **evse_occupied**: The requested EVSE is already in use - **evse_inoperative**: The requested EVSE is not operational - **evse_has_queued_reservations**: The requested EVSE has queued reservations - **ev_not_connected_to_evse**: No vehicle is connected to the requested EVSE - **session_already_running**: A charging session is already running RFID tokens: - **rfid_tag_expired**: The RFID tag has expired - **rfid_tag_disabled**: The RFID tag is disabled - **rfid_tag_suspended**: The RFID tag is suspended - **rfid_charge_point_scope_mismatch**: The RFID tag may not be used on the requested charge point Roaming setup: - **ocpi_roaming_not_setup**: The OCPI roaming configuration needed to serve the command is missing - **internal_roaming_not_setup**: The internal roaming configuration needed to serve the command is missing Command execution: - **remote_start_failed**: The charge point refused or failed the remote start - **rejected**: The charge point rejected the command - **failed**: The command failed while it was being executed - **not_supported**: The command is not supported for the requested charge point - **timeout**: The charge point did not respond within the command timeout - **command_expired**: The command was no longer valid by the time it could be executed - **unknown_session**: The referenced charging session is unknown to the platform - **unknown_reservation**: The referenced reservation is unknown to the platform - **canceled_reservation**: The reservation was cancelled instead of being honoured"
32949
+ },
32950
+ "createdAfter": {
32951
+ "type": "string",
32952
+ "format": "date-time",
32953
+ "description": "Filter by commands received at or after this timestamp (ISO 8601)."
32954
+ },
32955
+ "createdBefore": {
32956
+ "type": "string",
32957
+ "format": "date-time",
32958
+ "description": "Filter by commands received at or before this timestamp (ISO 8601)."
32959
+ }
32960
+ },
32961
+ "description": "Filters for the OCPI commands listing."
32962
+ }
32963
+ }
32964
+ }
32965
+ },
32966
+ "responses": {
32967
+ "200": {
32968
+ "description": "Success"
32969
+ },
32970
+ "401": {
32971
+ "description": "Access token is missing or invalid"
32972
+ },
32973
+ "403": {
32974
+ "description": "You do not have permission to perform the action"
32975
+ },
32976
+ "422": {
32977
+ "description": "The payload you provided is invalid"
32978
+ },
32979
+ "429": {
32980
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
32981
+ }
32982
+ }
32983
+ },
32984
+ {
32985
+ "path": "/public-api/resources/ocpi-commands/v1.0/{ocpiCommand}",
32986
+ "method": "GET",
32987
+ "operationId": "ocpiCommandRead",
32988
+ "summary": "OCPI command / Read",
32989
+ "description": "Get a command received from an eMSP over OCPI.",
32990
+ "tags": [
32991
+ "resource / ocpi commands"
32992
+ ],
32993
+ "responses": {
32994
+ "200": {
32995
+ "description": "Success"
32996
+ },
32997
+ "401": {
32998
+ "description": "Access token is missing or invalid"
32999
+ },
33000
+ "403": {
33001
+ "description": "You do not have permission to perform the action"
33002
+ },
33003
+ "404": {
33004
+ "description": "The record is not found"
33005
+ },
33006
+ "429": {
33007
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
33008
+ }
33009
+ }
33010
+ },
32825
33011
  {
32826
33012
  "path": "/public-api/resources/operators/v1.0",
32827
33013
  "method": "GET",
@@ -38720,7 +38906,8 @@
38720
38906
  "de-CH",
38721
38907
  "fr-CH",
38722
38908
  "it-CH",
38723
- "en-GB"
38909
+ "en-GB",
38910
+ "tl-PH"
38724
38911
  ],
38725
38912
  "description": "IETF language tag."
38726
38913
  },
@@ -49961,7 +50148,7 @@
49961
50148
  "method": "GET",
49962
50149
  "operationId": "rfidTagsListingDeprecated",
49963
50150
  "summary": "RFID Tags / Listing",
49964
- "description": "Get all rfid tags",
50151
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0` instead. Get all rfid tags",
49965
50152
  "deprecated": true,
49966
50153
  "tags": [
49967
50154
  "resource / rfids"
@@ -50050,7 +50237,7 @@
50050
50237
  "method": "POST",
50051
50238
  "operationId": "rfidTagCreateDeprecated",
50052
50239
  "summary": "RFID Tag / Create",
50053
- "description": "Create new RFID Tag",
50240
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0` instead. Create new RFID Tag",
50054
50241
  "deprecated": true,
50055
50242
  "tags": [
50056
50243
  "resource / rfids"
@@ -50135,7 +50322,7 @@
50135
50322
  "method": "GET",
50136
50323
  "operationId": "rfidTagReadDeprecated",
50137
50324
  "summary": "RFID Tag / Read",
50138
- "description": "Get a RFID Tag",
50325
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0/{idTag}` instead. Get a RFID Tag",
50139
50326
  "deprecated": true,
50140
50327
  "tags": [
50141
50328
  "resource / rfids"
@@ -50163,7 +50350,7 @@
50163
50350
  "method": "DELETE",
50164
50351
  "operationId": "rfidTagDeleteDeprecated",
50165
50352
  "summary": "RFID Tag / Delete",
50166
- "description": "Delete a RFID Tag",
50353
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0/{idTag}` instead. Delete a RFID Tag",
50167
50354
  "deprecated": true,
50168
50355
  "tags": [
50169
50356
  "resource / rfids"
@@ -50188,7 +50375,7 @@
50188
50375
  "method": "PATCH",
50189
50376
  "operationId": "rfidTagUpdateDeprecated",
50190
50377
  "summary": "RFID Tag / Update",
50191
- "description": "Update a RFID Tag",
50378
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0/{idTag}` instead. Update a RFID Tag",
50192
50379
  "deprecated": true,
50193
50380
  "tags": [
50194
50381
  "resource / rfids"
@@ -52104,7 +52291,7 @@
52104
52291
  "method": "GET",
52105
52292
  "operationId": "securityEventLogsListingDeprecated",
52106
52293
  "summary": "Security Events Logs / Listing",
52107
- "description": "Get all Security Events Log",
52294
+ "description": "**Deprecated:** Use `/resources/security-events/v2.0` instead. Get all Security Events Log",
52108
52295
  "deprecated": true,
52109
52296
  "tags": [
52110
52297
  "resource / security event logs"
@@ -52171,7 +52358,7 @@
52171
52358
  "method": "GET",
52172
52359
  "operationId": "securityEventLogReadDeprecated",
52173
52360
  "summary": "Security Event Log / Read",
52174
- "description": "Get a Security Event Log",
52361
+ "description": "**Deprecated:** Use `/resources/security-events/v2.0/{securityEvent}` instead. Get a Security Event Log",
52175
52362
  "deprecated": true,
52176
52363
  "tags": [
52177
52364
  "resource / security event logs"
@@ -58145,22 +58332,28 @@
58145
58332
  "stopSession": {
58146
58333
  "type": "object",
58147
58334
  "properties": {
58148
- "timeLimitMinutes": {
58335
+ "stopWhenPreAuthorizedAmountFallsBelow": {
58149
58336
  "type": "number",
58150
- "nullable": true,
58151
- "description": "Session max time. The maximum minutes a session is allowed to run. Skip for no time limit."
58337
+ "format": "decimal",
58338
+ "minimum": 0,
58339
+ "nullable": false
58152
58340
  },
58153
- "stopWhenEnergyExceedsKwh": {
58341
+ "autoStopAmount": {
58154
58342
  "type": "number",
58155
- "nullable": true,
58156
- "description": "The maximum energy (kWh) allowed per session. Skip for no limit."
58157
- },
58158
- "stopWhenSocExceedsPercent": {
58159
- "type": "integer",
58160
- "minimum": 70,
58161
- "maximum": 99,
58162
- "nullable": true,
58163
- "description": "Stop the session when the vehicle's reported State of Charge reaches or exceeds this value. If the charge point does not report SoC, this criterion is ignored. Accepts values between 70 and 99."
58343
+ "format": "decimal",
58344
+ "minimum": 0,
58345
+ "nullable": false
58346
+ }
58347
+ }
58348
+ },
58349
+ "startSessionRestrictions": {
58350
+ "type": "object",
58351
+ "properties": {
58352
+ "minimumBalance": {
58353
+ "type": "number",
58354
+ "format": "decimal",
58355
+ "minimum": 0,
58356
+ "nullable": false
58164
58357
  }
58165
58358
  }
58166
58359
  },
@@ -58424,7 +58617,7 @@
58424
58617
  "method": "PUT",
58425
58618
  "operationId": "tariffUpdate",
58426
58619
  "summary": "Tariff / Update",
58427
- "description": "Update a tariff",
58620
+ "description": "Update a tariff. Derived tariffs are read-only.",
58428
58621
  "tags": [
58429
58622
  "resource / tariffs"
58430
58623
  ],
@@ -59281,6 +59474,32 @@
59281
59474
  "maximum": 99,
59282
59475
  "nullable": true,
59283
59476
  "description": "Stop the session when the vehicle's reported State of Charge reaches or exceeds this value. If the charge point does not report SoC, this criterion is ignored. Accepts values between 70 and 99."
59477
+ },
59478
+ "stopWhenPreAuthorizedAmountFallsBelow": {
59479
+ "type": "number",
59480
+ "format": "decimal",
59481
+ "minimum": 0,
59482
+ "nullable": true,
59483
+ "description": "Tariff-level override that stops the session when the remaining pre-authorised amount drops below this value. Send `null` to clear the override and revert to the global default from User billing settings. Honoured only when the tariff's billing strategy is `Require payment method and authorize certain amount before starting session` or `Require payment method OR minimum amount in balance`, and currently only for tariff types `Duration + Energy`, `Duration + Energy ToD`, and `Power Levels`. Values set on a tariff with an incompatible billing strategy are reset to the global default on save."
59484
+ },
59485
+ "autoStopAmount": {
59486
+ "type": "number",
59487
+ "format": "decimal",
59488
+ "minimum": 0,
59489
+ "nullable": true,
59490
+ "description": "Tariff-level override that stops the session when the user's available balance drops below this value. Send `null` to clear the override and revert to the global default from User billing settings. Honoured only when the tariff's billing strategy is `Require payment method OR minimum amount in balance`. Values set on a tariff with an incompatible billing strategy are reset to the global default on save."
59491
+ }
59492
+ }
59493
+ },
59494
+ "startSessionRestrictions": {
59495
+ "type": "object",
59496
+ "properties": {
59497
+ "minimumBalance": {
59498
+ "type": "number",
59499
+ "format": "decimal",
59500
+ "minimum": 0,
59501
+ "nullable": true,
59502
+ "description": "Tariff-level override for the minimum balance a user must have before a session is allowed to start. Send `null` to clear the override and revert to the global default from User billing settings. Honoured only when the tariff's billing strategy is `Require payment method OR minimum amount in balance`. Values set on a tariff with an incompatible billing strategy are reset to the global default on save."
59284
59503
  }
59285
59504
  }
59286
59505
  },
@@ -59520,7 +59739,7 @@
59520
59739
  "method": "DELETE",
59521
59740
  "operationId": "tariffDelete",
59522
59741
  "summary": "Tariff / Delete",
59523
- "description": "Delete a tariff",
59742
+ "description": "Delete a tariff. Derived tariffs are read-only.",
59524
59743
  "tags": [
59525
59744
  "resource / tariffs"
59526
59745
  ],
@@ -59550,7 +59769,7 @@
59550
59769
  "method": "PATCH",
59551
59770
  "operationId": "tariffPartialUpdate",
59552
59771
  "summary": "Tariff / Partial Update",
59553
- "description": "Partially update a tariff. Only the fields included in the request body are updated. Omitted fields retain their current values. Nested objects are merged recursively, while arrays are fully replaced. The tariff type cannot be changed via PATCH — use PUT with the full payload instead.",
59772
+ "description": "Partially update a tariff. Only the fields included in the request body are updated. Omitted fields retain their current values. Nested objects are merged recursively, while arrays are fully replaced. The tariff type cannot be changed via PATCH — use PUT with the full payload instead. Derived tariffs are read-only.",
59554
59773
  "tags": [
59555
59774
  "resource / tariffs"
59556
59775
  ],
@@ -60407,6 +60626,32 @@
60407
60626
  "maximum": 99,
60408
60627
  "nullable": true,
60409
60628
  "description": "Stop the session when the vehicle's reported State of Charge reaches or exceeds this value. If the charge point does not report SoC, this criterion is ignored. Accepts values between 70 and 99."
60629
+ },
60630
+ "stopWhenPreAuthorizedAmountFallsBelow": {
60631
+ "type": "number",
60632
+ "format": "decimal",
60633
+ "minimum": 0,
60634
+ "nullable": true,
60635
+ "description": "Tariff-level override that stops the session when the remaining pre-authorised amount drops below this value. Send `null` to clear the override and revert to the global default from User billing settings. Honoured only when the tariff's billing strategy is `Require payment method and authorize certain amount before starting session` or `Require payment method OR minimum amount in balance`, and currently only for tariff types `Duration + Energy`, `Duration + Energy ToD`, and `Power Levels`. Values set on a tariff with an incompatible billing strategy are reset to the global default on save."
60636
+ },
60637
+ "autoStopAmount": {
60638
+ "type": "number",
60639
+ "format": "decimal",
60640
+ "minimum": 0,
60641
+ "nullable": true,
60642
+ "description": "Tariff-level override that stops the session when the user's available balance drops below this value. Send `null` to clear the override and revert to the global default from User billing settings. Honoured only when the tariff's billing strategy is `Require payment method OR minimum amount in balance`. Values set on a tariff with an incompatible billing strategy are reset to the global default on save."
60643
+ }
60644
+ }
60645
+ },
60646
+ "startSessionRestrictions": {
60647
+ "type": "object",
60648
+ "properties": {
60649
+ "minimumBalance": {
60650
+ "type": "number",
60651
+ "format": "decimal",
60652
+ "minimum": 0,
60653
+ "nullable": true,
60654
+ "description": "Tariff-level override for the minimum balance a user must have before a session is allowed to start. Send `null` to clear the override and revert to the global default from User billing settings. Honoured only when the tariff's billing strategy is `Require payment method OR minimum amount in balance`. Values set on a tariff with an incompatible billing strategy are reset to the global default on save."
60410
60655
  }
60411
60656
  }
60412
60657
  },
@@ -60702,7 +60947,7 @@
60702
60947
  "method": "POST",
60703
60948
  "operationId": "tariffScheduledChangeCreate",
60704
60949
  "summary": "Tariff / Scheduled Change / Create",
60705
- "description": "Create a new scheduled pricing change for the tariff",
60950
+ "description": "Create a new scheduled pricing change for the tariff. Not allowed on derived tariffs.",
60706
60951
  "tags": [
60707
60952
  "resource / tariffs"
60708
60953
  ],
@@ -61612,7 +61857,7 @@
61612
61857
  "method": "DELETE",
61613
61858
  "operationId": "tariffScheduledChangeDelete",
61614
61859
  "summary": "Tariff / Scheduled Change / Delete",
61615
- "description": "Delete a scheduled pricing change",
61860
+ "description": "Delete a scheduled pricing change. Not allowed on derived tariffs.",
61616
61861
  "tags": [
61617
61862
  "resource / tariffs"
61618
61863
  ],
@@ -61639,7 +61884,7 @@
61639
61884
  "method": "PATCH",
61640
61885
  "operationId": "tariffScheduledChangeUpdate",
61641
61886
  "summary": "Tariff / Scheduled Change / Update",
61642
- "description": "Update a pending scheduled pricing change",
61887
+ "description": "Update a pending scheduled pricing change. Not allowed on derived tariffs.",
61643
61888
  "tags": [
61644
61889
  "resource / tariffs"
61645
61890
  ],
@@ -63484,7 +63729,7 @@
63484
63729
  },
63485
63730
  "invoiceNumber": {
63486
63731
  "type": "string",
63487
- "description": "Filter transactions by invoice number string (e.g., \"INV-2024-001\"). Use this when you have the human-readable invoice number. To filter by the invoice's database ID, use invoiceId instead."
63732
+ "description": "Filter transactions by invoice number string (e.g., \"INV-2024-001\"). Use this when you have the human-readable invoice number. To filter by the invoice's database ID, use invoiceId instead. Matches only the transaction's current valid invoice. A transaction whose invoice was fully reversed and replaced is matched by the replacement's number, not by the reversed original's."
63488
63733
  },
63489
63734
  "status": {
63490
63735
  "type": "string",
@@ -63571,7 +63816,7 @@
63571
63816
  "invoiceId": {
63572
63817
  "type": "string",
63573
63818
  "format": "integer",
63574
- "description": "Filter transactions by invoice's internal database ID as returned in the transaction response. Use this when you have the invoiceId from a previous API response. To filter by the human-readable invoice number string, use invoiceNumber instead."
63819
+ "description": "Filter transactions by invoice's internal database ID as returned in the transaction response. Use this when you have the invoiceId from a previous API response. To filter by the human-readable invoice number string, use invoiceNumber instead. Matches only the transaction's current valid invoice. A transaction whose invoice was fully reversed and replaced is matched by the replacement's ID, not by the reversed original's."
63575
63820
  },
63576
63821
  "purchaseType": {
63577
63822
  "type": "array",
@@ -64232,6 +64477,9 @@
64232
64477
  "422": {
64233
64478
  "description": "The payload you provided is invalid"
64234
64479
  },
64480
+ "424": {
64481
+ "description": "The requested operation cannot be completed because something it depends on is currently unavailable, such as an external system (e.g., a charge point) that is disconnected or unreachable, or required reference data (e.g., an exchange rate) that is missing. The `message` property carries the reason."
64482
+ },
64235
64483
  "429": {
64236
64484
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
64237
64485
  }
@@ -64527,6 +64775,9 @@
64527
64775
  "422": {
64528
64776
  "description": "The payload you provided is invalid"
64529
64777
  },
64778
+ "424": {
64779
+ "description": "The requested operation cannot be completed because something it depends on is currently unavailable, such as an external system (e.g., a charge point) that is disconnected or unreachable, or required reference data (e.g., an exchange rate) that is missing. The `message` property carries the reason."
64780
+ },
64530
64781
  "429": {
64531
64782
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
64532
64783
  }
@@ -64776,7 +65027,7 @@
64776
65027
  "partnerId": {
64777
65028
  "type": "integer",
64778
65029
  "nullable": true,
64779
- "description": "The partnerId can be updated only if there are no users added to the user group"
65030
+ "description": "The partner ID. It must belong to the token's operator. For sub-operator tokens it is required and non-null on create, and must reference a partner assigned to that sub-operator. On PATCH it may be omitted to retain the existing partner; when supplied it must be non-null and assigned to that sub-operator. For partner tokens it is always the token's own partner: it defaults to that partner when omitted on create, and any other value, including null, is rejected. Optional and nullable for global and operator tokens. The partner can be updated only if there are no users added to the user group."
64780
65031
  },
64781
65032
  "description": {
64782
65033
  "type": "string",
@@ -64847,6 +65098,75 @@
64847
65098
  }
64848
65099
  }
64849
65100
  },
65101
+ {
65102
+ "path": "/public-api/resources/user-groups/v1.0/{userGroup}",
65103
+ "method": "PUT",
65104
+ "operationId": "userGroupReplace",
65105
+ "summary": "User Group / Replace",
65106
+ "description": "Replace a user group. Unlike `PATCH`, the request body is a complete representation: any writable property that is omitted is reset rather than preserved. Use `PATCH` to change a subset of properties.",
65107
+ "tags": [
65108
+ "resource / user-groups"
65109
+ ],
65110
+ "requestBody": {
65111
+ "required": true,
65112
+ "content": {
65113
+ "application/json": {
65114
+ "schema": {
65115
+ "type": "object",
65116
+ "properties": {
65117
+ "name": {
65118
+ "type": "string"
65119
+ },
65120
+ "partnerId": {
65121
+ "type": "integer",
65122
+ "nullable": true,
65123
+ "description": "The partner ID. It must belong to the token's operator. For sub-operator tokens it is required and non-null on create, and must reference a partner assigned to that sub-operator. On PATCH it may be omitted to retain the existing partner; when supplied it must be non-null and assigned to that sub-operator. For partner tokens it is always the token's own partner: it defaults to that partner when omitted on create, and any other value, including null, is rejected. Optional and nullable for global and operator tokens. The partner can be updated only if there are no users added to the user group."
65124
+ },
65125
+ "description": {
65126
+ "type": "string",
65127
+ "maxLength": 2000,
65128
+ "nullable": true
65129
+ },
65130
+ "externalId": {
65131
+ "type": "string",
65132
+ "maxLength": 255,
65133
+ "nullable": true,
65134
+ "description": "Used to store custom information, usually used for external references or metadata to the resource."
65135
+ },
65136
+ "lastUpdatedAt": {
65137
+ "type": "string",
65138
+ "format": "date-time",
65139
+ "description": "ISO 8601 formatted date"
65140
+ }
65141
+ },
65142
+ "required": [
65143
+ "name"
65144
+ ]
65145
+ }
65146
+ }
65147
+ }
65148
+ },
65149
+ "responses": {
65150
+ "200": {
65151
+ "description": "Replaced successfully"
65152
+ },
65153
+ "401": {
65154
+ "description": "Access token is missing or invalid"
65155
+ },
65156
+ "403": {
65157
+ "description": "You do not have permission to perform the action"
65158
+ },
65159
+ "404": {
65160
+ "description": "The record is not found"
65161
+ },
65162
+ "422": {
65163
+ "description": "The payload you provided is invalid"
65164
+ },
65165
+ "429": {
65166
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
65167
+ }
65168
+ }
65169
+ },
64850
65170
  {
64851
65171
  "path": "/public-api/resources/user-groups/v1.0/{userGroup}",
64852
65172
  "method": "DELETE",
@@ -64899,7 +65219,7 @@
64899
65219
  "partnerId": {
64900
65220
  "type": "integer",
64901
65221
  "nullable": true,
64902
- "description": "The partnerId can be updated only if there are no users added to the user group"
65222
+ "description": "The partner ID. It must belong to the token's operator. For sub-operator tokens it is required and non-null on create, and must reference a partner assigned to that sub-operator. On PATCH it may be omitted to retain the existing partner; when supplied it must be non-null and assigned to that sub-operator. For partner tokens it is always the token's own partner: it defaults to that partner when omitted on create, and any other value, including null, is rejected. Optional and nullable for global and operator tokens. The partner can be updated only if there are no users added to the user group."
64903
65223
  },
64904
65224
  "description": {
64905
65225
  "type": "string",
@@ -72605,7 +72925,7 @@
72605
72925
  ],
72606
72926
  "info": {
72607
72927
  "title": "Public API",
72608
- "version": "3.251.10",
72928
+ "version": "3.253.0",
72609
72929
  "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"
72610
72930
  },
72611
72931
  "servers": [
@@ -72619,18 +72939,18 @@
72619
72939
  }
72620
72940
  }
72621
72941
  ],
72622
- "buildTimestamp": "2026-09-23T09:28:52.027Z",
72942
+ "buildTimestamp": "2026-09-24T06:40:09.045Z",
72623
72943
  "stats": {
72624
- "totalEndpoints": 648,
72625
- "originalSize": 6020721,
72626
- "optimizedSize": 1671968,
72627
- "reductionPercent": 72.23,
72628
- "buildDuration": 1715,
72944
+ "totalEndpoints": 651,
72945
+ "originalSize": 6087577,
72946
+ "optimizedSize": 1691324,
72947
+ "reductionPercent": 72.22,
72948
+ "buildDuration": 2141,
72629
72949
  "responseSchemas": {
72630
- "total": 648,
72631
- "withSchemas": 648,
72632
- "totalSchemaSize": 3455237,
72633
- "averageSchemaSize": 5332
72950
+ "total": 651,
72951
+ "withSchemas": 651,
72952
+ "totalSchemaSize": 3494283,
72953
+ "averageSchemaSize": 5368
72634
72954
  }
72635
72955
  }
72636
72956
  }