@ampeco/public-api-mcp 3.258.1 → 3.259.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.
@@ -2426,6 +2426,7 @@
2426
2426
  "method": "POST",
2427
2427
  "operationId": "circuitSetSessionPriority",
2428
2428
  "summary": "Circuit / Set Session Priority",
2429
+ "description": "On built-in DLM circuits, a positive priority other than 1 replaces only the session's state-of-charge (SoC) factor; charge point, connector and user priorities still multiply. With otherwise identical factors and neutral SoC, 2 doubles and 0.5 halves the session's share, subject to capacity limits. Values 0 and 1 use SoC-based weighting; setting the priority back to 1 restores it. Changing the priority of an active built-in session immediately recalculates the root circuit's allocation. On DREEV-integrated circuits, the field's different behavior remains unchanged.",
2429
2430
  "tags": [
2430
2431
  "action / circuit"
2431
2432
  ],
@@ -2496,7 +2497,7 @@
2496
2497
  "shouldPersist": {
2497
2498
  "type": "boolean",
2498
2499
  "default": false,
2499
- "description": "Specifies whether the configuration template will be enforced each time the charge point boots."
2500
+ "description": "Specifies whether the configuration template will be enforced each time the charge point boots. When `true`, a different persistent configuration template already assigned to a charge point is replaced by this one."
2500
2501
  },
2501
2502
  "resetType": {
2502
2503
  "type": "string",
@@ -3759,7 +3760,7 @@
3759
3760
  "method": "POST",
3760
3761
  "operationId": "locationCheckBookingAvailability",
3761
3762
  "summary": "Location / Check Booking Availability",
3762
- "description": "Get a consolidated view of EVSEs availability for a given location and time frame. Returns available time slots for each bookable EVSE at the location.",
3763
+ "description": "Get a consolidated view of EVSEs availability for a given location and time frame. Returns available time slots for bookable EVSEs at the authorized location. The existing commercial-public candidate pool is preserved, including public EVSEs from other operators available through internal roaming. When userId is supplied, caller-visible commercial-private EVSEs are also included if the user's accepted partner invites have access policies granting the inviting partner's own charge points or charge points shared with that partner. The own-charge-point rule and shared-charge-point option are evaluated independently, and grants from accepted invites are combined. Other charging authorization methods do not substitute for these private booking grants. Personal charge points are excluded. Omitting userId or selecting a visible user without private access returns the same public-only availability.",
3763
3764
  "tags": [
3764
3765
  "action / location"
3765
3766
  ],
@@ -3779,6 +3780,10 @@
3779
3780
  "schema": {
3780
3781
  "type": "object",
3781
3782
  "properties": {
3783
+ "userId": {
3784
+ "type": "integer",
3785
+ "description": "Optional booking driver's ID. The user must be visible to the requesting admin. Unknown or invisible users are rejected with a validation error. Null is not accepted."
3786
+ },
3782
3787
  "startAfter": {
3783
3788
  "type": "string",
3784
3789
  "format": "date-time",
@@ -9466,7 +9471,7 @@
9466
9471
  "method": "POST",
9467
9472
  "operationId": "bookingRequestCreate",
9468
9473
  "summary": "Booking Request / Create",
9469
- "description": "Create a new booking request. If you want to find the available slots for a given location use the Actions / Location / Check Booking Availability",
9474
+ "description": "Create a request to create, update or cancel a booking. Create requests retain the existing commercial-public EVSE selection behavior, including the public internal-roaming candidate pool for automatic selection. Commercial-private EVSEs can additionally be booked for users with accepted partner-invite access-policy grants for own or shared charge points. Other charging authorization does not substitute for these grants, and personal charge points are excluded. See the location check booking availability action (`POST /public-api/actions/locations/v2.0/{location}/check-booking-availability`) for the private eligibility policy and available slots. Update requests evaluate access for the resulting booking user: a supplied userId replaces the user for the proposed update, while omission retains the current booking user. See the update request schema for effective selection and access-rejection semantics. A business rejection still creates a booking request and returns HTTP 201 with status \"rejected\" and a human-readable rejectionReason. The stored result is available through the booking request listing and read operations. Malformed input or supplied references that are unknown or invisible to the requesting admin fail validation with HTTP 422 instead; they do not create a booking request.",
9470
9475
  "tags": [
9471
9476
  "resource / booking requests"
9472
9477
  ],
@@ -9501,7 +9506,7 @@
9501
9506
  },
9502
9507
  "rejectionReason": {
9503
9508
  "type": "string",
9504
- "description": "Human-readable reason for rejection. Response behavior: Only present when status is \"rejected\". Omitted for \"pending\" and \"approved\" requests."
9509
+ "description": "Human-readable business rejection reason, persisted with the booking request and returned by its listing and read operations. Access-related rejections use this existing property, not a separate error code. See the create and update request schema descriptions for access-rejection conditions. Response behavior: Only present when status is \"rejected\". Omitted for \"pending\" and \"approved\" requests."
9505
9510
  },
9506
9511
  "createdAt": {
9507
9512
  "type": "string",
@@ -9513,7 +9518,7 @@
9513
9518
  },
9514
9519
  "userId": {
9515
9520
  "type": "integer",
9516
- "description": "ID of the user for whom the booking is made"
9521
+ "description": "ID of the booking user, who must be visible to the requesting admin. This user's accepted partner-invite access-policy grants determine commercial-private booking eligibility; commercial-public selection remains unchanged."
9517
9522
  },
9518
9523
  "locationId": {
9519
9524
  "type": "integer",
@@ -9536,7 +9541,7 @@
9536
9541
  },
9537
9542
  "evseId": {
9538
9543
  "type": "integer",
9539
- "description": "Specific EVSE ID to book. Response behavior: Only present when a specific EVSE was requested. Omitted when EVSE selection was based on criteria or left to the system."
9544
+ "description": "Specific EVSE ID to book. The reference must be visible to the requesting admin and belong to the requested location. A valid commercial-private reference still requires the booking user's private eligibility; lack of that eligibility is a business rejection, not an unknown-reference validation error. Response behavior: Only present when a specific EVSE was requested. Omitted when EVSE selection was based on criteria or left to the system."
9540
9545
  },
9541
9546
  "evseCriteria": {
9542
9547
  "type": "object",
@@ -9664,7 +9669,7 @@
9664
9669
  "startAt",
9665
9670
  "endAt"
9666
9671
  ],
9667
- "description": "Base properties for create booking request (shared between input and response)"
9672
+ "description": "Base properties for create booking requests, shared between input and response. Existing commercial-public selection is unchanged. Commercial-private eligibility additionally requires the booking user's accepted partner-invite access-policy grants for own or shared charge points; other charging authorization cannot replace these grants. Personal charge points are excluded. See the location check booking availability action for the eligibility policy. If no candidate can be selected, the created request is rejected. Its persisted rejectionReason can include booking-enabled EVSEs that are not accessible to the user, separately from EVSEs with booking disabled and other selection failures."
9668
9673
  },
9669
9674
  {
9670
9675
  "type": "object",
@@ -9691,7 +9696,7 @@
9691
9696
  },
9692
9697
  "rejectionReason": {
9693
9698
  "type": "string",
9694
- "description": "Human-readable reason for rejection. Response behavior: Only present when status is \"rejected\". Omitted for \"pending\" and \"approved\" requests."
9699
+ "description": "Human-readable business rejection reason, persisted with the booking request and returned by its listing and read operations. Access-related rejections use this existing property, not a separate error code. See the create and update request schema descriptions for access-rejection conditions. Response behavior: Only present when status is \"rejected\". Omitted for \"pending\" and \"approved\" requests."
9695
9700
  },
9696
9701
  "createdAt": {
9697
9702
  "type": "string",
@@ -9707,7 +9712,7 @@
9707
9712
  },
9708
9713
  "userId": {
9709
9714
  "type": "integer",
9710
- "description": "ID of the user for whom the booking is made"
9715
+ "description": "ID of the proposed booking user, who must be visible to the requesting admin. Access is evaluated for this resulting user; when omitted, the booking's current user is retained and evaluated. A rejected update does not change the booking's user."
9711
9716
  },
9712
9717
  "externalId": {
9713
9718
  "type": "string",
@@ -9736,7 +9741,7 @@
9736
9741
  "type",
9737
9742
  "bookingId"
9738
9743
  ],
9739
- "description": "Base properties for update booking request (shared between input and response)"
9744
+ "description": "Base properties for update booking requests, shared between input and response. Access is evaluated for the resulting booking user and time slot at the booking's location. Omitting userId retains the current user. The supported update input does not carry evseId, evseCriteria or parkingSpaceCriteria from the original create request; original create criteria are not reapplied by this input. When no candidate remains, the request is rejected for lack of user access if a caller-visible, booking-enabled, access-excluded commercial-private EVSE satisfies the effective update selection requirements. This access attribution is independent of occupancy. Other empty selection results retain the time-slot-unavailable rejection. A successful selection takes precedence over these rejection reasons. An access rejection persists the booking request with status \"rejected\" and rejectionReason \"The booking cannot be updated because the user has no access to a bookable EVSE at the location.\" The existing booking's user, held EVSEs, dates, reservation and reservation cycle remain unchanged."
9740
9745
  },
9741
9746
  {
9742
9747
  "type": "object",
@@ -9763,7 +9768,7 @@
9763
9768
  },
9764
9769
  "rejectionReason": {
9765
9770
  "type": "string",
9766
- "description": "Human-readable reason for rejection. Response behavior: Only present when status is \"rejected\". Omitted for \"pending\" and \"approved\" requests."
9771
+ "description": "Human-readable business rejection reason, persisted with the booking request and returned by its listing and read operations. Access-related rejections use this existing property, not a separate error code. See the create and update request schema descriptions for access-rejection conditions. Response behavior: Only present when status is \"rejected\". Omitted for \"pending\" and \"approved\" requests."
9767
9772
  },
9768
9773
  "createdAt": {
9769
9774
  "type": "string",
@@ -31790,6 +31795,12 @@
31790
31795
  "schema": {
31791
31796
  "type": "object",
31792
31797
  "properties": {
31798
+ "averagePrice": {
31799
+ "type": "number",
31800
+ "minimum": 0,
31801
+ "maximum": 10000000000000,
31802
+ "description": "Average charging price in the location operator's currency. Submitted prices must be non-negative and use the effective operator currency's unit-price precision. Zero indicates free charging. Omit the property to create a location without an average price."
31803
+ },
31793
31804
  "id": {
31794
31805
  "type": "integer"
31795
31806
  },
@@ -32793,6 +32804,13 @@
32793
32804
  "schema": {
32794
32805
  "type": "object",
32795
32806
  "properties": {
32807
+ "averagePrice": {
32808
+ "type": "number",
32809
+ "minimum": 0,
32810
+ "maximum": 10000000000000,
32811
+ "nullable": true,
32812
+ "description": "Average charging price in the location operator's currency. Submitted prices must be non-negative and use the effective operator currency's unit-price precision. Zero indicates free charging. Send null to clear the price; omit the property to preserve the stored price."
32813
+ },
32796
32814
  "id": {
32797
32815
  "type": "integer"
32798
32816
  },
@@ -34305,6 +34323,7 @@
34305
34323
  "previous_session_not_paid",
34306
34324
  "unpaid_subscription_fees",
34307
34325
  "payment_method_required",
34326
+ "corporate_billing_disabled",
34308
34327
  "corporate_billing_policy_inactive",
34309
34328
  "corporate_billing_limit_exceeded",
34310
34329
  "corporate_account_limit_reached",
@@ -34352,7 +34371,7 @@
34352
34371
  "ocpi_roaming_not_setup",
34353
34372
  "command_expired"
34354
34373
  ],
34355
- "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"
34374
+ "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_disabled**: Corporate billing is switched off for the partner or the driver's accepted invite - **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**: Legacy corporate-account refusal value retained for historical records; newly detected disabled billing uses corporate_billing_disabled - **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"
34356
34375
  },
34357
34376
  "createdAfter": {
34358
34377
  "type": "string",
@@ -35953,9 +35972,6 @@
35953
35972
  "title": {
35954
35973
  "type": "string"
35955
35974
  },
35956
- "partnerId": {
35957
- "type": "integer"
35958
- },
35959
35975
  "contractType": {
35960
35976
  "type": "string",
35961
35977
  "enum": [
@@ -36017,9 +36033,19 @@
36017
36033
  }
36018
36034
  }
36019
36035
  },
36036
+ "partnerId": {
36037
+ "type": "integer"
36038
+ },
36020
36039
  "revenueSharing": {
36021
36040
  "type": "object",
36022
36041
  "properties": {
36042
+ "partnerSharePercentagePrivateEvseAccessFees": {
36043
+ "type": "number",
36044
+ "format": "float",
36045
+ "minimum": 0,
36046
+ "maximum": 100,
36047
+ "description": "The partner's share of the revenue from private EVSE access fees from other partners given access to this partner's commercial private charge points. Omit the property to leave the share unconfigured."
36048
+ },
36023
36049
  "partnerSharePercentageAcEvse": {
36024
36050
  "type": "number",
36025
36051
  "format": "float",
@@ -36083,6 +36109,12 @@
36083
36109
  "monthlyPlatformFees": {
36084
36110
  "type": "object",
36085
36111
  "properties": {
36112
+ "perPrivateEvseOfOtherPartners": {
36113
+ "type": "number",
36114
+ "format": "float",
36115
+ "minimum": 0,
36116
+ "description": "Fee per EVSE, without tax, of commercial private charge points of other partners to which this partner is given access. Omit the property to leave the fee unconfigured."
36117
+ },
36086
36118
  "perChargePoint": {
36087
36119
  "type": "number",
36088
36120
  "format": "float",
@@ -36208,9 +36240,6 @@
36208
36240
  "title": {
36209
36241
  "type": "string"
36210
36242
  },
36211
- "partnerId": {
36212
- "type": "integer"
36213
- },
36214
36243
  "contractType": {
36215
36244
  "type": "string",
36216
36245
  "enum": [
@@ -36272,9 +36301,19 @@
36272
36301
  }
36273
36302
  }
36274
36303
  },
36304
+ "partnerId": {
36305
+ "type": "integer"
36306
+ },
36275
36307
  "revenueSharing": {
36276
36308
  "type": "object",
36277
36309
  "properties": {
36310
+ "partnerSharePercentagePrivateEvseAccessFees": {
36311
+ "type": "number",
36312
+ "format": "float",
36313
+ "minimum": 0,
36314
+ "maximum": 100,
36315
+ "description": "The partner's share of the revenue from private EVSE access fees from other partners given access to this partner's commercial private charge points. Omit the property to leave the share unconfigured."
36316
+ },
36278
36317
  "partnerSharePercentageAcEvse": {
36279
36318
  "type": "number",
36280
36319
  "format": "float",
@@ -36338,6 +36377,12 @@
36338
36377
  "monthlyPlatformFees": {
36339
36378
  "type": "object",
36340
36379
  "properties": {
36380
+ "perPrivateEvseOfOtherPartners": {
36381
+ "type": "number",
36382
+ "format": "float",
36383
+ "minimum": 0,
36384
+ "description": "Fee per EVSE, without tax, of commercial private charge points of other partners to which this partner is given access. Omit the property to leave the fee unconfigured."
36385
+ },
36341
36386
  "perChargePoint": {
36342
36387
  "type": "number",
36343
36388
  "format": "float",
@@ -36507,6 +36552,13 @@
36507
36552
  "revenueSharing": {
36508
36553
  "type": "object",
36509
36554
  "properties": {
36555
+ "partnerSharePercentagePrivateEvseAccessFees": {
36556
+ "type": "number",
36557
+ "format": "float",
36558
+ "minimum": 0,
36559
+ "maximum": 100,
36560
+ "description": "The partner's share of the revenue from private EVSE access fees from other partners given access to this partner's commercial private charge points. Omit the property to leave the share unconfigured."
36561
+ },
36510
36562
  "partnerSharePercentageAcEvse": {
36511
36563
  "type": "number",
36512
36564
  "format": "float",
@@ -36570,6 +36622,12 @@
36570
36622
  "monthlyPlatformFees": {
36571
36623
  "type": "object",
36572
36624
  "properties": {
36625
+ "perPrivateEvseOfOtherPartners": {
36626
+ "type": "number",
36627
+ "format": "float",
36628
+ "minimum": 0,
36629
+ "description": "Fee per EVSE, without tax, of commercial private charge points of other partners to which this partner is given access. Omit the property to leave the fee unconfigured."
36630
+ },
36573
36631
  "perChargePoint": {
36574
36632
  "type": "number",
36575
36633
  "format": "float",
@@ -41067,7 +41125,8 @@
41067
41125
  "method": "GET",
41068
41126
  "operationId": "partnerSettlementReportsListing",
41069
41127
  "summary": "Partner Settlement Reports / Listing",
41070
- "description": "Get all Partner Settlement Reports",
41128
+ "description": "**This endpoint is deprecated. Use the v1.1 equivalent instead.** Get all Partner Settlement Reports",
41129
+ "deprecated": true,
41071
41130
  "tags": [
41072
41131
  "resource / partner settlement reports"
41073
41132
  ],
@@ -41141,7 +41200,8 @@
41141
41200
  "method": "GET",
41142
41201
  "operationId": "partnerSettlementReportRead",
41143
41202
  "summary": "Partner Settlement Report / Read",
41144
- "description": "Get a single Partner Settlement Report",
41203
+ "description": "**This endpoint is deprecated. Use the v1.1 equivalent instead.** Get a single Partner Settlement Report",
41204
+ "deprecated": true,
41145
41205
  "tags": [
41146
41206
  "resource / partner settlement reports"
41147
41207
  ],
@@ -41176,7 +41236,8 @@
41176
41236
  "method": "GET",
41177
41237
  "operationId": "partnerSettlementReportPartnerSettlementRecordsListing",
41178
41238
  "summary": "Partner Settlement Report / Partner Settlement Records / Listing",
41179
- "description": "Get all Partner Settlement Records",
41239
+ "description": "**This endpoint is deprecated. Use the v1.1 equivalent instead.** Get all Partner Settlement Records",
41240
+ "deprecated": true,
41180
41241
  "tags": [
41181
41242
  "resource / partner settlement reports"
41182
41243
  ],
@@ -41224,7 +41285,8 @@
41224
41285
  "method": "POST",
41225
41286
  "operationId": "partnerSettlementReportPartnerSettlementRecordCreate",
41226
41287
  "summary": "Partner Settlement Report / Partner Settlement Record / Create",
41227
- "description": "Create Partner Settlement Record. A `409` with `errorCode` `payment_tracking_managed_via_partner_invoice` is returned once the settlement report has at least one partner invoice. From that point payments for the report are tracked by registering them on its partner invoices — use `POST actions/partner-invoice/v1.0/{partnerInvoice}/register-payment` instead. Listing and reading records stay available as read-only history.",
41288
+ "description": "**This endpoint is deprecated. Use the v1.1 equivalent instead.** Create Partner Settlement Record. A `409` with `errorCode` `payment_tracking_managed_via_partner_invoice` is returned once the settlement report has at least one partner invoice. From that point payments for the report are tracked by registering them on its partner invoices — use `POST actions/partner-invoice/v1.0/{partnerInvoice}/register-payment` instead. Listing and reading records stay available as read-only history.",
41289
+ "deprecated": true,
41228
41290
  "tags": [
41229
41291
  "resource / partner settlement reports"
41230
41292
  ],
@@ -41295,7 +41357,8 @@
41295
41357
  "method": "GET",
41296
41358
  "operationId": "partnertSettlementReportPartnerSettlementRecordRead",
41297
41359
  "summary": "Partner Settlement Report / Partner Settlement Record / Read",
41298
- "description": "Read Partner Settlement Record",
41360
+ "description": "**This endpoint is deprecated. Use the v1.1 equivalent instead.** Read Partner Settlement Record",
41361
+ "deprecated": true,
41299
41362
  "tags": [
41300
41363
  "resource / partner settlement reports"
41301
41364
  ],
@@ -41334,7 +41397,8 @@
41334
41397
  "method": "PUT",
41335
41398
  "operationId": "partnerSettlementReportPartnerSettlementRecordUpdate",
41336
41399
  "summary": "Partner Settlement Report / Partner Settlement Record / Update",
41337
- "description": "Update a single Partner Settlement Record. A `409` with `errorCode` `payment_tracking_managed_via_partner_invoice` is returned once the settlement report has at least one partner invoice. Records linked to an invoice are immutable history — correct a wrong entry by registering a reversing payment with a negative `paidAmount` through `POST actions/partner-invoice/v1.0/{partnerInvoice}/register-payment`.",
41400
+ "description": "**This endpoint is deprecated. Use the v1.1 equivalent instead.** Update a single Partner Settlement Record. A `409` with `errorCode` `payment_tracking_managed_via_partner_invoice` is returned once the settlement report has at least one partner invoice. Records linked to an invoice are immutable history — correct a wrong entry by registering a reversing payment with a negative `paidAmount` through `POST actions/partner-invoice/v1.0/{partnerInvoice}/register-payment`.",
41401
+ "deprecated": true,
41338
41402
  "tags": [
41339
41403
  "resource / partner settlement reports"
41340
41404
  ],
@@ -41409,7 +41473,8 @@
41409
41473
  "method": "DELETE",
41410
41474
  "operationId": "partnerSettlementReportPartnerSettlementRecordDelete",
41411
41475
  "summary": "Partner Settlement Report / Partner Settlement Record / Delete",
41412
- "description": "Delete a single Partner Settlement Record. A `409` with `errorCode` `payment_tracking_managed_via_partner_invoice` is returned once the settlement report has at least one partner invoice. Deleting would silently move the invoice's computed `amountPaid`, so corrections are made by registering a reversing payment with a negative `paidAmount` through `POST actions/partner-invoice/v1.0/{partnerInvoice}/register-payment` instead.",
41476
+ "description": "**This endpoint is deprecated. Use the v1.1 equivalent instead.** Delete a single Partner Settlement Record. A `409` with `errorCode` `payment_tracking_managed_via_partner_invoice` is returned once the settlement report has at least one partner invoice. Deleting would silently move the invoice's computed `amountPaid`, so corrections are made by registering a reversing payment with a negative `paidAmount` through `POST actions/partner-invoice/v1.0/{partnerInvoice}/register-payment` instead.",
41477
+ "deprecated": true,
41413
41478
  "tags": [
41414
41479
  "resource / partner settlement reports"
41415
41480
  ],
@@ -41449,6 +41514,390 @@
41449
41514
  }
41450
41515
  }
41451
41516
  },
41517
+ {
41518
+ "path": "/public-api/resources/partner-settlement-reports/v1.1",
41519
+ "method": "GET",
41520
+ "operationId": "partnerSettlementReportsListingV1_1",
41521
+ "summary": "Partner Settlement Reports / Listing",
41522
+ "description": "Get all Partner Settlement Reports",
41523
+ "tags": [
41524
+ "resource / partner settlement reports"
41525
+ ],
41526
+ "parameters": {
41527
+ "query": {
41528
+ "filter": {
41529
+ "schema": {
41530
+ "type": "object",
41531
+ "properties": {
41532
+ "partnerId": {
41533
+ "type": "integer"
41534
+ },
41535
+ "periodAfter": {
41536
+ "type": "string",
41537
+ "format": "date"
41538
+ },
41539
+ "periodBefore": {
41540
+ "type": "string",
41541
+ "format": "date"
41542
+ },
41543
+ "customFields": {
41544
+ "type": "string",
41545
+ "example": "filter[customFields.invoiceReference]=INV-42",
41546
+ "description": "Filter a custom-field host resource by custom fields defined for that resource. Add one literal `customFields.<identifier>` key to the existing `filter` object for each criterion. The identifier suffix is administrator-defined and is never enumerated in this schema or generated per tenant. Use a scalar for boolean, text, email, and URL fields. Boolean accepts booleans and integer `1` or `0`, as well as the strings `\"true\"`, `\"false\"`, `\"1\"`, and `\"0\"`. Text, email, and URL accept strings and use contains matching that is case- and accent-insensitive; backslashes, `%`, and `_` are treated literally rather than as pattern syntax. Use `from`, `to`, or both below the dotted key for number, date, and date-time fields. Both bounds are inclusive. Number bounds are decimal strings from `-99999999999999.999999` through `99999999999999.999999` with at most six decimal places; comparisons preserve submitted and stored decimal precision without rounding. Date bounds use `YYYY-MM-DD` and compare calendar dates without time-zone conversion. Date-time bounds use ISO 8601; offsets are normalized to UTC, and an omitted offset is interpreted as UTC. Multiple identifiers combine with AND. Empty scalar criteria and ranges whose bounds are empty are ignored. An identifier resolves only to its current active definition, so values belonging to a deleted definition never match if its identifier is reused. Operator-scoped filters match only host records whose current operator owner is assigned to the field; retained inapplicable values are excluded before pagination. Criteria the request cannot use return `400` and name the rejected keys, and no criterion in the request is applied. This covers unknown, inaccessible, disabled, and deleted identifiers, and fields whose filtering is disabled or whose type does not support filtering. For a usable field, malformed objects or values, a criterion shape that is invalid for the field type, and a range whose `from` bound is greater than its `to` bound return `422`. Custom-field filters apply only to resource listings. They do not participate in search and do not depend on an `include` parameter; any unrelated includes are defined by the host resource. Examples: `filter[customFields.invoiceReference]=INV-42` and `filter[customFields.capacity][from]=10&filter[customFields.capacity][to]=20`. URL-encode the query keys and values when sending the request."
41547
+ },
41548
+ "externalId": {
41549
+ "type": "string"
41550
+ }
41551
+ }
41552
+ }
41553
+ },
41554
+ "per_page": {
41555
+ "description": "The number of items to return per page.",
41556
+ "type": "integer",
41557
+ "minimum": 1,
41558
+ "maximum": 100,
41559
+ "default": 100
41560
+ },
41561
+ "cursor": {
41562
+ "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",
41563
+ "type": "string"
41564
+ }
41565
+ }
41566
+ },
41567
+ "responses": {
41568
+ "200": {
41569
+ "description": "Success"
41570
+ },
41571
+ "401": {
41572
+ "description": "Access token is missing or invalid"
41573
+ },
41574
+ "403": {
41575
+ "description": "You do not have permission to perform the action"
41576
+ },
41577
+ "404": {
41578
+ "description": "The record is not found"
41579
+ },
41580
+ "422": {
41581
+ "description": "The payload you provided is invalid"
41582
+ },
41583
+ "429": {
41584
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
41585
+ }
41586
+ }
41587
+ },
41588
+ {
41589
+ "path": "/public-api/resources/partner-settlement-reports/v1.1/{partnerSettlementReport}",
41590
+ "method": "GET",
41591
+ "operationId": "partnerSettlementReportReadV1_1",
41592
+ "summary": "Partner Settlement Report / Read",
41593
+ "description": "Get a single Partner Settlement Report",
41594
+ "tags": [
41595
+ "resource / partner settlement reports"
41596
+ ],
41597
+ "parameters": {
41598
+ "path": {
41599
+ "partnerSettlementReport": {
41600
+ "type": "integer",
41601
+ "required": true
41602
+ }
41603
+ }
41604
+ },
41605
+ "responses": {
41606
+ "200": {
41607
+ "description": "Success"
41608
+ },
41609
+ "401": {
41610
+ "description": "Access token is missing or invalid"
41611
+ },
41612
+ "403": {
41613
+ "description": "You do not have permission to perform the action"
41614
+ },
41615
+ "404": {
41616
+ "description": "The record is not found"
41617
+ },
41618
+ "429": {
41619
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
41620
+ }
41621
+ }
41622
+ },
41623
+ {
41624
+ "path": "/public-api/resources/partner-settlement-reports/v1.1/{partnerSettlementReport}/records",
41625
+ "method": "GET",
41626
+ "operationId": "partnerSettlementReportPartnerSettlementRecordsListingV1_1",
41627
+ "summary": "Partner Settlement Report / Partner Settlement Records / Listing",
41628
+ "description": "Get all Partner Settlement Records",
41629
+ "tags": [
41630
+ "resource / partner settlement reports"
41631
+ ],
41632
+ "parameters": {
41633
+ "path": {
41634
+ "partnerSettlementReport": {
41635
+ "type": "integer",
41636
+ "required": true
41637
+ }
41638
+ },
41639
+ "query": {
41640
+ "per_page": {
41641
+ "description": "The number of items to return per page.",
41642
+ "type": "integer",
41643
+ "minimum": 1,
41644
+ "maximum": 100,
41645
+ "default": 100
41646
+ },
41647
+ "cursor": {
41648
+ "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",
41649
+ "type": "string"
41650
+ }
41651
+ }
41652
+ },
41653
+ "responses": {
41654
+ "200": {
41655
+ "description": "Success"
41656
+ },
41657
+ "401": {
41658
+ "description": "Access token is missing or invalid"
41659
+ },
41660
+ "403": {
41661
+ "description": "You do not have permission to perform the action"
41662
+ },
41663
+ "404": {
41664
+ "description": "The record is not found"
41665
+ },
41666
+ "429": {
41667
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
41668
+ }
41669
+ }
41670
+ },
41671
+ {
41672
+ "path": "/public-api/resources/partner-settlement-reports/v1.1/{partnerSettlementReport}/records",
41673
+ "method": "POST",
41674
+ "operationId": "partnerSettlementReportPartnerSettlementRecordCreateV1_1",
41675
+ "summary": "Partner Settlement Report / Partner Settlement Record / Create",
41676
+ "description": "Create Partner Settlement Record",
41677
+ "tags": [
41678
+ "resource / partner settlement reports"
41679
+ ],
41680
+ "parameters": {
41681
+ "path": {
41682
+ "partnerSettlementReport": {
41683
+ "type": "integer",
41684
+ "required": true
41685
+ }
41686
+ }
41687
+ },
41688
+ "requestBody": {
41689
+ "required": true,
41690
+ "content": {
41691
+ "application/json": {
41692
+ "schema": {
41693
+ "type": "object",
41694
+ "properties": {
41695
+ "date": {
41696
+ "type": "string",
41697
+ "format": "date",
41698
+ "description": "Date the payment was made."
41699
+ },
41700
+ "paidAmount": {
41701
+ "type": "number",
41702
+ "description": "Amount recorded as paid, in the settlement report's currency. Negative values record a reversing entry."
41703
+ },
41704
+ "note": {
41705
+ "type": "string",
41706
+ "description": "Free-text note on the settlement record."
41707
+ }
41708
+ },
41709
+ "required": [
41710
+ "date",
41711
+ "paidAmount",
41712
+ "note"
41713
+ ]
41714
+ }
41715
+ }
41716
+ }
41717
+ },
41718
+ "responses": {
41719
+ "201": {
41720
+ "description": "Success"
41721
+ },
41722
+ "401": {
41723
+ "description": "Access token is missing or invalid"
41724
+ },
41725
+ "403": {
41726
+ "description": "You do not have permission to perform the action"
41727
+ },
41728
+ "404": {
41729
+ "description": "The record is not found"
41730
+ },
41731
+ "409": {
41732
+ "description": "The settlement record could not be written because the settlement report has at least one partner invoice. Payments for such a report are tracked by registering them on its partner invoices."
41733
+ },
41734
+ "422": {
41735
+ "description": "The payload you provided is invalid"
41736
+ },
41737
+ "429": {
41738
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
41739
+ }
41740
+ }
41741
+ },
41742
+ {
41743
+ "path": "/public-api/resources/partner-settlement-reports/v1.1/{partnerSettlementReport}/records/{partnerSettlementRecord}",
41744
+ "method": "GET",
41745
+ "operationId": "partnerSettlementReportPartnerSettlementRecordReadV1_1",
41746
+ "summary": "Partner Settlement Report / Partner Settlement Record / Read",
41747
+ "description": "Read Partner Settlement Record",
41748
+ "tags": [
41749
+ "resource / partner settlement reports"
41750
+ ],
41751
+ "parameters": {
41752
+ "path": {
41753
+ "partnerSettlementReport": {
41754
+ "type": "integer",
41755
+ "required": true
41756
+ },
41757
+ "partnerSettlementRecord": {
41758
+ "type": "integer",
41759
+ "required": true
41760
+ }
41761
+ }
41762
+ },
41763
+ "responses": {
41764
+ "200": {
41765
+ "description": "Success"
41766
+ },
41767
+ "401": {
41768
+ "description": "Access token is missing or invalid"
41769
+ },
41770
+ "403": {
41771
+ "description": "You do not have permission to perform the action"
41772
+ },
41773
+ "404": {
41774
+ "description": "The record is not found"
41775
+ },
41776
+ "429": {
41777
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
41778
+ }
41779
+ }
41780
+ },
41781
+ {
41782
+ "path": "/public-api/resources/partner-settlement-reports/v1.1/{partnerSettlementReport}/records/{partnerSettlementRecord}",
41783
+ "method": "PUT",
41784
+ "operationId": "partnerSettlementReportPartnerSettlementRecordUpdateV1_1",
41785
+ "summary": "Partner Settlement Report / Partner Settlement Record / Update",
41786
+ "description": "Update a single Partner Settlement Record",
41787
+ "tags": [
41788
+ "resource / partner settlement reports"
41789
+ ],
41790
+ "parameters": {
41791
+ "path": {
41792
+ "partnerSettlementReport": {
41793
+ "type": "integer",
41794
+ "required": true
41795
+ },
41796
+ "partnerSettlementRecord": {
41797
+ "type": "integer",
41798
+ "required": true
41799
+ }
41800
+ }
41801
+ },
41802
+ "requestBody": {
41803
+ "required": true,
41804
+ "content": {
41805
+ "application/json": {
41806
+ "schema": {
41807
+ "type": "object",
41808
+ "properties": {
41809
+ "date": {
41810
+ "type": "string",
41811
+ "format": "date",
41812
+ "description": "Date the payment was made."
41813
+ },
41814
+ "paidAmount": {
41815
+ "type": "number",
41816
+ "description": "Amount recorded as paid, in the settlement report's currency. Negative values record a reversing entry."
41817
+ },
41818
+ "note": {
41819
+ "type": "string",
41820
+ "description": "Free-text note on the settlement record."
41821
+ }
41822
+ },
41823
+ "required": [
41824
+ "date",
41825
+ "paidAmount",
41826
+ "note"
41827
+ ]
41828
+ }
41829
+ }
41830
+ }
41831
+ },
41832
+ "responses": {
41833
+ "200": {
41834
+ "description": "Success"
41835
+ },
41836
+ "401": {
41837
+ "description": "Access token is missing or invalid"
41838
+ },
41839
+ "403": {
41840
+ "description": "You do not have permission to perform the action"
41841
+ },
41842
+ "404": {
41843
+ "description": "The record is not found"
41844
+ },
41845
+ "409": {
41846
+ "description": "The settlement record could not be written because the settlement report has at least one partner invoice. Payments for such a report are tracked by registering them on its partner invoices."
41847
+ },
41848
+ "422": {
41849
+ "description": "The payload you provided is invalid"
41850
+ },
41851
+ "429": {
41852
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
41853
+ }
41854
+ }
41855
+ },
41856
+ {
41857
+ "path": "/public-api/resources/partner-settlement-reports/v1.1/{partnerSettlementReport}/records/{partnerSettlementRecord}",
41858
+ "method": "DELETE",
41859
+ "operationId": "partnerSettlementReportPartnerSettlementRecordDeleteV1_1",
41860
+ "summary": "Partner Settlement Report / Partner Settlement Record / Delete",
41861
+ "description": "Delete a single Partner Settlement Record",
41862
+ "tags": [
41863
+ "resource / partner settlement reports"
41864
+ ],
41865
+ "parameters": {
41866
+ "path": {
41867
+ "partnerSettlementReport": {
41868
+ "type": "integer",
41869
+ "required": true
41870
+ },
41871
+ "partnerSettlementRecord": {
41872
+ "type": "integer",
41873
+ "required": true
41874
+ }
41875
+ }
41876
+ },
41877
+ "responses": {
41878
+ "204": {
41879
+ "description": "Success"
41880
+ },
41881
+ "401": {
41882
+ "description": "Access token is missing or invalid"
41883
+ },
41884
+ "403": {
41885
+ "description": "You do not have permission to perform the action"
41886
+ },
41887
+ "404": {
41888
+ "description": "The record is not found"
41889
+ },
41890
+ "409": {
41891
+ "description": "The settlement record could not be written because the settlement report has at least one partner invoice. Payments for such a report are tracked by registering them on its partner invoices."
41892
+ },
41893
+ "422": {
41894
+ "description": "The payload you provided is invalid"
41895
+ },
41896
+ "429": {
41897
+ "description": "Too many requests. Please try again later. For more information, please check the rate limit headers X-RateLimit-*"
41898
+ }
41899
+ }
41900
+ },
41452
41901
  {
41453
41902
  "path": "/public-api/resources/partners/v1.0",
41454
41903
  "method": "GET",
@@ -54800,7 +55249,7 @@
54800
55249
  "default": false
54801
55250
  },
54802
55251
  "include": {
54803
- "description": "Include additional information in the response. The following options are available:<br> - `externalAppData`: Include external application data in the response<br> - `chargingProfile`: Include the TX charging profile applied to the session in the response<br> - `vehicle`: Include the nested `vehicle` object describing the vehicle associated with the session<br> - `timelineSnapshot`: Include the pre-computed timeline snapshot for a finished session when available",
55252
+ "description": "Include additional information in the response. The following options are available:<br> - `externalAppData`: Include external application data in the response<br> - `chargingProfile`: Include the TX charging profile applied to the session in the response<br> - `vehicle`: Include the nested `vehicle` object describing the vehicle associated with the session<br> - `timelineSnapshot`: Include the pre-computed timeline snapshot for a finished session when available<br> - `reimbursementRecords`: Include the reimbursement records of the session, when the caller may view reimbursement records",
54804
55253
  "schema": {
54805
55254
  "type": "array",
54806
55255
  "items": {
@@ -54809,7 +55258,8 @@
54809
55258
  "externalAppData",
54810
55259
  "chargingProfile",
54811
55260
  "vehicle",
54812
- "timelineSnapshot"
55261
+ "timelineSnapshot",
55262
+ "reimbursementRecords"
54813
55263
  ]
54814
55264
  }
54815
55265
  }
@@ -74884,7 +75334,7 @@
74884
75334
  ],
74885
75335
  "info": {
74886
75336
  "title": "Public API",
74887
- "version": "3.258.1",
75337
+ "version": "3.259.0",
74888
75338
  "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"
74889
75339
  },
74890
75340
  "servers": [
@@ -74898,18 +75348,18 @@
74898
75348
  }
74899
75349
  }
74900
75350
  ],
74901
- "buildTimestamp": "2026-10-06T10:24:39.658Z",
75351
+ "buildTimestamp": "2026-10-06T10:47:25.976Z",
74902
75352
  "stats": {
74903
- "totalEndpoints": 679,
74904
- "originalSize": 6525064,
74905
- "optimizedSize": 1829203,
74906
- "reductionPercent": 71.97,
74907
- "buildDuration": 1695,
75353
+ "totalEndpoints": 686,
75354
+ "originalSize": 6612313,
75355
+ "optimizedSize": 1849798,
75356
+ "reductionPercent": 72.02,
75357
+ "buildDuration": 1462,
74908
75358
  "responseSchemas": {
74909
- "total": 679,
74910
- "withSchemas": 679,
74911
- "totalSchemaSize": 3739771,
74912
- "averageSchemaSize": 5508
75359
+ "total": 686,
75360
+ "withSchemas": 686,
75361
+ "totalSchemaSize": 3802765,
75362
+ "averageSchemaSize": 5543
74913
75363
  }
74914
75364
  }
74915
75365
  }