@ampeco/public-api-mcp 3.251.9 → 3.252.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",
@@ -49961,7 +50147,7 @@
49961
50147
  "method": "GET",
49962
50148
  "operationId": "rfidTagsListingDeprecated",
49963
50149
  "summary": "RFID Tags / Listing",
49964
- "description": "Get all rfid tags",
50150
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0` instead. Get all rfid tags",
49965
50151
  "deprecated": true,
49966
50152
  "tags": [
49967
50153
  "resource / rfids"
@@ -50050,7 +50236,7 @@
50050
50236
  "method": "POST",
50051
50237
  "operationId": "rfidTagCreateDeprecated",
50052
50238
  "summary": "RFID Tag / Create",
50053
- "description": "Create new RFID Tag",
50239
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0` instead. Create new RFID Tag",
50054
50240
  "deprecated": true,
50055
50241
  "tags": [
50056
50242
  "resource / rfids"
@@ -50135,7 +50321,7 @@
50135
50321
  "method": "GET",
50136
50322
  "operationId": "rfidTagReadDeprecated",
50137
50323
  "summary": "RFID Tag / Read",
50138
- "description": "Get a RFID Tag",
50324
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0/{idTag}` instead. Get a RFID Tag",
50139
50325
  "deprecated": true,
50140
50326
  "tags": [
50141
50327
  "resource / rfids"
@@ -50163,7 +50349,7 @@
50163
50349
  "method": "DELETE",
50164
50350
  "operationId": "rfidTagDeleteDeprecated",
50165
50351
  "summary": "RFID Tag / Delete",
50166
- "description": "Delete a RFID Tag",
50352
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0/{idTag}` instead. Delete a RFID Tag",
50167
50353
  "deprecated": true,
50168
50354
  "tags": [
50169
50355
  "resource / rfids"
@@ -50188,7 +50374,7 @@
50188
50374
  "method": "PATCH",
50189
50375
  "operationId": "rfidTagUpdateDeprecated",
50190
50376
  "summary": "RFID Tag / Update",
50191
- "description": "Update a RFID Tag",
50377
+ "description": "**Deprecated:** Use `/resources/id-tags/v2.0/{idTag}` instead. Update a RFID Tag",
50192
50378
  "deprecated": true,
50193
50379
  "tags": [
50194
50380
  "resource / rfids"
@@ -52104,7 +52290,7 @@
52104
52290
  "method": "GET",
52105
52291
  "operationId": "securityEventLogsListingDeprecated",
52106
52292
  "summary": "Security Events Logs / Listing",
52107
- "description": "Get all Security Events Log",
52293
+ "description": "**Deprecated:** Use `/resources/security-events/v2.0` instead. Get all Security Events Log",
52108
52294
  "deprecated": true,
52109
52295
  "tags": [
52110
52296
  "resource / security event logs"
@@ -52171,7 +52357,7 @@
52171
52357
  "method": "GET",
52172
52358
  "operationId": "securityEventLogReadDeprecated",
52173
52359
  "summary": "Security Event Log / Read",
52174
- "description": "Get a Security Event Log",
52360
+ "description": "**Deprecated:** Use `/resources/security-events/v2.0/{securityEvent}` instead. Get a Security Event Log",
52175
52361
  "deprecated": true,
52176
52362
  "tags": [
52177
52363
  "resource / security event logs"
@@ -58145,22 +58331,28 @@
58145
58331
  "stopSession": {
58146
58332
  "type": "object",
58147
58333
  "properties": {
58148
- "timeLimitMinutes": {
58334
+ "stopWhenPreAuthorizedAmountFallsBelow": {
58149
58335
  "type": "number",
58150
- "nullable": true,
58151
- "description": "Session max time. The maximum minutes a session is allowed to run. Skip for no time limit."
58336
+ "format": "decimal",
58337
+ "minimum": 0,
58338
+ "nullable": false
58152
58339
  },
58153
- "stopWhenEnergyExceedsKwh": {
58340
+ "autoStopAmount": {
58154
58341
  "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."
58342
+ "format": "decimal",
58343
+ "minimum": 0,
58344
+ "nullable": false
58345
+ }
58346
+ }
58347
+ },
58348
+ "startSessionRestrictions": {
58349
+ "type": "object",
58350
+ "properties": {
58351
+ "minimumBalance": {
58352
+ "type": "number",
58353
+ "format": "decimal",
58354
+ "minimum": 0,
58355
+ "nullable": false
58164
58356
  }
58165
58357
  }
58166
58358
  },
@@ -58424,7 +58616,7 @@
58424
58616
  "method": "PUT",
58425
58617
  "operationId": "tariffUpdate",
58426
58618
  "summary": "Tariff / Update",
58427
- "description": "Update a tariff",
58619
+ "description": "Update a tariff. Derived tariffs are read-only.",
58428
58620
  "tags": [
58429
58621
  "resource / tariffs"
58430
58622
  ],
@@ -59281,6 +59473,32 @@
59281
59473
  "maximum": 99,
59282
59474
  "nullable": true,
59283
59475
  "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."
59476
+ },
59477
+ "stopWhenPreAuthorizedAmountFallsBelow": {
59478
+ "type": "number",
59479
+ "format": "decimal",
59480
+ "minimum": 0,
59481
+ "nullable": true,
59482
+ "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."
59483
+ },
59484
+ "autoStopAmount": {
59485
+ "type": "number",
59486
+ "format": "decimal",
59487
+ "minimum": 0,
59488
+ "nullable": true,
59489
+ "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."
59490
+ }
59491
+ }
59492
+ },
59493
+ "startSessionRestrictions": {
59494
+ "type": "object",
59495
+ "properties": {
59496
+ "minimumBalance": {
59497
+ "type": "number",
59498
+ "format": "decimal",
59499
+ "minimum": 0,
59500
+ "nullable": true,
59501
+ "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
59502
  }
59285
59503
  }
59286
59504
  },
@@ -59520,7 +59738,7 @@
59520
59738
  "method": "DELETE",
59521
59739
  "operationId": "tariffDelete",
59522
59740
  "summary": "Tariff / Delete",
59523
- "description": "Delete a tariff",
59741
+ "description": "Delete a tariff. Derived tariffs are read-only.",
59524
59742
  "tags": [
59525
59743
  "resource / tariffs"
59526
59744
  ],
@@ -59550,7 +59768,7 @@
59550
59768
  "method": "PATCH",
59551
59769
  "operationId": "tariffPartialUpdate",
59552
59770
  "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.",
59771
+ "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
59772
  "tags": [
59555
59773
  "resource / tariffs"
59556
59774
  ],
@@ -60407,6 +60625,32 @@
60407
60625
  "maximum": 99,
60408
60626
  "nullable": true,
60409
60627
  "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."
60628
+ },
60629
+ "stopWhenPreAuthorizedAmountFallsBelow": {
60630
+ "type": "number",
60631
+ "format": "decimal",
60632
+ "minimum": 0,
60633
+ "nullable": true,
60634
+ "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."
60635
+ },
60636
+ "autoStopAmount": {
60637
+ "type": "number",
60638
+ "format": "decimal",
60639
+ "minimum": 0,
60640
+ "nullable": true,
60641
+ "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."
60642
+ }
60643
+ }
60644
+ },
60645
+ "startSessionRestrictions": {
60646
+ "type": "object",
60647
+ "properties": {
60648
+ "minimumBalance": {
60649
+ "type": "number",
60650
+ "format": "decimal",
60651
+ "minimum": 0,
60652
+ "nullable": true,
60653
+ "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
60654
  }
60411
60655
  }
60412
60656
  },
@@ -60702,7 +60946,7 @@
60702
60946
  "method": "POST",
60703
60947
  "operationId": "tariffScheduledChangeCreate",
60704
60948
  "summary": "Tariff / Scheduled Change / Create",
60705
- "description": "Create a new scheduled pricing change for the tariff",
60949
+ "description": "Create a new scheduled pricing change for the tariff. Not allowed on derived tariffs.",
60706
60950
  "tags": [
60707
60951
  "resource / tariffs"
60708
60952
  ],
@@ -61612,7 +61856,7 @@
61612
61856
  "method": "DELETE",
61613
61857
  "operationId": "tariffScheduledChangeDelete",
61614
61858
  "summary": "Tariff / Scheduled Change / Delete",
61615
- "description": "Delete a scheduled pricing change",
61859
+ "description": "Delete a scheduled pricing change. Not allowed on derived tariffs.",
61616
61860
  "tags": [
61617
61861
  "resource / tariffs"
61618
61862
  ],
@@ -61639,7 +61883,7 @@
61639
61883
  "method": "PATCH",
61640
61884
  "operationId": "tariffScheduledChangeUpdate",
61641
61885
  "summary": "Tariff / Scheduled Change / Update",
61642
- "description": "Update a pending scheduled pricing change",
61886
+ "description": "Update a pending scheduled pricing change. Not allowed on derived tariffs.",
61643
61887
  "tags": [
61644
61888
  "resource / tariffs"
61645
61889
  ],
@@ -63484,7 +63728,7 @@
63484
63728
  },
63485
63729
  "invoiceNumber": {
63486
63730
  "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."
63731
+ "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
63732
  },
63489
63733
  "status": {
63490
63734
  "type": "string",
@@ -63571,7 +63815,7 @@
63571
63815
  "invoiceId": {
63572
63816
  "type": "string",
63573
63817
  "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."
63818
+ "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
63819
  },
63576
63820
  "purchaseType": {
63577
63821
  "type": "array",
@@ -64232,6 +64476,9 @@
64232
64476
  "422": {
64233
64477
  "description": "The payload you provided is invalid"
64234
64478
  },
64479
+ "424": {
64480
+ "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."
64481
+ },
64235
64482
  "429": {
64236
64483
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
64237
64484
  }
@@ -64527,6 +64774,9 @@
64527
64774
  "422": {
64528
64775
  "description": "The payload you provided is invalid"
64529
64776
  },
64777
+ "424": {
64778
+ "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."
64779
+ },
64530
64780
  "429": {
64531
64781
  "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
64532
64782
  }
@@ -64776,7 +65026,7 @@
64776
65026
  "partnerId": {
64777
65027
  "type": "integer",
64778
65028
  "nullable": true,
64779
- "description": "The partnerId can be updated only if there are no users added to the user group"
65029
+ "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
65030
  },
64781
65031
  "description": {
64782
65032
  "type": "string",
@@ -64847,6 +65097,75 @@
64847
65097
  }
64848
65098
  }
64849
65099
  },
65100
+ {
65101
+ "path": "/public-api/resources/user-groups/v1.0/{userGroup}",
65102
+ "method": "PUT",
65103
+ "operationId": "userGroupReplace",
65104
+ "summary": "User Group / Replace",
65105
+ "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.",
65106
+ "tags": [
65107
+ "resource / user-groups"
65108
+ ],
65109
+ "requestBody": {
65110
+ "required": true,
65111
+ "content": {
65112
+ "application/json": {
65113
+ "schema": {
65114
+ "type": "object",
65115
+ "properties": {
65116
+ "name": {
65117
+ "type": "string"
65118
+ },
65119
+ "partnerId": {
65120
+ "type": "integer",
65121
+ "nullable": true,
65122
+ "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."
65123
+ },
65124
+ "description": {
65125
+ "type": "string",
65126
+ "maxLength": 2000,
65127
+ "nullable": true
65128
+ },
65129
+ "externalId": {
65130
+ "type": "string",
65131
+ "maxLength": 255,
65132
+ "nullable": true,
65133
+ "description": "Used to store custom information, usually used for external references or metadata to the resource."
65134
+ },
65135
+ "lastUpdatedAt": {
65136
+ "type": "string",
65137
+ "format": "date-time",
65138
+ "description": "ISO 8601 formatted date"
65139
+ }
65140
+ },
65141
+ "required": [
65142
+ "name"
65143
+ ]
65144
+ }
65145
+ }
65146
+ }
65147
+ },
65148
+ "responses": {
65149
+ "200": {
65150
+ "description": "Replaced successfully"
65151
+ },
65152
+ "401": {
65153
+ "description": "Access token is missing or invalid"
65154
+ },
65155
+ "403": {
65156
+ "description": "You do not have permission to perform the action"
65157
+ },
65158
+ "404": {
65159
+ "description": "The record is not found"
65160
+ },
65161
+ "422": {
65162
+ "description": "The payload you provided is invalid"
65163
+ },
65164
+ "429": {
65165
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
65166
+ }
65167
+ }
65168
+ },
64850
65169
  {
64851
65170
  "path": "/public-api/resources/user-groups/v1.0/{userGroup}",
64852
65171
  "method": "DELETE",
@@ -64899,7 +65218,7 @@
64899
65218
  "partnerId": {
64900
65219
  "type": "integer",
64901
65220
  "nullable": true,
64902
- "description": "The partnerId can be updated only if there are no users added to the user group"
65221
+ "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
65222
  },
64904
65223
  "description": {
64905
65224
  "type": "string",
@@ -72605,7 +72924,7 @@
72605
72924
  ],
72606
72925
  "info": {
72607
72926
  "title": "Public API",
72608
- "version": "3.251.9",
72927
+ "version": "3.252.0",
72609
72928
  "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
72929
  },
72611
72930
  "servers": [
@@ -72619,18 +72938,18 @@
72619
72938
  }
72620
72939
  }
72621
72940
  ],
72622
- "buildTimestamp": "2026-09-22T14:55:30.238Z",
72941
+ "buildTimestamp": "2026-09-23T11:49:39.805Z",
72623
72942
  "stats": {
72624
- "totalEndpoints": 648,
72625
- "originalSize": 6020721,
72626
- "optimizedSize": 1671968,
72627
- "reductionPercent": 72.23,
72628
- "buildDuration": 1631,
72943
+ "totalEndpoints": 651,
72944
+ "originalSize": 6087481,
72945
+ "optimizedSize": 1691316,
72946
+ "reductionPercent": 72.22,
72947
+ "buildDuration": 1588,
72629
72948
  "responseSchemas": {
72630
- "total": 648,
72631
- "withSchemas": 648,
72632
- "totalSchemaSize": 3455237,
72633
- "averageSchemaSize": 5332
72949
+ "total": 651,
72950
+ "withSchemas": 651,
72951
+ "totalSchemaSize": 3494211,
72952
+ "averageSchemaSize": 5367
72634
72953
  }
72635
72954
  }
72636
72955
  }