import { z } from "zod"; // Auto-generated Zod schemas from OpenAPI specification // Do not edit manually - regenerate with build script // POST /public-api/actions/charge-point/v1.0/{chargePoint}/change-availability export const chargePointChangeAvailabilityBody = z.object({ evseNetworkId: z.number().int().optional(), type: z.enum(["Inoperative", "Operative"]) }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/change-owner export const chargePointChangeOwnerBody = z.object({ userId: z.number().int().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/check-tariff-display-support export const chargePointCheckTariffDisplaySupportBody = z.object({ enableIfSupported: z.boolean().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/clear-cache export const chargePointClearCacheBody = z.object({ reason: z.string().max(255) }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/clear-charging-profile export const chargePointClearChargingProfileBody = z.object({ id: z.number().optional(), evseNetworkId: z.string().optional(), chargingProfilePurpose: z.string().optional(), stackLevel: z.number().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/disconnect export const chargePointDisconnectBody = z.object({ reason: z.string().max(255) }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/get-composite-schedule export const chargePointGetCompositeScheduleBody = z.object({ evseNetworkId: z.number().int().optional(), duration: z.number().int() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/get-diagnostics export const chargePointGetDiagnosticsBody = z.object({ location: z.string().optional(), start: z.string().datetime().optional(), stop: z.string().datetime().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/get-local-list-version // POST /public-api/actions/charge-point/v1.0/{chargePoint}/get-security-log export const chargePointGetSecurityLogBody = z.object({ url: z.string().url(), reason: z.string(), retries: z.number().int().min(0).max(10).optional(), interval: z.number().int().min(0).max(3600).optional(), startTime: z.string().optional(), stopTime: z.string().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/move-evses-to-satellite export const chargePointMoveEvsesToSatelliteBody = z.object({ satelliteChargePointId: z.number().int(), evseIds: z.array(z.number().int()) }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/reserve/{evse} export const chargePointReserveBody = z.object({ userId: z.number().int(), reason: z.string().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/reset-security-profile // POST /public-api/actions/charge-point/v1.0/{chargePoint}/reset/{type} // POST /public-api/actions/charge-point/v1.0/{chargePoint}/send-custom-ocpp export const chargePointSendCustomOcppBody = z.object({ command: z.string(), payload: z.record(z.unknown()).optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/send-data-transfer export const chargePointSendDataTransferBody = z.object({ vendorId: z.string(), messageId: z.string().optional(), data: z.string().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/set-charging-profile/{evseNetworkId} export const chargePointSetChargingProfileBody = z.object({ transactionId: z.number().int().optional(), stackLevel: z.number().int(), chargingProfilePurpose: z.enum(["ChargePointMaxProfile", "TxDefaultProfile", "TxProfile"]), chargingProfileKind: z.enum(["Absolute", "Recurring", "Relative"]), recurrencyKind: z.enum(["Daily", "Weekly"]).optional(), validFrom: z.string().datetime().optional(), validTo: z.string().datetime().optional(), chargingSchedule: z.object({ id: z.number().optional(), duration: z.number().int().optional(), startSchedule: z.string().datetime().optional(), chargingRateUnit: z.enum(["A", "W"]), chargingSchedulePeriod: z.array(z.object({ startPeriod: z.number().int(), limit: z.number(), numberPhases: z.number().int().optional() })), minChargingRate: z.number().optional() }) }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/start export const chargePointStartChargingSessionWithoutEvseBody = z.object({ userId: z.number().int().optional(), paymentMethodId: z.string().optional(), externalSessionId: z.string().optional(), idTag: z.string().optional(), connectorId: z.number().int().optional(), bookingId: z.number().int().optional(), stopConditions: z.object({ maxEnergyKwh: z.number().min(0.1).optional(), maxDurationMinutes: z.number().int().min(1).optional(), maxSocPercent: z.number().int().min(1).max(100).optional(), maxAmount: z.number().min(0.01).optional() }).optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/start/{evse} export const chargePointStartChargingSessionBody = z.object({ userId: z.number().int().optional(), paymentMethodId: z.string().optional(), externalSessionId: z.string().optional(), idTag: z.string().optional(), connectorId: z.number().int().optional(), bookingId: z.number().int().optional(), stopConditions: z.object({ maxEnergyKwh: z.number().min(0.1).optional(), maxDurationMinutes: z.number().int().min(1).optional(), maxSocPercent: z.number().int().min(1).max(100).optional(), maxAmount: z.number().min(0.01).optional() }).optional(), chargingProfile: z.object({ transactionId: z.number().int().optional(), stackLevel: z.number().int(), chargingProfilePurpose: z.enum(["ChargePointMaxProfile", "TxDefaultProfile", "TxProfile"]), chargingProfileKind: z.enum(["Absolute", "Recurring", "Relative"]), recurrencyKind: z.enum(["Daily", "Weekly"]).optional(), validFrom: z.string().datetime().optional(), validTo: z.string().datetime().optional(), chargingSchedule: z.object({ id: z.number().optional(), duration: z.number().int().optional(), startSchedule: z.string().datetime().optional(), chargingRateUnit: z.enum(["A", "W"]), chargingSchedulePeriod: z.array(z.object({ startPeriod: z.number().int(), limit: z.number(), numberPhases: z.number().int().optional() })), minChargingRate: z.number().optional() }) }).optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/stop/{session} export const chargePointStopChargingSessionBody = z.object({ force: z.boolean().optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/sync-configuration export const chargePointSyncConfigurationBody = z.object({ keys: z.array(z.union([z.enum(["AllowOfflineTxForUnknownId", "AuthorizationCacheEnabled", "AuthorizeRemoteTxRequests", "BlinkRepeat", "ClockAlignedDataInterval", "ConnectionTimeOut", "ConnectorPhaseRotation", "ConnectorPhaseRotationMaxLength", "GetConfigurationMaxKeys", "HeartbeatInterval", "LightIntensity", "LocalAuthorizeOffline", "LocalPreAuthorize", "MaxEnergyOnInvalidId", "MeterValuesAlignedData", "MeterValuesAlignedDataMaxLength", "MeterValuesSampledData", "MeterValuesSampledDataMaxLength", "MeterValueSampleInterval", "MinimumStatusDuration", "NumberOfConnectors", "ResetRetries", "StopTransactionOnEVSideDisconnect", "StopTransactionOnInvalidId", "StopTxnAlignedData", "StopTxnAlignedDataMaxLength", "StopTxnSampledData", "StopTxnSampledDataMaxLength", "SupportedFeatureProfiles", "SupportedFeatureProfilesMaxLength", "TransactionMessageAttempts", "TransactionMessageRetryInterval", "UnlockConnectorOnEVSideDisconnect", "WebSocketPingInterval", "LocalAuthListEnabled", "LocalAuthListMaxLength", "SendLocalListMaxLength", "ReserveConnectorZeroSupported", "ChargeProfileMaxStackLevel", "ChargingScheduleAllowedChargingRateUnit", "ChargingScheduleMaxPeriods", "ConnectorSwitch3to1PhaseSupported", "MaxChargingProfilesInstalled", "AuthorizationEnabled"]), z.string()])).optional(), reportBase: z.enum(["full_inventory", "configuration_inventory", "summary_inventory"]).optional() }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/trigger-message export const chargePointTriggerMessageChargePointBody = z.object({ type: z.enum(["BootNotification", "DiagnosticsStatusNotification", "LogStatusNotification", "FirmwareStatusNotification", "PublishFirmwareStatusNotification", "Heartbeat", "MeterValues", "StatusNotification", "SignV2GCertificate", "SignChargingStationCertificate", "SignCombinedCertificate", "TransactionEvent"]) }); // POST /public-api/actions/charge-point/v1.0/{chargePoint}/unlock/{evse} // POST /public-api/actions/charge-point/v2.0/{chargePoint}/change-sharing-code export const chargePointChangeSharingCodeBody = z.object({ sharingCode: z.string().optional() }); // POST /public-api/actions/charge-point/v2.0/{chargePoint}/delete-certificate export const chargePointDeleteCertificateBody = z.object({ certificateType: z.enum(["ChargingStationCertificate", "V2GCertificate", "V2GRootCertificate", "MORootCertificate", "CSMSRootCertificate", "ManufacturerRootCertificate", "V2GCertificateChain"]) }); // POST /public-api/actions/charge-point/v2.0/{chargePoint}/install-certificate export const chargePointInstallCertificateBody = z.object({ certificateType: z.enum(["V2GRootCertificate", "MORootCertificate", "CSMSRootCertificate", "ManufacturerRootCertificate", "CentralSystemRootCertificate"]) }); // POST /public-api/actions/charge-point/v2.0/{chargePoint}/set-configuration export const chargePointSetConfigurationBody = z.object({ value: z.string(), name: z.string(), instance: z.string().optional(), componentName: z.string().optional(), evseId: z.number().int().optional() }); // POST /public-api/actions/charge-point/v2.0/{chargePoint}/set-security-profile export const chargePointSetSecurityProfileBody = z.object({ setSecurityProfile: z.union([z.literal(1), z.literal(2)]), reason: z.string().max(500) }); // POST /public-api/actions/charge-point/v2.0/{chargePoint}/sync-certificates export const chargePointGetInstalledCertificateIdsBody = z.object({ certificateType: z.enum(["V2GRootCertificate", "MORootCertificate", "CSMSRootCertificate", "V2GCertificateChain", "ManufacturerRootCertificate"]).optional() }); // POST /public-api/actions/charge-point/v2.0/{chargePoint}/update-firmware export const chargePointUpdateFirmwareBody = z.object({ url: z.string().optional(), firmwareVersionId: z.number().int().optional(), retrieveAfter: z.string().datetime().optional(), retries: z.number().int().min(0).max(10).optional(), interval: z.number().int().min(0).max(3600).optional(), signed: z.boolean(), signingCertificate: z.string().optional(), signature: z.string().optional(), downloadUrlProtocol: z.enum(["http", "https"]).optional() }); // POST /public-api/actions/circuit/v2.0/{circuit}/attach-charge-point export const circuitAttachChargePointBody = z.object({ chargePointId: z.number().int(), priority: z.number().min(0).optional() }); // POST /public-api/actions/circuit/v2.0/{circuit}/detach-charge-point/{chargePoint} // POST /public-api/actions/circuit/v2.0/{circuit}/set-charge-point-priority/{chargePoint} export const circuitSetChargePointPriorityBody = z.object({ priority: z.number().min(0) }); // POST /public-api/actions/circuit/v2.0/{circuit}/set-charge-point-priority/{chargePoint}/evse/{evse} export const circuitSetChargePointEvsePriorityBody = z.object({ priority: z.number().min(0) }); // POST /public-api/actions/circuit/v2.0/{circuit}/set-circuit-soc-priorities export const circuitSetCircuitSocPriorityBody = z.object({ upperThresholdPercent: z.number().min(5).max(95).optional(), highSoCPriority: z.number().min(0).optional(), lowerThresholdPercent: z.number().min(5).max(95).optional(), lowSoCPriority: z.number().min(0).optional() }); // POST /public-api/actions/circuit/v2.0/{circuit}/set-session-boost/{session} export const circuitSetSessionBoostBody = z.object({ enabled: z.boolean() }); // POST /public-api/actions/circuit/v2.0/{circuit}/set-session-priority/{session} export const circuitSetSessionPriorityBody = z.object({ priority: z.number().min(0) }); // POST /public-api/actions/configuration-template/v1.0/{template}/apply-to-charge-points export const configurationTemplateApplyToChargePointsBody = z.object({ chargePointIds: z.array(z.number().int()).optional(), shouldPersist: z.boolean().optional(), resetType: z.enum(["none", "soft", "hard"]).optional() }); // POST /public-api/actions/configuration-template/v1.0/{template}/insert-bulk-variables export const configurationTemplateBulkCreateVariablesBody = z.array(z.union([z.object({ id: z.number().int().optional(), keyName: z.string(), value: z.string(), lastUpdatedAt: z.string().datetime().optional() }).strict(), z.object({ id: z.number().int().optional(), value: z.string(), variableName: z.string(), variableType: z.enum(["Actual", "Target", "MinSet", "MaxSet"]).optional(), variableInstance: z.string().optional(), component: z.string(), componentInstance: z.string().optional(), evseId: z.number().int().optional(), connectorId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }).strict()])); // POST /public-api/actions/electricity-meter/v1.0/{electricityMeter}/report-consumption export const electricityMeterReportConsumptionBody = z.object({ timestamp: z.string().datetime().optional(), currentL1: z.number().int().min(0).max(5000000).optional(), currentL2: z.number().int().min(0).max(5000000).optional(), currentL3: z.number().int().min(0).max(5000000).optional() }); // POST /public-api/actions/energy-coupon-template/v1.0/{energyCouponTemplate}/deactivate // POST /public-api/actions/energy-coupon/v1.0/redeem-code export const energyCouponRedeemCodeBody = z.object({ code: z.string(), userId: z.number().int() }); // POST /public-api/actions/energy-coupon/v1.0/{energyCoupon}/cancel export const energyCouponCancelBody = z.object({ reason: z.string().optional() }); // POST /public-api/actions/evse/v1.0/bulk-assign-tariff-group export const evseBulkAssignTariffGroupsBody = z.object({ filters: z.object({ locationIds: z.array(z.number().int()).optional(), partnerIds: z.array(z.number().int()).optional(), evseIds: z.array(z.number().int()).optional(), chargePointIds: z.array(z.number().int()).optional(), tariffGroupIds: z.array(z.number().int()).optional() }).optional(), tariffGroupId: z.number().int() }); // POST /public-api/actions/evse/v1.0/{evse}/start export const evseStartChargingWithEvseIdBody = z.object({ userId: z.number().int().optional(), paymentMethodId: z.string().optional(), externalSessionId: z.string().optional(), idTag: z.string().optional(), connectorId: z.number().int().optional(), bookingId: z.number().int().optional(), stopConditions: z.object({ maxEnergyKwh: z.number().min(0.1).optional(), maxDurationMinutes: z.number().int().min(1).optional(), maxSocPercent: z.number().int().min(1).max(100).optional(), maxAmount: z.number().min(0.01).optional() }).optional(), chargingProfile: z.object({ transactionId: z.number().int().optional(), stackLevel: z.number().int(), chargingProfilePurpose: z.enum(["ChargePointMaxProfile", "TxDefaultProfile", "TxProfile"]), chargingProfileKind: z.enum(["Absolute", "Recurring", "Relative"]), recurrencyKind: z.enum(["Daily", "Weekly"]).optional(), validFrom: z.string().datetime().optional(), validTo: z.string().datetime().optional(), chargingSchedule: z.object({ id: z.number().optional(), duration: z.number().int().optional(), startSchedule: z.string().datetime().optional(), chargingRateUnit: z.enum(["A", "W"]), chargingSchedulePeriod: z.array(z.object({ startPeriod: z.number().int(), limit: z.number(), numberPhases: z.number().int().optional() })), minChargingRate: z.number().optional() }) }).optional() }); // POST /public-api/actions/evse/v1.0/{evse}/trigger-message export const evseTriggerMessageBody = z.object({ type: z.enum(["BootNotification", "DiagnosticsStatusNotification", "LogStatusNotification", "FirmwareStatusNotification", "PublishFirmwareStatusNotification", "Heartbeat", "MeterValues", "StatusNotification", "SignV2GCertificate", "SignChargingStationCertificate", "SignCombinedCertificate", "TransactionEvent"]) }); // POST /public-api/actions/flexibility-asset/v1.0/{flexibilityAsset}/change-status export const changeFlexibilityAssetStatusBody = z.object({ status: z.enum(["enabled", "disabled"]), endsAt: z.string().datetime().optional() }); // POST /public-api/actions/flexibility-asset/v1.0/{flexibilityAsset}/create-activation-request export const flexibilityAssetCreateActivationRequestBody = z.object({ periods: z.array(z.object({ startTime: z.string().datetime(), endTime: z.string().datetime(), energy: z.number().int().optional(), maxPower: z.number().int().optional() })).optional() }); // POST /public-api/actions/id-tag/v1.0/{idTag}/reissue-emaid // POST /public-api/actions/installer-job/v1.0/{installerJob}/assign-charge-points export const assignInstallerJobChargePointsBody = z.object({ chargePointIds: z.array(z.number().int()).optional(), chargingZoneId: z.number().int().optional(), locationId: z.number().int().optional() }); // POST /public-api/actions/installer-job/v1.0/{installerJob}/change-status export const changeInstallerJobStatusBody = z.object({ status: z.enum(["new", "in_progress", "completed", "failed"]), outcomeDetails: z.string().optional() }); // POST /public-api/actions/invoice/v1.0/{invoice}/update-external-id export const invoiceUpdateExternalIdBody = z.object({ externalId: z.string().max(255) }).strict(); // POST /public-api/actions/locations/v2.0/{location}/check-booking-availability export const locationCheckBookingAvailabilityBody = z.object({ startAfter: z.string().datetime(), endBefore: z.string().datetime() }); // POST /public-api/actions/notifications/v1.0/{notification}/resend export const notificationsResendFailedBody = z.object({ notifications: z.array(z.enum(["AuthorizationNotification", "authorization.changed", "BootNotification", "ChargePointChangedNotification", "chargePoint.changed", "evse.changed", "ChargePointSyncConfigurationNotification", "CircuitConsumptionNotification", "circuit.changed", "DiagnosticsStatusNotification", "FirmwareStatusNotification", "HardwareStatusNotification", "LocationChangedNotification", "NetworkStatusNotification", "SecurityEventNotification", "SessionMeterValuesNotification", "SessionStartStopNotification", "session.start.stop.notification", "SessionUpdateNotification", "session.chargingPeriod.changed", "UserChangedNotification", "SubOperatorChangedNotification", "TariffChangedNotification", "tariffGroup.changed", "user.subscriptionChanged", "user.subscription.changed", "ReservationChangedNotification", "PaymentMethodChangedNotification", "PartnerInviteChangedNotification", "reservation.changed", "user.paymentMethod.changed", "userBalance.changed", "partnerInvite.changed", "partnerInviteCorporateBillingPolicy.changed", "roamingPlatform.changed", "parkingSpace.occupancyStatus.changed", "partner.changed", "transaction.changed", "settlementReport.created", "idTag.changed", "issue.changed", "chargePoint.dataTransferReceived", "subscriptionPlan.changed", "user.invoiceDetails.changed", "cdr.received", "chargingProfile.applied", "installerJob.changed", "corporateBilling.limitReached"])), startTime: z.string().optional(), endTime: z.string().optional() }); // POST /public-api/actions/parking-spaces/v1.0/{parkingSpace}/update-occupancy-status export const parkingSpaceUpdateOccupancyStatusBody = z.object({ status: z.enum(["available", "occupied", "blocked"]) }); // POST /public-api/actions/partner-invite-corporate-billing-policy/v1.0/{corporateBillingPolicy}/disable // POST /public-api/actions/partner-invite-corporate-billing-policy/v1.0/{corporateBillingPolicy}/enable // POST /public-api/actions/partner-invoice/v1.0/{partnerInvoice}/issue-credit-note // POST /public-api/actions/partner-invoice/v1.0/{partnerInvoice}/update-external-id export const partnerInvoiceUpdateExternalIdBody = z.object({ externalId: z.string().max(255) }); // POST /public-api/actions/partner-settlement-report/v1.0/{partnerSettlementReport}/issue-partner-invoice // POST /public-api/actions/partner-settlement-report/v1.0/{partnerSettlementReport}/set-custom-fields export const partnerSettlementReportSetCustomFieldsBody = z.object({ customFields: z.record(z.unknown()) }).strict(); // POST /public-api/actions/partner-settlement-report/v1.0/{partnerSettlementReport}/update-external-id export const partnerSettlementReportUpdateExternalIdBody = z.object({ externalId: z.string().max(255) }); // POST /public-api/actions/partner/v1.0/{partner}/set-custom-fields export const partnerSetCustomFieldsV1_0Body = z.object({ customFields: z.record(z.unknown()) }).strict(); // POST /public-api/actions/payment-terminal/v1.0/{paymentTerminal}/set-custom-fields export const paymentTerminalSetCustomFieldsBody = z.object({ customFields: z.record(z.unknown()) }).strict(); // POST /public-api/actions/provisioning-certificate/v1.0/{provisioningCertificate}/issue-emaid export const certificateIssueAnEmaidBody = z.object({ paymentMethod: z.string().optional(), defaultPaymentOption: z.string().optional() }); // POST /public-api/actions/reimbursement-record/v1.0/{reimbursementRecord}/issue-credit export const reimbursementRecordIssueCreditBody = z.object({ creditReason: z.string().min(1).max(500) }); // POST /public-api/actions/reimbursement-report/v1.0/{reimbursementReport}/regenerate // POST /public-api/actions/reservation/v1.0/{reservation}/cancel export const reservationCancelBody = z.object({ force: z.boolean().optional(), reason: z.string().optional() }); // POST /public-api/actions/roaming-emsp/v1.0/{roamingEmsp}/assign-partner export const roamingEmspAssignPartnerBody = z.object({ operatorId: z.number().int().optional(), partnerId: z.number().int() }); // POST /public-api/actions/roaming-operator/v2.0/{roamingOperator}/custom-tariff-filter/{customTariffFilter}/set-pricing-data export const updateCustomTariffFilterTariffBody = z.object({ country_code: z.string().min(2).max(2).optional(), party_id: z.string().min(3).max(3).optional(), id: z.string().max(36), currency: z.string().min(3).max(3), type: z.enum(["AD_HOC_PAYMENT", "PROFILE_CHEAP", "PROFILE_FAST", "PROFILE_GREEN", "REGULAR"]).optional(), tariff_alt_text: z.array(z.object({ language: z.string().min(2).max(2), text: z.string().max(512) })).optional(), tariff_alt_url: z.string().url().max(255).optional(), min_price: z.object({ excl_vat: z.number().min(0).optional(), incl_vat: z.number().min(0).optional() }).optional(), max_price: z.object({ excl_vat: z.number().min(0).optional(), incl_vat: z.number().min(0).optional() }).optional(), elements: z.array(z.object({ price_components: z.array(z.object({ type: z.enum(["ENERGY", "FLAT", "PARKING_TIME", "TIME"]), price: z.number().min(0), vat: z.number().min(0).max(100).optional(), step_size: z.number().int().min(1) })).min(1), restrictions: z.object({ start_time: z.string().regex(new RegExp("^([01]?[0-9]|2[0-3]):[0-5][0-9]$")).optional(), end_time: z.string().regex(new RegExp("^([01]?[0-9]|2[0-3]):[0-5][0-9]$")).optional(), start_date: z.string().optional(), end_date: z.string().optional(), min_kwh: z.number().min(0).optional(), max_kwh: z.number().min(0).optional(), min_current: z.number().min(0).optional(), max_current: z.number().min(0).optional(), min_power: z.number().min(0).optional(), max_power: z.number().min(0).optional(), min_duration: z.number().int().min(0).optional(), max_duration: z.number().int().min(0).optional(), day_of_week: z.array(z.enum(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"])).optional(), reservation: z.enum(["RESERVATION", "RESERVATION_EXPIRES"]).optional() }).optional() })).min(1), start_date_time: z.string().datetime().optional(), end_date_time: z.string().datetime().optional(), energy_mix: z.object({ is_green_energy: z.boolean().optional(), energy_sources: z.array(z.object({ source: z.enum(["NUCLEAR", "GENERAL_FOSSIL", "COAL", "GAS", "GENERAL_GREEN", "SOLAR", "WIND", "WATER"]), percentage: z.number().min(0).max(100) })).optional(), environ_impact: z.array(z.object({ category: z.enum(["NUCLEAR_WASTE", "CARBON_DIOXIDE"]), amount: z.number().min(0) })).optional(), supplier_name: z.string().max(64).optional(), energy_product_name: z.string().max(64).optional() }).optional(), last_updated: z.string().datetime() }); // POST /public-api/actions/session/v1.0/{session}/assign-user export const sessionAssignToUserBody = z.object({ userId: z.number().int() }); // POST /public-api/actions/session/v1.0/{session}/change-tariff export const sessionChangeTariffBody = z.object({ tariffId: z.number().int() }); // POST /public-api/actions/session/v1.0/{session}/retry-payment export const sessionRetryPaymentBody = z.object({ paymentMethodId: z.number().int().optional() }); // POST /public-api/actions/session/v1.0/{session}/set-custom-fields export const sessionSetCustomFieldsBody = z.object({ customFields: z.record(z.unknown()) }).strict(); // POST /public-api/actions/subscription-plans/v1.0/{subscriptionPlan}/replace export const subscriptionPlanReplaceBody = z.object({ planId: z.number().int(), replaceAt: z.string().datetime().optional(), reason: z.string() }); // POST /public-api/actions/tariffs/v2.0/{tariff}/set-tariff-display-information export const tariffSetDisplayInformationBody = z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), priceInformation: z.string().optional(), priceInformationLocalized: z.record(z.string()).optional(), totalCostInformation: z.string().optional(), totalCostInformationLocalized: z.record(z.string()).optional(), plainTextModeEnabled: z.boolean().optional() }); // POST /public-api/actions/tax/v1.0/validate-vat export const validateTaxNumberBody = z.object({ countryCode: z.string().min(2).max(2), vatNumber: z.string() }); // POST /public-api/actions/transaction/v1.0/{transaction}/create-pre-authorization export const transactionCreatePreAuthorizationBody = z.union([z.object({ processor: z.enum(["worldline"]), paymentProductId: z.number().int().optional(), returnUrl: z.string(), locale: z.string().optional(), paymentProductFilters: z.object({ restrictTo: z.object({ products: z.array(z.number().int()).optional(), groups: z.array(z.string()).optional() }).optional(), exclude: z.object({ products: z.array(z.number().int()).optional(), groups: z.array(z.string()).optional() }).optional() }).optional() }).strict(), z.object({ processor: z.enum(["stripe"]) }).strict(), z.object({ processor: z.enum(["adyen"]), returnUrl: z.string(), locale: z.string().optional() }).strict()]); // POST /public-api/actions/transactions/v1.0/{transaction}/issue-invoice export const transactionIssueInvoiceBody = z.object({ email: z.string().optional(), locale: z.string().optional(), invoiceDetails: z.object({ invoiceType: z.enum(["individual", "company"]), individualName: z.string().optional(), individualPersonalId: z.string().optional(), individualTaxId: z.string().optional(), companyName: z.string().optional(), companyRegNo: z.string().optional(), companyTaxId: z.string().optional(), companyTaxAdministrationOfficeName: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), city: z.string().optional(), postCode: z.string().optional(), address: z.string().optional(), recipientCode: z.string().min(7).max(7).regex(new RegExp("^[A-Za-z0-9]{7}$")).optional(), recipientCertifiedEmail: z.string().email().optional() }) }); // POST /public-api/actions/transactions/v1.0/{transaction}/resend-invoice // POST /public-api/actions/transactions/v1.0/{transaction}/update-payment-reference export const transactionUpdatePaymentReferenceBody = z.object({ ref: z.string() }).strict(); // POST /public-api/actions/user/v1.0/{user}/revoke-marketing-consent export const userRevokeMarketingConsentBody = z.object({ reason: z.string().max(500).optional() }).strict(); // POST /public-api/actions/users/v1.0/{user}/activate-subscription export const userActivateSubscriptionBody = z.object({ planId: z.number().int(), endDate: z.string().optional(), autoRenewal: z.boolean().optional(), reason: z.string().optional() }); // POST /public-api/actions/users/v1.0/{user}/add-balance export const userAddBalanceBody = z.object({ amount: z.number(), reason: z.string(), app_info: z.string().max(2000).optional() }).strict(); // POST /public-api/actions/users/v1.0/{user}/apply-custom-fee export const userApplyCustomFeeBody = z.object({ amount: z.number(), description: z.string(), paymentMethodId: z.string().optional() }).strict(); // POST /public-api/actions/users/v1.0/{user}/cancel-subscription export const userCancelSubscriptionBody = z.object({ reason: z.string() }); // POST /public-api/actions/users/v1.0/{user}/change-status export const userChangeStatusBody = z.object({ status: z.enum(["enabled", "disabled"]), reason: z.string() }).strict(); // POST /public-api/actions/users/v1.0/{user}/clear-subscription-amount-due // GET /public-api/actions/users/v1.0/{user}/get-total-eligible-coupon-energy // POST /public-api/actions/users/v1.0/{user}/subscribe-to-plan export const userSubscribeToPlanBody = z.object({ planId: z.number().int(), paymentMethodId: z.number().int().optional(), reason: z.string() }); // POST /public-api/actions/users/v1.0/{user}/subscription-billing-period/{billingPeriod}/retry-payment export const subscriptionBillingPeriodRetryPaymentBody = z.object({ paymentMethodId: z.number().int().optional() }); // GET /public-api/actions/users/v2.0/{user}/export-all-private-data // POST /public-api/actions/users/v2.0/{user}/redeem-voucher export const userRedeemVoucherBody = z.object({ code: z.string() }); // GET /public-api/logs/communication/v1.0 // GET /public-api/logs/communication/v1.0/{id} // GET /public-api/logs/ocpi/v1.0 // GET /public-api/logs/ocpi/v1.0/{id} // GET /public-api/notifications/v1.0 // POST /public-api/notifications/v1.0 export const notificationsSubscribeDeprecatedBody = z.object({ notifications: z.array(z.enum(["AuthorizationNotification", "authorization.changed", "BootNotification", "ChargePointChangedNotification", "chargePoint.changed", "evse.changed", "ChargePointSyncConfigurationNotification", "CircuitConsumptionNotification", "circuit.changed", "DiagnosticsStatusNotification", "FirmwareStatusNotification", "HardwareStatusNotification", "LocationChangedNotification", "NetworkStatusNotification", "SecurityEventNotification", "SessionMeterValuesNotification", "SessionStartStopNotification", "session.start.stop.notification", "SessionUpdateNotification", "session.chargingPeriod.changed", "UserChangedNotification", "SubOperatorChangedNotification", "TariffChangedNotification", "tariffGroup.changed", "user.subscriptionChanged", "user.subscription.changed", "ReservationChangedNotification", "PaymentMethodChangedNotification", "PartnerInviteChangedNotification", "reservation.changed", "user.paymentMethod.changed", "userBalance.changed", "partnerInvite.changed", "partnerInviteCorporateBillingPolicy.changed", "roamingPlatform.changed", "parkingSpace.occupancyStatus.changed", "partner.changed", "transaction.changed", "settlementReport.created", "idTag.changed", "issue.changed", "chargePoint.dataTransferReceived", "subscriptionPlan.changed", "user.invoiceDetails.changed", "cdr.received", "chargingProfile.applied", "installerJob.changed", "corporateBilling.limitReached"])), callbackUrl: z.string().url().max(500) }); // GET /public-api/notifications/v1.0/{notification} // PUT /public-api/notifications/v1.0/{notification} export const notificationsUpdateDeprecatedBody = z.object({ notifications: z.array(z.enum(["AuthorizationNotification", "authorization.changed", "BootNotification", "ChargePointChangedNotification", "chargePoint.changed", "evse.changed", "ChargePointSyncConfigurationNotification", "CircuitConsumptionNotification", "circuit.changed", "DiagnosticsStatusNotification", "FirmwareStatusNotification", "HardwareStatusNotification", "LocationChangedNotification", "NetworkStatusNotification", "SecurityEventNotification", "SessionMeterValuesNotification", "SessionStartStopNotification", "session.start.stop.notification", "SessionUpdateNotification", "session.chargingPeriod.changed", "UserChangedNotification", "SubOperatorChangedNotification", "TariffChangedNotification", "tariffGroup.changed", "user.subscriptionChanged", "user.subscription.changed", "ReservationChangedNotification", "PaymentMethodChangedNotification", "PartnerInviteChangedNotification", "reservation.changed", "user.paymentMethod.changed", "userBalance.changed", "partnerInvite.changed", "partnerInviteCorporateBillingPolicy.changed", "roamingPlatform.changed", "parkingSpace.occupancyStatus.changed", "partner.changed", "transaction.changed", "settlementReport.created", "idTag.changed", "issue.changed", "chargePoint.dataTransferReceived", "subscriptionPlan.changed", "user.invoiceDetails.changed", "cdr.received", "chargingProfile.applied", "installerJob.changed", "corporateBilling.limitReached"])), callbackUrl: z.string().url().max(500) }); // DELETE /public-api/notifications/v1.0/{notification} // GET /public-api/notifications/v2.0 // POST /public-api/notifications/v2.0 export const notificationsSubscribeBody = z.object({ id: z.number(), via: z.enum(["webhook", "kafka"]), notifications: z.array(z.enum(["AuthorizationNotification", "authorization.changed", "BootNotification", "ChargePointChangedNotification", "chargePoint.changed", "evse.changed", "ChargePointSyncConfigurationNotification", "CircuitConsumptionNotification", "circuit.changed", "DiagnosticsStatusNotification", "FirmwareStatusNotification", "HardwareStatusNotification", "LocationChangedNotification", "NetworkStatusNotification", "SecurityEventNotification", "SessionMeterValuesNotification", "SessionStartStopNotification", "session.start.stop.notification", "SessionUpdateNotification", "session.chargingPeriod.changed", "UserChangedNotification", "SubOperatorChangedNotification", "TariffChangedNotification", "tariffGroup.changed", "user.subscriptionChanged", "user.subscription.changed", "ReservationChangedNotification", "PaymentMethodChangedNotification", "PartnerInviteChangedNotification", "reservation.changed", "user.paymentMethod.changed", "userBalance.changed", "partnerInvite.changed", "partnerInviteCorporateBillingPolicy.changed", "roamingPlatform.changed", "parkingSpace.occupancyStatus.changed", "partner.changed", "transaction.changed", "settlementReport.created", "idTag.changed", "issue.changed", "chargePoint.dataTransferReceived", "subscriptionPlan.changed", "user.invoiceDetails.changed", "cdr.received", "chargingProfile.applied", "installerJob.changed", "corporateBilling.limitReached"])), includeTimestampInSignature: z.boolean().optional(), skipRoamingInfrastructure: z.boolean().optional(), suppressSelfNotifications: z.boolean().optional(), webhook: z.object({ callbackUrl: z.string().url().max(500) }).optional(), kafka: z.object({ topic: z.string(), brokers: z.array(z.string()), compressionCodec: z.enum(["none", "gzip", "snappy", "lz4"]).optional(), securityProtocol: z.enum(["PLAINTEXT", "SASL_SSL"]).optional(), saslMechanism: z.enum(["PLAIN", "SCRAM-SHA-256", "SCRAM-SHA-512"]).optional(), saslUsername: z.string().optional(), saslPassword: z.string().optional() }).optional() }); // GET /public-api/notifications/v2.0/{notification} // PUT /public-api/notifications/v2.0/{notification} export const notificationsCreateBody = z.object({ id: z.number(), via: z.enum(["webhook", "kafka"]), notifications: z.array(z.enum(["AuthorizationNotification", "authorization.changed", "BootNotification", "ChargePointChangedNotification", "chargePoint.changed", "evse.changed", "ChargePointSyncConfigurationNotification", "CircuitConsumptionNotification", "circuit.changed", "DiagnosticsStatusNotification", "FirmwareStatusNotification", "HardwareStatusNotification", "LocationChangedNotification", "NetworkStatusNotification", "SecurityEventNotification", "SessionMeterValuesNotification", "SessionStartStopNotification", "session.start.stop.notification", "SessionUpdateNotification", "session.chargingPeriod.changed", "UserChangedNotification", "SubOperatorChangedNotification", "TariffChangedNotification", "tariffGroup.changed", "user.subscriptionChanged", "user.subscription.changed", "ReservationChangedNotification", "PaymentMethodChangedNotification", "PartnerInviteChangedNotification", "reservation.changed", "user.paymentMethod.changed", "userBalance.changed", "partnerInvite.changed", "partnerInviteCorporateBillingPolicy.changed", "roamingPlatform.changed", "parkingSpace.occupancyStatus.changed", "partner.changed", "transaction.changed", "settlementReport.created", "idTag.changed", "issue.changed", "chargePoint.dataTransferReceived", "subscriptionPlan.changed", "user.invoiceDetails.changed", "cdr.received", "chargingProfile.applied", "installerJob.changed", "corporateBilling.limitReached"])), includeTimestampInSignature: z.boolean().optional(), skipRoamingInfrastructure: z.boolean().optional(), suppressSelfNotifications: z.boolean().optional(), webhook: z.object({ callbackUrl: z.string().url().max(500) }).optional(), kafka: z.object({ topic: z.string(), brokers: z.array(z.string()), compressionCodec: z.enum(["none", "gzip", "snappy", "lz4"]).optional(), securityProtocol: z.enum(["PLAINTEXT", "SASL_SSL"]).optional(), saslMechanism: z.enum(["PLAIN", "SCRAM-SHA-256", "SCRAM-SHA-512"]).optional(), saslUsername: z.string().optional(), saslPassword: z.string().optional() }).optional() }); // DELETE /public-api/notifications/v2.0/{notification} // POST /public-api/oauth/revoke export const oauthTokenRevokeBody = z.object({ token: z.string(), client_id: z.string().optional(), client_secret: z.string().optional() }); // POST /public-api/oauth/token export const oauthTokenExchangeBody = z.object({ grant_type: z.enum(["client_credentials"]), client_id: z.string().optional(), client_secret: z.string().optional() }); // GET /public-api/resources/admins/v1.0 // GET /public-api/resources/admins/v1.0/{admin} // GET /public-api/resources/admins/v1.0/{admin}/permissions // GET /public-api/resources/authorizations/v1.0/{authorization} // GET /public-api/resources/authorizations/v2.0 // GET /public-api/resources/authorizations/v2.0/{authorization} // GET /public-api/resources/authorizations/v2.1 // GET /public-api/resources/authorizations/v2.1/{authorization} // GET /public-api/resources/booking-requests/v1.0 // POST /public-api/resources/booking-requests/v1.0 export const bookingRequestCreateBody = z.union([z.object({ id: z.number().int().optional(), type: z.enum(["create"]), status: z.enum(["pending", "approved", "rejected"]).optional(), rejectionReason: z.string().optional(), createdAt: z.string().datetime().optional(), lastUpdatedAt: z.string().datetime().optional(), userId: z.number().int(), locationId: z.number().int(), externalId: z.string().max(255).optional(), startAt: z.string().datetime(), endAt: z.string().datetime(), evseId: z.number().int().optional(), evseCriteria: z.object({ currentType: z.enum(["ac", "dc"]).optional(), minPower: z.number().optional(), maxPower: z.number().optional(), connectorType: z.enum(["type1", "type2", "type3", "chademo", "ccs1", "ccs2", "schuko", "nacs", "cee16", "cee32", "j1772", "inductive", "nema-5-20", "type-e-french", "type-g-british", "type-j-swiss", "avcon", "gb-t-ac", "gb-t-dc", "chaoji", "nema-6-30", "nema-6-50", "mcs", "unknown"]).optional() }).optional(), parkingSpaceCriteria: z.object({ vehicleWeightKg: z.number().int().min(1).optional(), vehicleHeightCm: z.number().int().min(1).optional(), vehicleLengthCm: z.number().int().min(1).optional(), vehicleWidthCm: z.number().int().min(1).optional(), vehicleType: z.enum(["two_and_three_wheel_vehicles_and_quadricycles", "passenger_vehicles", "passenger_vehicles_with_trailer", "light_duty_vans", "heavy_duty_tractor_units_without_trailer", "heavy_duty_trucks_without_articulation_point", "heavy_duty_trucks_with_trailer_attached", "buses_or_motor_coaches"]).optional(), driveThroughRequired: z.boolean().optional(), refrigerationOutletRequired: z.boolean().optional(), dangerousGoodsAllowed: z.boolean().optional() }).optional(), authorizedTokenIds: z.array(z.number().int()).optional() }), z.object({ id: z.number().int().optional(), type: z.enum(["update"]), status: z.enum(["pending", "approved", "rejected"]).optional(), rejectionReason: z.string().optional(), createdAt: z.string().datetime().optional(), lastUpdatedAt: z.string().datetime().optional(), bookingId: z.number().int(), userId: z.number().int().optional(), externalId: z.string().max(255).optional(), startAt: z.string().datetime().optional(), endAt: z.string().datetime().optional(), authorizedTokenIds: z.array(z.number().int()).optional() }), z.object({ id: z.number().int().optional(), type: z.enum(["cancel"]), status: z.enum(["pending", "approved", "rejected"]).optional(), rejectionReason: z.string().optional(), createdAt: z.string().datetime().optional(), lastUpdatedAt: z.string().datetime().optional(), bookingId: z.number().int(), externalId: z.string().max(255).optional() })]); // GET /public-api/resources/booking-requests/v1.0/{bookingRequest} // GET /public-api/resources/bookings/v1.0 // GET /public-api/resources/bookings/v1.0/{booking} // GET /public-api/resources/cdrs/v2.0 // GET /public-api/resources/cdrs/v2.0/{cdr} // GET /public-api/resources/charge-point-downtime-periods/v1.0 // POST /public-api/resources/charge-point-downtime-periods/v1.0 export const chargePointDowntimePeriodCreateBody = z.object({ chargePointId: z.number().int(), noticeId: z.number().int(), startedAt: z.string().datetime(), endedAt: z.string().datetime() }); // GET /public-api/resources/charge-point-downtime-periods/v1.0/{chargePointDowntimePeriod} // DELETE /public-api/resources/charge-point-downtime-periods/v1.0/{chargePointDowntimePeriod} // PATCH /public-api/resources/charge-point-downtime-periods/v1.0/{chargePointDowntimePeriod} export const chargePointDowntimePeriodUpdateBody = z.object({ noticeId: z.number().int().optional(), startedAt: z.string().datetime().optional(), endedAt: z.string().datetime().optional() }); // GET /public-api/resources/charge-point-downtime-periods/v1.0/{chargePointDowntimePeriod}/status-log // GET /public-api/resources/charge-point-models/v1.0 // POST /public-api/resources/charge-point-models/v1.0 export const chargePointModelCreateBody = z.object({ name: z.string(), vendorId: z.number().int(), userManual: z.string().url().optional(), installerManual: z.string().url().optional() }); // GET /public-api/resources/charge-point-models/v1.0/{modelId} // DELETE /public-api/resources/charge-point-models/v1.0/{modelId} // PATCH /public-api/resources/charge-point-models/v1.0/{modelId} export const chargePointModelUpdateBody = z.object({ name: z.string().optional(), vendorId: z.number().int().optional(), userManual: z.string().url().optional(), installerManual: z.string().url().optional() }); // GET /public-api/resources/charge-point-vendors/v1.0 // POST /public-api/resources/charge-point-vendors/v1.0 export const chargePointVendorCreateBody = z.object({ id: z.number().int(), name: z.string() }); // GET /public-api/resources/charge-point-vendors/v1.0/{vendorId} // DELETE /public-api/resources/charge-point-vendors/v1.0/{vendorId} // PATCH /public-api/resources/charge-point-vendors/v1.0/{vendorId} export const chargePointVendorUpdateBody = z.object({ name: z.string().optional() }); // GET /public-api/resources/charge-points/v1.0 // POST /public-api/resources/charge-points/v1.0 export const chargePointCreateDeprecatedBody = z.object({ name: z.string(), networkId: z.string(), networkProtocol: z.enum(["ocpp 1.5", "ocpp 1.6", "ocpp 1.6 soap", "ocpp 2.0.1"]).optional(), networkPassword: z.string().optional(), networkIp: z.string().optional(), networkPort: z.string().optional(), status: z.enum(["active", "disabled", "out of order", "demo"]), plugAndCharge: z.boolean().optional(), locationId: z.number().int().optional(), pin: z.string().optional(), accessType: z.enum(["private", "public", "personal"]).optional(), desiredSecurityProfile: z.number().int().min(0).max(2).optional(), ownerPartnerId: z.number().int().optional(), ownerPartnerContractId: z.number().int().optional(), partnerCorporateBillingAsDefault: z.boolean().optional(), partnerAccessType: z.enum(["privateViewPrivateUse", "privateViewPublicUse", "publicViewPrivateUse"]).optional(), capabilities: z.array(z.enum(["REMOTE_START_STOP_CAPABLE", "METER_VALUES", "STOP_TRANSACTION_ON_EV_DISCONNECT"])).optional(), managedByOperator: z.boolean().optional(), uptimeTrackingEnabled: z.boolean().optional(), monitoringEnabled: z.boolean().optional(), autoRecoveryEnabled: z.boolean().optional(), autoFaultRecovery: z.boolean().optional(), tags: z.array(z.string()).optional(), templateId: z.number().int(), evses: z.record(z.object({ tariffGroupId: z.number().int().optional(), physicalReference: z.string().optional(), maxAmperage: z.number().optional(), status: z.enum(["active", "disabled", "out of order"]).optional() })).optional(), externalId: z.string().optional() }); // GET /public-api/resources/charge-points/v1.0/{chargePoint} // DELETE /public-api/resources/charge-points/v1.0/{chargePoint} // PATCH /public-api/resources/charge-points/v1.0/{chargePoint} export const chargePointUpdateDeprecatedBody = z.object({ name: z.string().optional(), networkId: z.string().optional(), networkProtocol: z.enum(["ocpp 1.5", "ocpp 1.6", "ocpp 1.6 soap", "ocpp 2.0.1"]).optional(), networkPassword: z.string().optional(), networkIp: z.string().optional(), networkPort: z.string().optional(), status: z.enum(["active", "disabled", "out of order", "demo"]).optional(), plugAndCharge: z.boolean().optional(), locationId: z.number().int().optional(), pin: z.string().optional(), accessType: z.enum(["private", "public", "personal"]).optional(), desiredSecurityProfile: z.number().int().min(0).max(2).optional(), ownerPartnerId: z.number().int().optional(), ownerPartnerContractId: z.number().int().optional(), partnerCorporateBillingAsDefault: z.boolean().optional(), partnerAccessType: z.enum(["privateViewPrivateUse", "privateViewPublicUse", "publicViewPrivateUse"]).optional(), capabilities: z.array(z.enum(["REMOTE_START_STOP_CAPABLE", "METER_VALUES", "STOP_TRANSACTION_ON_EV_DISCONNECT"])).optional(), managedByOperator: z.boolean().optional(), uptimeTrackingEnabled: z.boolean().optional(), monitoringEnabled: z.boolean().optional(), autoRecoveryEnabled: z.boolean().optional(), autoFaultRecovery: z.boolean().optional(), tags: z.array(z.string()).optional(), evses: z.record(z.object({ tariffGroupId: z.number().int().optional(), physicalReference: z.string().optional(), maxAmperage: z.number().optional(), status: z.enum(["active", "disabled", "out of order"]).optional() })).optional(), externalId: z.string().optional() }); // GET /public-api/resources/charge-points/v1.0/{chargePoint}/configurations // GET /public-api/resources/charge-points/v1.0/{chargePoint}/configurations/{key} // PATCH /public-api/resources/charge-points/v1.0/{chargePoint}/configurations/{key} export const chargePointConfigurationUpdateDeprecatedBody = z.object({ value: z.string().optional() }); // GET /public-api/resources/charge-points/v1.0/{chargePoint}/status // GET /public-api/resources/charge-points/v2.0 // POST /public-api/resources/charge-points/v2.0 export const chargePointCreateBody = z.object({ id: z.number().int().optional(), operatorId: z.number().int().optional(), name: z.string().max(255), type: z.enum(["private", "public", "personal"]), pin: z.string().optional(), locationId: z.number().int().optional(), chargingZoneId: z.number().int().optional(), electricityRateId: z.number().int().optional(), subscription: z.object({ required: z.boolean().optional(), planIds: z.array(z.number().int()).optional() }).optional(), networkType: z.enum(["cellular", "ethernet", "wlan"]).optional(), status: z.enum(["enabled", "disabled", "out of order", "demo"]), managedByOperator: z.boolean().optional(), externalId: z.string().optional(), network: z.object({ id: z.string().optional(), protocol: z.enum(["ocpp 1.5", "ocpp 1.6", "ocpp 1.6 soap", "ocpp 2.0.1"]).optional(), password: z.string().optional(), ip: z.string().optional(), port: z.number().int().optional() }).optional(), capabilities: z.array(z.enum(["remote_start_stop_capable", "meter_values", "stop_transaction_on_ev_disconnect", "disregard_the_heartbeats", "display_messages"])).optional(), autoStartWithoutAuthorization: z.boolean().optional(), disableAutoStartEmulation: z.boolean().optional(), security: z.object({ desiredProfile: z.number().int().optional(), currentProfile: z.number().int(), hardwareEnabledProfile: z.number().int().optional(), desiredProfileStatus: z.enum(["applied", "pending", "rejected"]).optional() }).optional(), modelId: z.number().int().optional(), monitoringEnabled: z.boolean().optional(), autoRecoveryEnabled: z.boolean().optional(), enableAutoFaultRecovery: z.boolean().optional(), user: z.object({ id: z.number().int().optional(), automaticFirmwareUpdatesEnabled: z.boolean().optional() }).optional(), partner: z.object({ id: z.number().int().optional(), contractId: z.number().int().optional(), contactId: z.number().int().optional(), corporateBillingAsDefault: z.boolean().optional(), accessType: z.enum(["private_view_private_use", "private_view_public_use", "public_view_private_use"]).optional(), notice: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional() }).optional(), utilityId: z.number().int().optional(), tags: z.array(z.string()).optional(), uptimeTrackingEnabled: z.boolean().optional(), sharingCode: z.string().optional(), enabledRandomisedDelay: z.boolean().optional(), noticeId: z.number().int().optional(), usesRenewableEnergy: z.boolean().optional(), integratedAt: z.string().datetime().optional(), manufacturedAt: z.string().datetime().optional(), ocppConnectedChargePointId: z.number().int().optional(), communicationMode: z.enum(["none", "direct_ocpp", "via_ocpp_connected_charge_point"]).optional(), electricityCostReimbursementIntegrationId: z.number().int().optional(), installationAndMaintenanceCompanyId: z.number().int().optional(), countryStationId: z.string().max(255).optional(), calibrationLawDataAvailability: z.enum(["local", "not_available"]).optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint} // DELETE /public-api/resources/charge-points/v2.0/{chargePoint} // PATCH /public-api/resources/charge-points/v2.0/{chargePoint} export const chargePointUpdateBody = z.object({ id: z.number().int().optional(), name: z.string().max(255).optional(), type: z.enum(["private", "public", "personal"]).optional(), pin: z.string().optional(), locationId: z.number().int().optional(), chargingZoneId: z.number().int().optional(), electricityRateId: z.number().int().optional(), electricityCostReimbursementIntegrationId: z.number().int().optional(), installationAndMaintenanceCompanyId: z.number().int().optional(), countryStationId: z.string().max(255).optional(), calibrationLawDataAvailability: z.enum(["local", "not_available"]).optional(), subscription: z.object({ required: z.boolean().optional(), planIds: z.array(z.number().int()).optional() }).optional(), networkType: z.enum(["cellular", "ethernet", "wlan"]).optional(), status: z.enum(["enabled", "disabled", "out of order", "demo"]).optional(), managedByOperator: z.boolean().optional(), externalId: z.string().optional(), network: z.object({ id: z.string().optional(), protocol: z.enum(["ocpp 1.5", "ocpp 1.6", "ocpp 1.6 soap", "ocpp 2.0.1"]).optional(), password: z.string().optional(), ip: z.string().optional(), port: z.number().int().optional() }).optional(), capabilities: z.array(z.enum(["remote_start_stop_capable", "meter_values", "stop_transaction_on_ev_disconnect", "disregard_the_heartbeats", "display_messages"])).optional(), autoStartWithoutAuthorization: z.boolean().optional(), disableAutoStartEmulation: z.boolean().optional(), security: z.object({ desiredProfile: z.number().int().optional(), currentProfile: z.number().int().optional(), hardwareEnabledProfile: z.number().int().optional(), desiredProfileStatus: z.enum(["applied", "pending", "rejected"]).optional() }).optional(), modelId: z.number().int().optional(), monitoringEnabled: z.boolean().optional(), autoRecoveryEnabled: z.boolean().optional(), enableAutoFaultRecovery: z.boolean().optional(), user: z.object({ id: z.number().int().optional(), automaticFirmwareUpdatesEnabled: z.boolean().optional() }).optional(), partner: z.object({ id: z.number().int().optional(), contractId: z.number().int().optional(), contactId: z.number().int().optional(), corporateBillingAsDefault: z.boolean().optional(), accessType: z.enum(["private_view_private_use", "private_view_public_use", "public_view_private_use"]).optional(), notice: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional() }).optional(), utilityId: z.number().int().optional(), tags: z.array(z.string()).optional(), uptimeTrackingEnabled: z.boolean().optional(), enabledRandomisedDelay: z.boolean().optional(), noticeId: z.number().int().optional(), usesRenewableEnergy: z.boolean().optional(), integratedAt: z.string().datetime().optional(), manufacturedAt: z.string().datetime().optional(), tariffDisplayMessages: z.object({ sendDefaultPrice: z.boolean().optional(), sendUserPrice: z.boolean().optional(), sendRunningCost: z.boolean().optional(), sendFinalCost: z.boolean().optional() }).optional(), publicSharing: z.object({ enabled: z.boolean().optional(), roamingPublishEnabled: z.boolean().optional(), reimbursementPolicyId: z.number().int().optional() }).optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/available-personal-smart-charging-modes // GET /public-api/resources/charge-points/v2.0/{chargePoint}/configurations // GET /public-api/resources/charge-points/v2.0/{chargePoint}/configurations/{key} // PATCH /public-api/resources/charge-points/v2.0/{chargePoint}/configurations/{key} export const chargePointConfigurationUpdateBody = z.object({ value: z.string().optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/evses // POST /public-api/resources/charge-points/v2.0/{chargePoint}/evses export const chargePointEvseCreateBody = z.object({ physicalReference: z.string(), currentType: z.enum(["ac", "dc"]), label: z.string().optional(), networkId: z.string(), status: z.enum(["enabled", "disabled", "out of order"]), midMeterCertificationEndYear: z.number().int().optional(), tariffGroupId: z.number().int().optional(), allowsReservation: z.boolean().optional(), bookingEnabled: z.boolean().optional(), monitoringEnabled: z.boolean().optional(), powerOptions: z.object({ maxOutputVoltage: z.number().int().min(1).max(1000).optional(), maxPower: z.number().int().optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]).optional(), maxAmperage: z.number().optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]).optional(), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]).optional(), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional() }).optional(), externalId: z.string().optional(), capabilityOverrides: z.object({ rfidReader: z.enum(["auto", "force_enable", "force_disable"]).optional(), creditCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), contactlessCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), debitCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chipCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), pedTerminal: z.enum(["auto", "force_enable", "force_disable"]).optional(), remoteStartStop: z.enum(["auto", "force_enable", "force_disable"]).optional(), unlockCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), reservable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingProfileCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingPreferencesCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), startSessionConnectorRequired: z.enum(["auto", "force_enable", "force_disable"]).optional(), tokenGroupCapable: z.enum(["auto", "force_enable", "force_disable"]).optional() }).optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse} // DELETE /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse} // PATCH /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse} export const chargePointEvseUpdateBody = z.object({ physicalReference: z.string().optional(), currentType: z.enum(["ac", "dc"]).optional(), label: z.string().optional(), networkId: z.string().optional(), status: z.enum(["enabled", "disabled", "out of order"]).optional(), midMeterCertificationEndYear: z.number().int().optional(), tariffGroupId: z.number().int().optional(), allowsReservation: z.boolean().optional(), bookingEnabled: z.boolean().optional(), monitoringEnabled: z.boolean().optional(), powerOptions: z.object({ maxOutputVoltage: z.number().int().min(1).max(1000).optional(), maxPower: z.number().int().optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]).optional(), maxAmperage: z.number().optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]).optional(), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]).optional(), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional() }).optional(), externalId: z.string().optional(), capabilityOverrides: z.object({ rfidReader: z.enum(["auto", "force_enable", "force_disable"]).optional(), creditCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), contactlessCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), debitCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chipCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), pedTerminal: z.enum(["auto", "force_enable", "force_disable"]).optional(), remoteStartStop: z.enum(["auto", "force_enable", "force_disable"]).optional(), unlockCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), reservable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingProfileCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingPreferencesCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), startSessionConnectorRequired: z.enum(["auto", "force_enable", "force_disable"]).optional(), tokenGroupCapable: z.enum(["auto", "force_enable", "force_disable"]).optional() }).optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse}/connectors // POST /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse}/connectors export const chargePointEvseConnectorCreateBody = z.object({ type: z.enum(["type1", "type2", "type3", "chademo", "ccs1", "ccs2", "schuko", "nacs", "cee16", "cee32", "j1772", "inductive", "nema-5-20", "type-e-french", "type-g-british", "type-j-swiss", "avcon", "gb-t-ac", "gb-t-dc", "chaoji", "nema-6-30", "nema-6-50", "mcs", "unknown"]), format: z.enum(["socket", "cable"]).optional(), status: z.enum(["enabled", "disabled"]).optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse}/connectors/{connector} // DELETE /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse}/connectors/{connector} // PATCH /public-api/resources/charge-points/v2.0/{chargePoint}/evses/{evse}/connectors/{connector} export const chargePointEvseConnectorUpdateBody = z.object({ type: z.enum(["type1", "type2", "type3", "chademo", "ccs1", "ccs2", "schuko", "nacs", "cee16", "cee32", "j1772", "inductive", "nema-5-20", "type-e-french", "type-g-british", "type-j-swiss", "avcon", "gb-t-ac", "gb-t-dc", "chaoji", "nema-6-30", "nema-6-50", "mcs", "unknown"]).optional(), format: z.enum(["socket", "cable"]).optional(), status: z.enum(["enabled", "disabled"]).optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/hardware-status-logs // GET /public-api/resources/charge-points/v2.0/{chargePoint}/latest-hardware-status-log // GET /public-api/resources/charge-points/v2.0/{chargePoint}/latest-network-status-log // GET /public-api/resources/charge-points/v2.0/{chargePoint}/network-status-logs // GET /public-api/resources/charge-points/v2.0/{chargePoint}/notes // POST /public-api/resources/charge-points/v2.0/{chargePoint}/notes export const chargePointNoteCreateBody = z.object({ summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/notes/{note} // DELETE /public-api/resources/charge-points/v2.0/{chargePoint}/notes/{note} // PATCH /public-api/resources/charge-points/v2.0/{chargePoint}/notes/{note} export const chargePointNoteUpdateBody = z.object({ summary: z.string().max(255).optional(), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/personal-smart-charging-preferences // POST /public-api/resources/charge-points/v2.0/{chargePoint}/personal-smart-charging-preferences export const personalSmartChargingPreferencesUpdateBody = z.union([z.object({ enabled: z.boolean().optional(), type: z.enum(["user_controlled_schedule"]), preferences: z.object({ startTime: z.string(), endTime: z.string(), targetCharge: z.object({ minTargetChargeKwh: z.number().optional(), maxTargetChargeKwh: z.number().optional() }).optional(), trackElectricityCosts: z.object({ priceOffPeak: z.number().optional(), pricePeak: z.number().optional() }).optional(), weekDays: z.array(z.object({ days: z.array(z.enum(["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"])), startTime: z.string(), endTime: z.string() })).optional() }) }), z.object({ enabled: z.boolean().optional(), type: z.enum(["solar"]), preferences: z.object({ maxCurrentFromGrid: z.number(), solarStableTime: z.number() }) }), z.object({ enabled: z.boolean().optional(), type: z.enum(["octopus_agile"]), integrationId: z.number().int(), preferences: z.object({ applicableTaxId: z.number().int(), targetCharge: z.object({ departureTime: z.string().optional(), preconditioningTime: z.number().int().optional(), minTargetChargeKwh: z.number().optional(), maxTargetChargeKwh: z.number().optional() }).optional(), postCode: z.string(), priceThreshold: z.number() }) }), z.object({ enabled: z.boolean().optional(), type: z.enum(["octopus_go"]), integrationId: z.number().int(), preferences: z.object({ applicableTaxId: z.number().int(), targetCharge: z.object({ departureTime: z.string().optional(), preconditioningTime: z.number().int().optional(), minTargetChargeKwh: z.number().optional(), maxTargetChargeKwh: z.number().optional() }).optional(), postCode: z.string(), priceThreshold: z.number().optional() }) }), z.object({ enabled: z.boolean().optional(), type: z.enum(["nordpool"]), integrationId: z.number().int(), preferences: z.object({ location: z.enum(["GB1"]), targetCharge: z.object({ departureTime: z.string(), preconditioningTime: z.number().int().optional(), targetChargeKwh: z.number() }) }) }), z.object({ enabled: z.boolean().optional(), type: z.enum(["charger_electricity_rate"]), electricityRateId: z.number().int(), preferences: z.object({ solar: z.boolean().optional(), startTime: z.string(), endTime: z.string(), targetCharge: z.object({ departureTime: z.string(), preconditioningTime: z.number().int().optional(), targetChargeKwh: z.number() }), weekDays: z.array(z.object({ days: z.array(z.enum(["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"])), startTime: z.string(), endTime: z.string() })).optional() }) }), z.object({ enabled: z.boolean() })]); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/shared-partners // PUT /public-api/resources/charge-points/v2.0/{chargePoint}/shared-partners export const chargePointSharedPartnersSyncBody = z.object({ partnerIds: z.array(z.number().int()) }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/shares // POST /public-api/resources/charge-points/v2.0/{chargePoint}/shares export const chargePointShareCreateBody = z.object({ userId: z.number().int() }); // GET /public-api/resources/charge-points/v2.0/{chargePoint}/shares/{share} // DELETE /public-api/resources/charge-points/v2.0/{chargePoint}/shares/{share} // PATCH /public-api/resources/charge-points/v2.0/{chargePoint}/shares/{share} export const chargePointShareUpdateBody = z.object({}); // POST /public-api/resources/charge-points/v2.0/{chargePoint}/smart-charging export const chargePointSmartChargingUpdateBody = z.union([z.object({ mode: z.enum(["tod"]), defaultChargePointMaxCurrent: z.number(), circuitId: z.number().int().optional(), periods: z.array(z.object({ weekDay: z.enum(["all", "mon", "tue", "wed", "thu", "fri", "sat", "sun"]), elements: z.array(z.object({ startAt: z.string(), endAt: z.string(), maxCurrent: z.number().optional() })) })).optional(), preconditioningTime: z.number().int().optional(), minCurrent: z.number().optional(), enableKeepAwake: z.boolean().optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]), electricalConfiguration: z.enum(["star", "delta"]).optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional(), powerSharing: z.object({ enabled: z.boolean().optional(), managementMode: z.enum(["static", "dynamic"]).optional(), totalCabinetPowerKw: z.number().int().min(1).optional(), moduleSizeKw: z.number().int().min(1).optional() }).optional() }), z.object({ mode: z.enum(["dynamic"]), defaultChargePointMaxCurrent: z.number(), preconditioningTime: z.number().int().optional(), circuitId: z.number().int().optional(), minCurrent: z.number().optional(), enableKeepAwake: z.boolean().optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]), electricalConfiguration: z.enum(["star", "delta"]).optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional(), powerSharing: z.object({ enabled: z.boolean().optional(), managementMode: z.enum(["static", "dynamic"]).optional(), totalCabinetPowerKw: z.number().int().min(1).optional(), moduleSizeKw: z.number().int().min(1).optional() }).optional() }), z.object({ mode: z.enum(["user_schedule"]), defaultChargePointMaxCurrent: z.number(), preconditioningTime: z.number().int().optional(), circuitId: z.number().int().optional(), minCurrent: z.number(), enableKeepAwake: z.boolean(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]), electricalConfiguration: z.enum(["star", "delta"]).optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]), allowDynamicLoadManagement: z.boolean().optional(), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional(), powerSharing: z.object({ enabled: z.boolean().optional(), managementMode: z.enum(["static", "dynamic"]).optional(), totalCabinetPowerKw: z.number().int().min(1).optional(), moduleSizeKw: z.number().int().min(1).optional() }).optional() }), z.object({ mode: z.enum(["disabled"]), preconditioningTime: z.number().int().optional(), powerSharing: z.object({ enabled: z.boolean().optional(), managementMode: z.enum(["static", "dynamic"]).optional(), totalCabinetPowerKw: z.number().int().min(1).optional(), moduleSizeKw: z.number().int().min(1).optional() }).optional() })]); // GET /public-api/resources/circuits/v1.0 // POST /public-api/resources/circuits/v1.0 export const circuitCreateDeprecatedBody = z.object({ id: z.number().int(), name: z.string(), phases: z.enum(["1", "3"]), maxCurrent: z.number().min(0), minChargePointCurrent: z.number().min(0).optional(), setSessionLimitToZeroOnIdle: z.boolean().optional(), chargePoints: z.array(z.object({ id: z.number().int(), maxCurrent: z.number(), phases: z.enum(["1", "3"]), inputVoltage: z.enum(["110-130", "220-240", "380", "400"]), phaseRotation: z.enum(["L1", "L2", "L3", "RST", "RTS", "SRT", "STR", "TRS", "TSR"]) })), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/circuits/v1.0/{dlmCircuit} // DELETE /public-api/resources/circuits/v1.0/{dlmCircuit} // PATCH /public-api/resources/circuits/v1.0/{dlmCircuit} export const circuitUpdateDeprecatedBody = z.object({ id: z.number().int().optional(), name: z.string().optional(), phases: z.enum(["1", "3"]).optional(), maxCurrent: z.number().min(0).optional(), minChargePointCurrent: z.number().min(0).optional(), setSessionLimitToZeroOnIdle: z.boolean().optional(), chargePoints: z.array(z.object({ id: z.number().int(), maxCurrent: z.number(), phases: z.enum(["1", "3"]), inputVoltage: z.enum(["110-130", "220-240", "380", "400"]), phaseRotation: z.enum(["L1", "L2", "L3", "RST", "RTS", "SRT", "STR", "TRS", "TSR"]) })).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/circuits/v1.0/{dlmCircuit}/consumption // GET /public-api/resources/circuits/v1.0/{dlmCircuit}/consumption/{phase} // GET /public-api/resources/circuits/v2.0 // POST /public-api/resources/circuits/v2.0 export const circuitCreateBody = z.object({ id: z.number().int().optional(), operatorId: z.number().int().optional(), name: z.string(), parentCircuitId: z.number().int().optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]).optional(), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional(), electricalConfiguration: z.enum(["star", "delta"]).optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]).optional(), maxCurrent: z.number(), minChargePointCurrent: z.number().optional(), applyMinimumCurrentOnSessionStart: z.boolean().optional(), applyFcfsLoadManagementStrategy: z.boolean().optional(), setSessionLimitToZeroOnIdle: z.boolean().optional(), electricityMeterId: z.number().optional(), offlineReservedCurrent: z.number().optional(), loadBalancingIntegration: z.object({ id: z.number().int().optional(), fields: z.union([z.object({ startDate: z.string().optional() }), z.object({ installationId: z.string().uuid() })]).optional() }).optional() }); // GET /public-api/resources/circuits/v2.0/{circuit} // DELETE /public-api/resources/circuits/v2.0/{circuit} // PATCH /public-api/resources/circuits/v2.0/{circuit} export const circuitUpdateBody = z.object({ id: z.number().int().optional(), operatorId: z.number().int().optional(), name: z.string().optional(), parentCircuitId: z.number().int().optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]).optional(), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]).optional(), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional(), electricalConfiguration: z.enum(["star", "delta"]).optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]).optional(), maxCurrent: z.number().optional(), minChargePointCurrent: z.number().optional(), applyMinimumCurrentOnSessionStart: z.boolean().optional(), applyFcfsLoadManagementStrategy: z.boolean().optional(), setSessionLimitToZeroOnIdle: z.boolean().optional(), electricityMeterId: z.number().optional(), offlineReservedCurrent: z.number().optional(), loadBalancingIntegration: z.object({ id: z.number().int().optional(), fields: z.union([z.object({ startDate: z.string().optional() }), z.object({ installationId: z.string().uuid() })]).optional() }).optional() }); // GET /public-api/resources/circuits/v2.0/{circuit}/charge-point-priorities // GET /public-api/resources/circuits/v2.0/{circuit}/consumption // GET /public-api/resources/circuits/v2.0/{circuit}/schedule // PUT /public-api/resources/circuits/v2.0/{circuit}/schedule export const circuitScheduleCreateOrUpdateBody = z.object({ scheduleType: z.enum(["daily", "weekly"]), schedule: z.union([z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })), z.object({ monday: z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })), tuesday: z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })), wednesday: z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })), thursday: z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })), friday: z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })), saturday: z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })), sunday: z.array(z.object({ start: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), end: z.string().regex(new RegExp("^([01]\\d|2[0-3]):[0-5]\\d$")), maxCurrent: z.number().min(0) })) })]), scheduleLimitUnit: z.enum(["amps", "kilowatts"]).optional() }); // DELETE /public-api/resources/circuits/v2.0/{circuit}/schedule // GET /public-api/resources/circuits/v2.0/{circuit}/soc-priorities // GET /public-api/resources/circuits/v2.0/{circuit}/unmanaged-load // GET /public-api/resources/circuits/v2.0/{circuit}/user-priorities // POST /public-api/resources/circuits/v2.0/{circuit}/user-priorities export const circuitUserPriorityCreateBody = z.object({ id: z.number().int().optional(), targetId: z.number().int(), type: z.enum(["partner", "userGroup"]), priority: z.number().min(0) }); // GET /public-api/resources/circuits/v2.0/{circuit}/user-priorities/{userPriority} // DELETE /public-api/resources/circuits/v2.0/{circuit}/user-priorities/{userPriority} // PATCH /public-api/resources/circuits/v2.0/{circuit}/user-priorities/{userPriority} export const circuitUserPriorityUpdateBody = z.object({ id: z.number().int().optional(), targetId: z.number().int().optional(), type: z.enum(["partner", "userGroup"]).optional(), priority: z.number().min(0).optional() }); // GET /public-api/resources/configuration-templates/v1.0 // POST /public-api/resources/configuration-templates/v1.0 export const createConfigurationTemplateBody = z.object({ operatorId: z.number().int().optional(), name: z.string(), ocppVersion: z.enum(["ocpp 1.6", "ocpp 2.0.1"]) }); // GET /public-api/resources/configuration-templates/v1.0/{template} // DELETE /public-api/resources/configuration-templates/v1.0/{template} // PATCH /public-api/resources/configuration-templates/v1.0/{template} export const updateConfigurationTemplateBody = z.object({ name: z.string().optional() }); // GET /public-api/resources/configuration-templates/v1.0/{template}/variables // POST /public-api/resources/configuration-templates/v1.0/{template}/variables export const configurationTemplateVariableCreateBody = z.union([z.object({ id: z.number().int().optional(), keyName: z.string(), value: z.string(), lastUpdatedAt: z.string().datetime().optional() }).strict(), z.object({ id: z.number().int().optional(), value: z.string(), variableName: z.string(), variableType: z.enum(["Actual", "Target", "MinSet", "MaxSet"]).optional(), variableInstance: z.string().optional(), component: z.string(), componentInstance: z.string().optional(), evseId: z.number().int().optional(), connectorId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }).strict()]); // DELETE /public-api/resources/configuration-templates/v1.0/{template}/variables/{variable} // PATCH /public-api/resources/configuration-templates/v1.0/{template}/variables/{variable} export const configurationTemplateVariableUpdateBody = z.union([z.object({ id: z.number().int().optional(), keyName: z.string().optional(), value: z.string().optional(), lastUpdatedAt: z.string().datetime().optional() }).strict(), z.object({ id: z.number().int().optional(), value: z.string().optional(), variableName: z.string().optional(), variableType: z.enum(["Actual", "Target", "MinSet", "MaxSet"]).optional(), variableInstance: z.string().optional(), component: z.string().optional(), componentInstance: z.string().optional(), evseId: z.number().int().optional(), connectorId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }).strict()]); // GET /public-api/resources/consent-history/v1.0 // GET /public-api/resources/consents/v1.0 // POST /public-api/resources/consents/v1.0 export const consentsCreateBody = z.object({ userId: z.number().int(), termVersionId: z.number().int(), status: z.enum(["agreed", "rejected"]) }); // GET /public-api/resources/contact-details/v2.0 // PUT /public-api/resources/contact-details/v2.0 export const contactDetailsUpdateBody = z.object({ email: z.string(), phone: z.string().optional(), lastUpdatedAt: z.string().datetime().optional() }); // DELETE /public-api/resources/contact-details/v2.0 // GET /public-api/resources/cp-models/v1.0 // POST /public-api/resources/cp-models/v1.0 export const chargePointModelCreateDeprecatedBody = z.object({ name: z.string(), vendorId: z.number().int(), userManual: z.string().url().optional(), installerManual: z.string().url().optional() }); // GET /public-api/resources/cp-models/v1.0/{modelId} // DELETE /public-api/resources/cp-models/v1.0/{modelId} // PATCH /public-api/resources/cp-models/v1.0/{modelId} export const chargePointModelUpdateDeprecatedBody = z.object({ name: z.string().optional(), vendorId: z.number().int().optional(), userManual: z.string().url().optional(), installerManual: z.string().url().optional() }); // GET /public-api/resources/cp-vendors/v1.0 // POST /public-api/resources/cp-vendors/v1.0 export const chargePointVendorCreateDeprecatedBody = z.object({ id: z.number().int(), name: z.string() }); // GET /public-api/resources/cp-vendors/v1.0/{vendorId} // DELETE /public-api/resources/cp-vendors/v1.0/{vendorId} // PATCH /public-api/resources/cp-vendors/v1.0/{vendorId} export const chargePointVendorUpdateDeprecatedBody = z.object({ name: z.string().optional() }); // GET /public-api/resources/currencies/v2.0 // POST /public-api/resources/currencies/v2.0 export const currencyCreateBody = z.object({ alphabeticCode: z.enum(["AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BOV", "BRL", "BSD", "BTN", "BWP", "BYN", "BZD", "CAD", "CDF", "CHE", "CHF", "CHW", "CLF", "CLP", "CNY", "COP", "COU", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRU", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STN", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "USN", "UYI", "UYU", "UYW", "UZS", "VES", "VND", "VUV", "WST", "XAF", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XDR", "XOF", "XPD", "XPF", "XPT", "XSU", "XTS", "XUA", "XXX", "YER", "ZAR", "ZMW", "ZWL"]), prefix: z.string().optional(), suffix: z.string().optional(), decimal: z.number().int().optional(), unitPriceAndCalculationsDecimal: z.number().int().optional(), enableUseOfMinorCurrencyUnit: z.boolean().optional(), minorUnitSign: z.string().optional() }); // GET /public-api/resources/currencies/v2.0/{currency} // DELETE /public-api/resources/currencies/v2.0/{currency} // PATCH /public-api/resources/currencies/v2.0/{currency} export const currencyUpdateBody = z.object({ alphabeticCode: z.enum(["AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BOV", "BRL", "BSD", "BTN", "BWP", "BYN", "BZD", "CAD", "CDF", "CHE", "CHF", "CHW", "CLF", "CLP", "CNY", "COP", "COU", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRU", "MUR", "MVR", "MWK", "MXN", "MXV", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STN", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "USN", "UYI", "UYU", "UYW", "UZS", "VES", "VND", "VUV", "WST", "XAF", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XDR", "XOF", "XPD", "XPF", "XPT", "XSU", "XTS", "XUA", "XXX", "YER", "ZAR", "ZMW", "ZWL"]), prefix: z.string().optional(), suffix: z.string().optional(), decimal: z.number().int().optional(), unitPriceAndCalculationsDecimal: z.number().int().optional(), enableUseOfMinorCurrencyUnit: z.boolean().optional(), minorUnitSign: z.string().optional() }); // GET /public-api/resources/currency-rates/v1.0 // POST /public-api/resources/currency-rates/v1.0 export const createCurrencyRateBody = z.object({ base: z.string(), target: z.string(), rate: z.number() }); // GET /public-api/resources/currency-rates/v1.0/{currencyRate} // DELETE /public-api/resources/currency-rates/v1.0/{currencyRate} // PATCH /public-api/resources/currency-rates/v1.0/{currencyRate} export const updateCurrencyRateBody = z.object({ rate: z.number() }); // GET /public-api/resources/custom-fees/v2.0 // GET /public-api/resources/custom-fees/v2.0/{customFee} // GET /public-api/resources/downtime-period-notices/v1.0 // POST /public-api/resources/downtime-period-notices/v1.0 export const postDowntimePeriodNoticeBody = z.object({ operatorId: z.number().int().optional(), type: z.enum(["downtime", "exempt"]), notice: z.string(), description: z.string().optional() }); // GET /public-api/resources/downtime-period-notices/v1.0/{notice} // DELETE /public-api/resources/downtime-period-notices/v1.0/{notice} // PATCH /public-api/resources/downtime-period-notices/v1.0/{notice} export const patchDowntimePeriodNoticeBody = z.object({ type: z.enum(["downtime", "exempt"]).optional(), notice: z.string().optional(), description: z.string().optional() }); // GET /public-api/resources/electricity-meters/v1.0 // POST /public-api/resources/electricity-meters/v1.0 export const electricityMeterCreateBody = z.object({ operatorId: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), integrationParameters: z.record(z.string()).optional() }); // GET /public-api/resources/electricity-meters/v1.0/{electricityMeter} // DELETE /public-api/resources/electricity-meters/v1.0/{electricityMeter} // PATCH /public-api/resources/electricity-meters/v1.0/{electricityMeter} export const electricityMeterUpdateBody = z.object({ name: z.string().optional(), integrationId: z.number().int().optional(), integrationParameters: z.record(z.string()).optional() }); // GET /public-api/resources/electricity-rates/v1.0 // POST /public-api/resources/electricity-rates/v1.0 export const electricityRateCreateDeprecatedBody = z.object({ id: z.number().int(), name: z.string(), utilityId: z.number().int().optional(), pricingGranularityInMinutes: z.union([z.literal(60), z.literal(30), z.literal(15)]), defaultPricePerKwh: z.number(), taxId: z.number().int().optional(), taxPercentage: z.number().min(0).max(100).optional(), intervalPricing: z.array(z.object({ weekDays: z.array(z.enum(["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"])), elements: z.array(z.object({ startAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), endAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), price: z.number().optional() })).optional() })).optional(), intervalSpecialPricing: z.array(z.object({ specialPricingName: z.string(), validOn: z.array(z.string()), elements: z.array(z.object({ startAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), endAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), price: z.number().optional() })).optional() })).optional() }); // GET /public-api/resources/electricity-rates/v1.0/{electricityRate} // PUT /public-api/resources/electricity-rates/v1.0/{electricityRate} export const electricityRateUpdateDeprecatedBody = z.object({ id: z.number().int(), name: z.string(), utilityId: z.number().int().optional(), pricingGranularityInMinutes: z.union([z.literal(60), z.literal(30), z.literal(15)]), defaultPricePerKwh: z.number(), taxId: z.number().int().optional(), taxPercentage: z.number().min(0).max(100).optional(), intervalPricing: z.array(z.object({ weekDays: z.array(z.enum(["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"])), elements: z.array(z.object({ startAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), endAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), price: z.number().optional() })).optional() })).optional(), intervalSpecialPricing: z.array(z.object({ specialPricingName: z.string(), validOn: z.array(z.string()), elements: z.array(z.object({ startAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), endAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}:\\d{2}$")), price: z.number().optional() })).optional() })).optional() }); // DELETE /public-api/resources/electricity-rates/v1.0/{electricityRate} // GET /public-api/resources/electricity-rates/v2.0 // POST /public-api/resources/electricity-rates/v2.0 export const electricityRateCreateBody = z.object({ operatorId: z.number().int().optional(), name: z.string(), utilityId: z.number().int().optional(), defaultPrice: z.number(), taxPercentage: z.number().min(0).max(100) }); // GET /public-api/resources/electricity-rates/v2.0/{electricityRate} // DELETE /public-api/resources/electricity-rates/v2.0/{electricityRate} // PATCH /public-api/resources/electricity-rates/v2.0/{electricityRate} export const electricityRateUpdateBody = z.object({ name: z.string().optional(), utilityId: z.number().int().optional(), defaultPrice: z.number().optional(), taxPercentage: z.number().min(0).max(100).optional() }); // GET /public-api/resources/electricity-rates/v2.0/{electricityRate}/energy-mix // PUT /public-api/resources/electricity-rates/v2.0/{electricityRate}/energy-mix export const electricityRateEnergyMixUpdateBody = z.object({ solar: z.number().min(0).max(100).optional(), wind: z.number().min(0).max(100).optional(), hydro: z.number().min(0).max(100).optional(), nuclear: z.number().min(0).max(100).optional(), coal: z.number().min(0).max(100).optional(), naturalGas: z.number().min(0).max(100).optional(), otherRenewable: z.number().min(0).max(100).optional(), otherNonRenewable: z.number().min(0).max(100).optional() }); // GET /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods // GET /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/date // GET /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/date/{date} // PUT /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/date/{date} export const electricityRatePricePeriodsDateCreateOrUpdateBody = z.object({ periods: z.array(z.object({ startsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), price: z.number() })) }); // DELETE /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/date/{date} // GET /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/week-day // GET /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/week-day/{weekDay} // PUT /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/week-day/{weekDay} export const electricityRatePricePeriodsWeekDayCreateaOrUpdateBody = z.object({ periods: z.array(z.object({ startsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), price: z.number() })) }); // DELETE /public-api/resources/electricity-rates/v2.0/{electricityRate}/price-periods/week-day/{weekDay} // GET /public-api/resources/energy-coupon-templates/v1.0 // POST /public-api/resources/energy-coupon-templates/v1.0 export const energyCouponTemplateCreateBody = z.object({ code: z.string().max(50), name: z.string().max(255), energyWh: z.number().int().min(1).max(4000000000), maxRedemptionCount: z.number().int().min(0).optional(), validityType: z.enum(["fixed_dates", "period"]), validityDurationDays: z.number().int().min(1).optional(), couponValidFrom: z.string().optional(), couponValidTo: z.string().optional(), templateValidFrom: z.string().optional(), templateValidTo: z.string().optional(), redemptionRules: z.object({ newUsersOnly: z.boolean().optional(), oncePerDevice: z.boolean().optional(), oncePerEmail: z.boolean().optional(), oncePerPhoneNumber: z.boolean().optional(), oncePerUser: z.boolean().optional() }).optional(), restrictions: z.object({ personalChargePointsOnly: z.boolean().optional(), evseType: z.enum(["ac", "dc", "any"]).optional(), countryRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), countries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional() }).optional(), partnerRestriction: z.object({ type: z.enum(["none", "allow", "deny", "exclude_roaming"]), partnerIds: z.array(z.number().int()).optional() }).optional(), locationRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), locationIds: z.array(z.number().int()).optional() }).optional(), locationTagRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), locationTagNames: z.array(z.string()).optional() }).optional(), userGroupRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), userGroupIds: z.array(z.number().int()).optional() }).optional(), minSessionEnergyWh: z.number().int().min(0).optional(), maxSessionEnergyWh: z.number().int().min(0).optional() }).optional(), externalId: z.string().max(255).optional(), tags: z.array(z.string()).optional(), operatorId: z.number().int().optional() }); // GET /public-api/resources/energy-coupon-templates/v1.0/{energyCouponTemplate} // PATCH /public-api/resources/energy-coupon-templates/v1.0/{energyCouponTemplate} export const energyCouponTemplateUpdateBody = z.object({ name: z.string().max(255).optional(), maxRedemptionCount: z.number().int().min(0).optional(), templateValidTo: z.string().optional(), redemptionRules: z.object({ newUsersOnly: z.boolean().optional(), oncePerDevice: z.boolean().optional(), oncePerEmail: z.boolean().optional(), oncePerPhoneNumber: z.boolean().optional(), oncePerUser: z.boolean().optional() }).optional(), restrictions: z.object({ personalChargePointsOnly: z.boolean().optional(), evseType: z.enum(["ac", "dc", "any"]).optional(), countryRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), countries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional() }).optional(), partnerRestriction: z.object({ type: z.enum(["none", "allow", "deny", "exclude_roaming"]), partnerIds: z.array(z.number().int()).optional() }).optional(), locationRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), locationIds: z.array(z.number().int()).optional() }).optional(), locationTagRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), locationTagNames: z.array(z.string()).optional() }).optional(), userGroupRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), userGroupIds: z.array(z.number().int()).optional() }).optional(), minSessionEnergyWh: z.number().int().min(0).optional(), maxSessionEnergyWh: z.number().int().min(0).optional() }).optional(), tags: z.array(z.string()).optional() }); // GET /public-api/resources/energy-coupons/v1.0 // POST /public-api/resources/energy-coupons/v1.0 export const energyCouponCreateBody = z.object({ userId: z.number().int().optional(), operatorId: z.number().int().optional(), energyWh: z.number().int().min(1).max(4000000000), type: z.enum(["support_grant", "manual_single"]), evseType: z.enum(["ac", "dc", "any"]).optional(), validFrom: z.string().optional(), validTo: z.string().optional(), externalId: z.string().max(255).optional(), restrictions: z.object({ personalChargePointsOnly: z.boolean().optional(), evseType: z.enum(["ac", "dc", "any"]).optional(), countryRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), countries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional() }).optional(), partnerRestriction: z.object({ type: z.enum(["none", "allow", "deny", "exclude_roaming"]), partnerIds: z.array(z.number().int()).optional() }).optional(), locationRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), locationIds: z.array(z.number().int()).optional() }).optional(), locationTagRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), locationTagNames: z.array(z.string()).optional() }).optional(), userGroupRestriction: z.object({ type: z.enum(["none", "allow", "deny"]), userGroupIds: z.array(z.number().int()).optional() }).optional(), minSessionEnergyWh: z.number().int().min(0).optional(), maxSessionEnergyWh: z.number().int().min(0).optional() }).optional() }); // GET /public-api/resources/energy-coupons/v1.0/{energyCoupon} // GET /public-api/resources/energy-coupons/v1.0/{energyCoupon}/energy-coupon-session-consumptions // GET /public-api/resources/evse-downtime-periods/v1.0 // POST /public-api/resources/evse-downtime-periods/v1.0 export const evseDowntimePeriodCreateBody = z.object({ evseId: z.number().int(), noticeId: z.number().int(), startedAt: z.string().datetime(), endedAt: z.string().datetime() }); // GET /public-api/resources/evse-downtime-periods/v1.0/{evseDowntimePeriod} // DELETE /public-api/resources/evse-downtime-periods/v1.0/{evseDowntimePeriod} // PATCH /public-api/resources/evse-downtime-periods/v1.0/{evseDowntimePeriod} export const evseDowntimePeriodUpdateBody = z.object({ noticeId: z.number().int().optional(), startedAt: z.string().datetime().optional(), endedAt: z.string().datetime().optional() }); // GET /public-api/resources/evse-downtime-periods/v1.0/{evseDowntimePeriod}/status-log // GET /public-api/resources/evses/v2.0 // GET /public-api/resources/evses/v2.0/{evse} // PUT /public-api/resources/evses/v2.0/{evse} export const evseUpdateDeprecatedBody = z.object({ id: z.number().int().optional(), chargePointId: z.number().int().optional(), chargingProfile: z.object({ id: z.number().int().optional(), minChargingRate: z.number().optional(), schedulePeriods: z.array(z.object({ startPeriod: z.number().int().optional(), limit: z.number().optional(), numberPhases: z.number().int().optional() })).optional(), scheduleStart: z.string().optional(), chargingRateUnit: z.enum(["A", "W"]).optional(), stackLevel: z.number().int().optional(), chargingProfileKind: z.enum(["Absolute", "Recurring", "Relative"]).optional(), recurrencyKind: z.enum(["daily", "weekly"]).optional(), chargingCompleteAt: z.string().optional(), purpose: z.enum(["ChargePointMaxProfile", "TxDefaultProfile", "TxProfile"]).optional(), validTo: z.string().optional(), validFrom: z.string().optional(), duration: z.number().int().optional() }).optional(), roaming: z.object({ evseId: z.string().optional(), status: z.enum(["available", "blocked", "charging", "inoperative", "outoforder", "planned", "removed", "reserved", "unknown"]).optional(), tariffIds: z.array(z.string()).optional() }).optional(), connectors: z.array(z.object({ id: z.number().int().optional(), type: z.intersection(z.enum(["type1", "type2", "type3", "chademo", "ccs1", "ccs2", "catarc", "schuko", "nacs", "cee16", "cee32", "j1772", "inductive", "nema-5-20", "type-e-french", "type-g-british", "type-j-swiss", "avcon", "chaoji", "nema-6-30", "nema-6-50", "mcs", "unknown"]), z.string()).optional(), format: z.enum(["socket", "cable"]).optional(), status: z.enum(["active", "disabled"]).optional(), ocpiMaxVoltage: z.number().int().optional(), ocpiMaxAmperage: z.number().int().optional(), ocpiMaxElectricPower: z.number().int().optional() })).optional(), physicalReference: z.string(), type: z.enum(["ac", "dc"]), networkId: z.string(), status: z.enum(["active", "disabled", "out of order"]), tariffGroupId: z.number().int().optional(), allowsReservation: z.boolean(), maxPowerKw: z.number().optional(), maxVoltage: z.intersection(z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]), z.unknown()), maxAmperage: z.number().optional(), phases: z.enum(["single_phase", "three_phase"]), phaseRotation: z.enum(["rst", "rts", "srt", "str", "trs", "tsr"]).optional(), midMeterCertificationEndYear: z.number().int().optional(), externalId: z.string().optional(), notes: z.array(z.object({ id: z.number().int(), summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean(), createdByAdminId: z.number().int().optional(), updatedByAdminId: z.number().int().optional(), createdAt: z.string().datetime(), updatedAt: z.string().datetime() })).optional(), hardwareStatus: z.enum(["available", "preparing", "charging", "suspendedEV", "suspendedEVSE", "finishing", "reserved", "unavailable", "faulted", "occupied"]).optional() }); // GET /public-api/resources/evses/v2.0/{evse}/hardware-status-logs // GET /public-api/resources/evses/v2.0/{evse}/latest-hardware-status-log // GET /public-api/resources/evses/v2.0/{evse}/notes // POST /public-api/resources/evses/v2.0/{evse}/notes export const evseNoteCreateBody = z.object({ summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/evses/v2.0/{evse}/notes/{note} // DELETE /public-api/resources/evses/v2.0/{evse}/notes/{note} // PATCH /public-api/resources/evses/v2.0/{evse}/notes/{note} export const evseNoteUpdateBody = z.object({ summary: z.string().max(255).optional(), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/evses/v2.1 // POST /public-api/resources/evses/v2.1 export const evseCreateBody = z.object({ chargePointId: z.number().int(), physicalReference: z.string(), currentType: z.enum(["ac", "dc"]), label: z.string().optional(), networkId: z.string(), status: z.enum(["enabled", "disabled", "out of order"]), midMeterCertificationEndYear: z.number().int().optional(), tariffGroupId: z.number().int().optional(), allowsReservation: z.boolean().optional(), bookingEnabled: z.boolean().optional(), monitoringEnabled: z.boolean().optional(), powerOptions: z.object({ maxOutputVoltage: z.number().int().min(1).max(1000).optional(), maxPower: z.number().int().optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]).optional(), maxAmperage: z.number().optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]).optional(), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]).optional(), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional() }).optional(), externalId: z.string().optional(), capabilityOverrides: z.object({ rfidReader: z.enum(["auto", "force_enable", "force_disable"]).optional(), creditCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), contactlessCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), debitCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chipCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), pedTerminal: z.enum(["auto", "force_enable", "force_disable"]).optional(), remoteStartStop: z.enum(["auto", "force_enable", "force_disable"]).optional(), unlockCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), reservable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingProfileCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingPreferencesCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), startSessionConnectorRequired: z.enum(["auto", "force_enable", "force_disable"]).optional(), tokenGroupCapable: z.enum(["auto", "force_enable", "force_disable"]).optional() }).optional() }); // GET /public-api/resources/evses/v2.1/{evse} // DELETE /public-api/resources/evses/v2.1/{evse} // PATCH /public-api/resources/evses/v2.1/{evse} export const evseUpdateBody = z.object({ physicalReference: z.string().optional(), currentType: z.enum(["ac", "dc"]).optional(), label: z.string().optional(), networkId: z.string().optional(), status: z.enum(["enabled", "disabled", "out of order"]).optional(), midMeterCertificationEndYear: z.number().int().optional(), tariffGroupId: z.number().int().optional(), allowsReservation: z.boolean().optional(), bookingEnabled: z.boolean().optional(), monitoringEnabled: z.boolean().optional(), powerOptions: z.object({ maxOutputVoltage: z.number().int().min(1).max(1000).optional(), maxPower: z.number().int().optional(), maxVoltage: z.enum(["230", "380", "400", "480", "120", "208", "240", "110-130", "220-240", "277"]).optional(), maxAmperage: z.number().optional(), phases: z.enum(["single_phase", "three_phase", "split_phase"]).optional(), phaseRotation: z.enum(["RST", "RTS", "SRT", "STR", "TRS", "TSR"]).optional(), connectedPhase: z.enum(["L1", "L2", "L3", "L1_L2", "L1_L3", "L2_L3"]).optional() }).optional(), externalId: z.string().optional(), capabilityOverrides: z.object({ rfidReader: z.enum(["auto", "force_enable", "force_disable"]).optional(), creditCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), contactlessCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), debitCardPayable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chipCardSupport: z.enum(["auto", "force_enable", "force_disable"]).optional(), pedTerminal: z.enum(["auto", "force_enable", "force_disable"]).optional(), remoteStartStop: z.enum(["auto", "force_enable", "force_disable"]).optional(), unlockCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), reservable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingProfileCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), chargingPreferencesCapable: z.enum(["auto", "force_enable", "force_disable"]).optional(), startSessionConnectorRequired: z.enum(["auto", "force_enable", "force_disable"]).optional(), tokenGroupCapable: z.enum(["auto", "force_enable", "force_disable"]).optional() }).optional() }); // GET /public-api/resources/faqs/v2.0 // POST /public-api/resources/faqs/v2.0 export const faqCreateBody = z.object({ operatorId: z.number().int().optional(), question: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), answer: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) }); // GET /public-api/resources/faqs/v2.0/{faq} // DELETE /public-api/resources/faqs/v2.0/{faq} // PATCH /public-api/resources/faqs/v2.0/{faq} export const faqUpdateBody = z.object({ question: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), answer: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional() }); // GET /public-api/resources/firmware-versions/v1.0 // GET /public-api/resources/firmware-versions/v1.0/{firmwareVersion} // GET /public-api/resources/firmware-versions/v1.0/{firmwareVersion}/attached-models // GET /public-api/resources/flexibility-activation-requests/v1.0 // GET /public-api/resources/flexibility-activation-requests/v1.0/{flexibilityActivationRequest} // GET /public-api/resources/flexibility-assets/v1.0 // POST /public-api/resources/flexibility-assets/v1.0 export const createFlexibilityAssetBody = z.object({ id: z.number().optional(), operatorId: z.number().int().optional(), dlmCircuitId: z.number(), description: z.string().optional(), downwardRegulationLimit: z.number().int().optional(), upwardRegulationLimit: z.number().int().optional(), integrationId: z.number(), integrationParameters: z.record(z.unknown()).optional(), status: z.enum(["enabled", "disabled"]), endsAt: z.string().datetime().optional() }); // GET /public-api/resources/flexibility-assets/v1.0/{flexibilityAsset} // DELETE /public-api/resources/flexibility-assets/v1.0/{flexibilityAsset} // PATCH /public-api/resources/flexibility-assets/v1.0/{flexibilityAsset} export const updateFlexibilityAssetBody = z.object({ id: z.number().optional(), dlmCircuitId: z.number().optional(), description: z.string().optional(), downwardRegulationLimit: z.number().int().optional(), upwardRegulationLimit: z.number().int().optional(), integrationId: z.number().optional(), integrationParameters: z.record(z.unknown()).optional(), status: z.enum(["enabled", "disabled"]).optional(), endsAt: z.string().datetime().optional() }); // GET /public-api/resources/flexibility-assets/v1.0/{flexibilityAsset}/historical-time-series // GET /public-api/resources/flexibility-assets/v1.0/{flexibilityAsset}/time-series-forecast // GET /public-api/resources/id-tags/v2.0 // POST /public-api/resources/id-tags/v2.0 export const idTagCreateBody = z.object({ operatorId: z.number().int().optional(), id: z.number().int().optional(), idTagUid: z.string().max(255), idLabel: z.string().optional(), expireAt: z.string().datetime().optional(), createdAt: z.string().datetime().optional(), status: z.enum(["enabled", "disabled", "suspended"]), type: z.enum(["rfid", "mac_address"]), rfidStandard: z.enum(["iso14443", "iso15693"]).optional(), vehicleType: z.union([z.null(), z.literal("company_car"), z.literal("private_car")]).optional(), isHomeChargingOnly: z.boolean().optional(), paymentMethodId: z.string().optional(), defaultPaymentOption: z.string().optional(), userId: z.number().int().optional(), externalId: z.string().optional(), partnerId: z.number().int().optional(), vehicleId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/id-tags/v2.0/{idTag} // DELETE /public-api/resources/id-tags/v2.0/{idTag} // PATCH /public-api/resources/id-tags/v2.0/{idTag} export const idTagUpdateBody = z.object({ id: z.number().int().optional(), idTagUid: z.string().max(255).optional(), idLabel: z.string().optional(), userLabel: z.string().optional(), expireAt: z.string().datetime().optional(), createdAt: z.string().datetime().optional(), status: z.enum(["enabled", "disabled", "suspended"]).optional(), type: z.enum(["rfid", "mac_address"]).optional(), rfidStandard: z.enum(["iso14443", "iso15693"]).optional(), vehicleType: z.union([z.null(), z.literal("company_car"), z.literal("private_car")]).optional(), isHomeChargingOnly: z.boolean().optional(), paymentMethodId: z.string().optional(), defaultPaymentOption: z.string().optional(), userId: z.number().int().optional(), externalId: z.string().optional(), partnerId: z.number().int().optional(), vehicleId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/id-tags/v2.0/{idTag}/notes // POST /public-api/resources/id-tags/v2.0/{idTag}/notes export const idTagNoteCreateBody = z.object({ summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/id-tags/v2.0/{idTag}/notes/{note} // DELETE /public-api/resources/id-tags/v2.0/{idTag}/notes/{note} // PATCH /public-api/resources/id-tags/v2.0/{idTag}/notes/{note} export const idTagNoteUpdateBody = z.object({ summary: z.string().max(255).optional(), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/installation-and-maintenance-companies/v1.0 // POST /public-api/resources/installation-and-maintenance-companies/v1.0 export const createInstallationAndMaintenanceCompanyBody = z.object({ operatorId: z.number().int().optional(), businessName: z.string().max(255), integrationId: z.number().int().optional(), externalId: z.string().max(255).optional(), companyName: z.string().max(255).optional(), countryCode: z.union([z.literal("AF"), z.literal("AX"), z.literal("AL"), z.literal("DZ"), z.literal("AS"), z.literal("AD"), z.literal("AO"), z.literal("AI"), z.literal("AQ"), z.literal("AG"), z.literal("AR"), z.literal("AM"), z.literal("AW"), z.literal("AU"), z.literal("AT"), z.literal("AZ"), z.literal("BS"), z.literal("BH"), z.literal("BD"), z.literal("BB"), z.literal("BY"), z.literal("BE"), z.literal("BZ"), z.literal("BJ"), z.literal("BM"), z.literal("BT"), z.literal("BO"), z.literal("BQ"), z.literal("BA"), z.literal("BW"), z.literal("BV"), z.literal("BR"), z.literal("IO"), z.literal("BN"), z.literal("BG"), z.literal("BF"), z.literal("BI"), z.literal("KH"), z.literal("CM"), z.literal("CA"), z.literal("CV"), z.literal("KY"), z.literal("CF"), z.literal("TD"), z.literal("CL"), z.literal("CN"), z.literal("CX"), z.literal("CC"), z.literal("CO"), z.literal("KM"), z.literal("CG"), z.literal("CD"), z.literal("CK"), z.literal("CR"), z.literal("CI"), z.literal("HR"), z.literal("CU"), z.literal("CW"), z.literal("CY"), z.literal("CZ"), z.literal("DK"), z.literal("DJ"), z.literal("DM"), z.literal("DO"), z.literal("EC"), z.literal("EG"), z.literal("SV"), z.literal("GQ"), z.literal("ER"), z.literal("EE"), z.literal("ET"), z.literal("FK"), z.literal("FO"), z.literal("FJ"), z.literal("FI"), z.literal("FR"), z.literal("GF"), z.literal("PF"), z.literal("TF"), z.literal("GA"), z.literal("GM"), z.literal("GE"), z.literal("DE"), z.literal("GH"), z.literal("GI"), z.literal("GR"), z.literal("GL"), z.literal("GD"), z.literal("GP"), z.literal("GU"), z.literal("GT"), z.literal("GG"), z.literal("GN"), z.literal("GW"), z.literal("GY"), z.literal("HT"), z.literal("HM"), z.literal("VA"), z.literal("HN"), z.literal("HK"), z.literal("HU"), z.literal("IS"), z.literal("IN"), z.literal("ID"), z.literal("IR"), z.literal("IQ"), z.literal("IE"), z.literal("IM"), z.literal("IL"), z.literal("IT"), z.literal("JM"), z.literal("JP"), z.literal("JE"), z.literal("JO"), z.literal("KZ"), z.literal("KE"), z.literal("KI"), z.literal("KP"), z.literal("KR"), z.literal("XK"), z.literal("KW"), z.literal("KG"), z.literal("LA"), z.literal("LV"), z.literal("LB"), z.literal("LS"), z.literal("LR"), z.literal("LY"), z.literal("LI"), z.literal("LT"), z.literal("LU"), z.literal("MO"), z.literal("MK"), z.literal("MG"), z.literal("MW"), z.literal("MY"), z.literal("MV"), z.literal("ML"), z.literal("MT"), z.literal("MH"), z.literal("MQ"), z.literal("MR"), z.literal("MU"), z.literal("YT"), z.literal("MX"), z.literal("FM"), z.literal("MD"), z.literal("MC"), z.literal("MN"), z.literal("ME"), z.literal("MS"), z.literal("MA"), z.literal("MZ"), z.literal("MM"), z.literal("NA"), z.literal("NR"), z.literal("NP"), z.literal("NL"), z.literal("NC"), z.literal("NZ"), z.literal("NI"), z.literal("NE"), z.literal("NG"), z.literal("NU"), z.literal("NF"), z.literal("MP"), z.literal("NO"), z.literal("OM"), z.literal("PK"), z.literal("PW"), z.literal("PS"), z.literal("PA"), z.literal("PG"), z.literal("PY"), z.literal("PE"), z.literal("PH"), z.literal("PN"), z.literal("PL"), z.literal("PT"), z.literal("PR"), z.literal("QA"), z.literal("RE"), z.literal("RO"), z.literal("RU"), z.literal("RW"), z.literal("BL"), z.literal("SH"), z.literal("KN"), z.literal("LC"), z.literal("MF"), z.literal("PM"), z.literal("VC"), z.literal("WS"), z.literal("SM"), z.literal("ST"), z.literal("SA"), z.literal("SN"), z.literal("RS"), z.literal("SC"), z.literal("SL"), z.literal("SG"), z.literal("SX"), z.literal("SK"), z.literal("SI"), z.literal("SB"), z.literal("SO"), z.literal("ZA"), z.literal("GS"), z.literal("SS"), z.literal("ES"), z.literal("LK"), z.literal("SD"), z.literal("SR"), z.literal("SJ"), z.literal("SZ"), z.literal("SE"), z.literal("CH"), z.literal("SY"), z.literal("TW"), z.literal("TJ"), z.literal("TZ"), z.literal("TH"), z.literal("TL"), z.literal("TG"), z.literal("TK"), z.literal("TO"), z.literal("TT"), z.literal("TN"), z.literal("TR"), z.literal("TM"), z.literal("TC"), z.literal("TV"), z.literal("UG"), z.literal("UA"), z.literal("AE"), z.literal("GB"), z.literal("US"), z.literal("UM"), z.literal("UY"), z.literal("UZ"), z.literal("VU"), z.literal("VE"), z.literal("VN"), z.literal("VG"), z.literal("VI"), z.literal("WF"), z.literal("EH"), z.literal("YE"), z.literal("ZM"), z.literal("ZW"), z.null()]).optional(), city: z.string().max(255).optional(), region: z.string().max(255).optional(), address: z.string().max(255).optional(), postCode: z.string().max(255).optional(), contactPerson: z.string().max(255).optional(), email: z.string().email().max(255).optional(), phone: z.string().max(255).optional() }); // GET /public-api/resources/installation-and-maintenance-companies/v1.0/{imCompany} // DELETE /public-api/resources/installation-and-maintenance-companies/v1.0/{imCompany} // PATCH /public-api/resources/installation-and-maintenance-companies/v1.0/{imCompany} export const updateInstallationAndMaintenanceCompanyBody = z.object({ businessName: z.string().max(255).optional(), integrationId: z.number().int().optional(), externalId: z.string().max(255).optional(), companyName: z.string().max(255).optional(), countryCode: z.union([z.literal("AF"), z.literal("AX"), z.literal("AL"), z.literal("DZ"), z.literal("AS"), z.literal("AD"), z.literal("AO"), z.literal("AI"), z.literal("AQ"), z.literal("AG"), z.literal("AR"), z.literal("AM"), z.literal("AW"), z.literal("AU"), z.literal("AT"), z.literal("AZ"), z.literal("BS"), z.literal("BH"), z.literal("BD"), z.literal("BB"), z.literal("BY"), z.literal("BE"), z.literal("BZ"), z.literal("BJ"), z.literal("BM"), z.literal("BT"), z.literal("BO"), z.literal("BQ"), z.literal("BA"), z.literal("BW"), z.literal("BV"), z.literal("BR"), z.literal("IO"), z.literal("BN"), z.literal("BG"), z.literal("BF"), z.literal("BI"), z.literal("KH"), z.literal("CM"), z.literal("CA"), z.literal("CV"), z.literal("KY"), z.literal("CF"), z.literal("TD"), z.literal("CL"), z.literal("CN"), z.literal("CX"), z.literal("CC"), z.literal("CO"), z.literal("KM"), z.literal("CG"), z.literal("CD"), z.literal("CK"), z.literal("CR"), z.literal("CI"), z.literal("HR"), z.literal("CU"), z.literal("CW"), z.literal("CY"), z.literal("CZ"), z.literal("DK"), z.literal("DJ"), z.literal("DM"), z.literal("DO"), z.literal("EC"), z.literal("EG"), z.literal("SV"), z.literal("GQ"), z.literal("ER"), z.literal("EE"), z.literal("ET"), z.literal("FK"), z.literal("FO"), z.literal("FJ"), z.literal("FI"), z.literal("FR"), z.literal("GF"), z.literal("PF"), z.literal("TF"), z.literal("GA"), z.literal("GM"), z.literal("GE"), z.literal("DE"), z.literal("GH"), z.literal("GI"), z.literal("GR"), z.literal("GL"), z.literal("GD"), z.literal("GP"), z.literal("GU"), z.literal("GT"), z.literal("GG"), z.literal("GN"), z.literal("GW"), z.literal("GY"), z.literal("HT"), z.literal("HM"), z.literal("VA"), z.literal("HN"), z.literal("HK"), z.literal("HU"), z.literal("IS"), z.literal("IN"), z.literal("ID"), z.literal("IR"), z.literal("IQ"), z.literal("IE"), z.literal("IM"), z.literal("IL"), z.literal("IT"), z.literal("JM"), z.literal("JP"), z.literal("JE"), z.literal("JO"), z.literal("KZ"), z.literal("KE"), z.literal("KI"), z.literal("KP"), z.literal("KR"), z.literal("XK"), z.literal("KW"), z.literal("KG"), z.literal("LA"), z.literal("LV"), z.literal("LB"), z.literal("LS"), z.literal("LR"), z.literal("LY"), z.literal("LI"), z.literal("LT"), z.literal("LU"), z.literal("MO"), z.literal("MK"), z.literal("MG"), z.literal("MW"), z.literal("MY"), z.literal("MV"), z.literal("ML"), z.literal("MT"), z.literal("MH"), z.literal("MQ"), z.literal("MR"), z.literal("MU"), z.literal("YT"), z.literal("MX"), z.literal("FM"), z.literal("MD"), z.literal("MC"), z.literal("MN"), z.literal("ME"), z.literal("MS"), z.literal("MA"), z.literal("MZ"), z.literal("MM"), z.literal("NA"), z.literal("NR"), z.literal("NP"), z.literal("NL"), z.literal("NC"), z.literal("NZ"), z.literal("NI"), z.literal("NE"), z.literal("NG"), z.literal("NU"), z.literal("NF"), z.literal("MP"), z.literal("NO"), z.literal("OM"), z.literal("PK"), z.literal("PW"), z.literal("PS"), z.literal("PA"), z.literal("PG"), z.literal("PY"), z.literal("PE"), z.literal("PH"), z.literal("PN"), z.literal("PL"), z.literal("PT"), z.literal("PR"), z.literal("QA"), z.literal("RE"), z.literal("RO"), z.literal("RU"), z.literal("RW"), z.literal("BL"), z.literal("SH"), z.literal("KN"), z.literal("LC"), z.literal("MF"), z.literal("PM"), z.literal("VC"), z.literal("WS"), z.literal("SM"), z.literal("ST"), z.literal("SA"), z.literal("SN"), z.literal("RS"), z.literal("SC"), z.literal("SL"), z.literal("SG"), z.literal("SX"), z.literal("SK"), z.literal("SI"), z.literal("SB"), z.literal("SO"), z.literal("ZA"), z.literal("GS"), z.literal("SS"), z.literal("ES"), z.literal("LK"), z.literal("SD"), z.literal("SR"), z.literal("SJ"), z.literal("SZ"), z.literal("SE"), z.literal("CH"), z.literal("SY"), z.literal("TW"), z.literal("TJ"), z.literal("TZ"), z.literal("TH"), z.literal("TL"), z.literal("TG"), z.literal("TK"), z.literal("TO"), z.literal("TT"), z.literal("TN"), z.literal("TR"), z.literal("TM"), z.literal("TC"), z.literal("TV"), z.literal("UG"), z.literal("UA"), z.literal("AE"), z.literal("GB"), z.literal("US"), z.literal("UM"), z.literal("UY"), z.literal("UZ"), z.literal("VU"), z.literal("VE"), z.literal("VN"), z.literal("VG"), z.literal("VI"), z.literal("WF"), z.literal("EH"), z.literal("YE"), z.literal("ZM"), z.literal("ZW"), z.null()]).optional(), city: z.string().max(255).optional(), region: z.string().max(255).optional(), address: z.string().max(255).optional(), postCode: z.string().max(255).optional(), contactPerson: z.string().max(255).optional(), email: z.string().email().max(255).optional(), phone: z.string().max(255).optional() }); // GET /public-api/resources/installer-jobs/v1.0 // POST /public-api/resources/installer-jobs/v1.0 export const createInstallerJobBody = z.object({ installationAndMaintenanceCompanyId: z.number().int(), installerAdminId: z.number().int().optional(), pin: z.string().min(4).max(12).optional(), description: z.string() }); // GET /public-api/resources/installer-jobs/v1.0/{installerJob} // DELETE /public-api/resources/installer-jobs/v1.0/{installerJob} // PATCH /public-api/resources/installer-jobs/v1.0/{installerJob} export const updateInstallerJobBody = z.object({ installerAdminId: z.number().int().optional(), pin: z.string().min(4).max(12).optional(), description: z.string().optional() }); // GET /public-api/resources/invoices/v1.0 // GET /public-api/resources/invoices/v1.0/{invoice} // GET /public-api/resources/invoices/v1.0/{invoice}/fiscalization-attempts // GET /public-api/resources/invoices/v1.0/{invoice}/fiscalization-documents/download // GET /public-api/resources/issues/v1.0 // POST /public-api/resources/issues/v1.0 export const issuesCreateBody = z.object({ operatorId: z.number().int().optional(), title: z.string().max(255), description: z.string(), category: z.enum(["network", "payments_billing", "product_offerings", "ev_driver_ux", "security", "reporting", "roaming", "other"]), severity: z.enum(["severe", "significant", "moderate", "low"]), priority: z.enum(["highest", "high", "medium", "low"]), status: z.enum(["auto_recovery_in_progress", "information_collection_in_progress", "new", "investigating", "resolution_in_progress", "resolved", "wont_fix", "non_issue"]).optional(), externalId: z.string().max(255).optional(), assigneeAdminId: z.number().int().optional(), keyResource: z.object({ resourceType: z.enum(["charge-point", "location", "evse", "session"]), id: z.number().int() }).optional() }); // GET /public-api/resources/issues/v1.0/{issue} // DELETE /public-api/resources/issues/v1.0/{issue} // PATCH /public-api/resources/issues/v1.0/{issue} export const issueUpdateBody = z.object({ title: z.string().max(255).optional(), description: z.string().optional(), status: z.enum(["auto_recovery_in_progress", "information_collection_in_progress", "new", "investigating", "resolution_in_progress", "resolved", "wont_fix", "non_issue"]).optional(), category: z.enum(["network", "payments_billing", "product_offerings", "ev_driver_ux", "security", "reporting", "roaming", "other"]).optional(), severity: z.enum(["severe", "significant", "moderate", "low"]).optional(), priority: z.enum(["highest", "high", "medium", "low"]).optional(), externalId: z.string().max(255).optional(), assigneeAdminId: z.number().int().optional(), resolutionDetails: z.string().optional() }); // GET /public-api/resources/locations/v1.0 // POST /public-api/resources/locations/v1.0 export const locationCreateDeprecatedBody = z.object({ id: z.number().int().optional(), public_charge_points: z.number().int().optional(), public_charge_points_ids: z.array(z.number().int()).optional(), name: z.record(z.string()), status: z.enum(["active", "disabled"]).optional(), description: z.record(z.string()).optional(), detailed_description: z.record(z.string()).optional(), additional_description: z.record(z.string()).optional(), geoposition: z.object({ latitude: z.number().min(-90).max(90), longitude: z.number().min(-180).max(180) }), address: z.record(z.string()).optional(), post_code: z.string(), region: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.string()]), city: z.string(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]), external_id: z.string().optional(), timezone: z.string().optional(), location_image: z.object({ original: z.string(), thumbnail: z.string().optional(), mimeType: z.string(), category: z.enum(["charger", "entrance", "location", "network", "operator", "other", "owner"]).optional() }).optional(), images: z.array(z.object({ original: z.string(), thumbnail: z.string().optional(), mimeType: z.string(), category: z.enum(["charger", "entrance", "location", "network", "operator", "other", "owner"]).optional() })).optional(), working_hours: z.object({ is_always_open: z.boolean(), stop_session_outside_working_hours: z.boolean().optional(), hours: z.object({ monday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), tuesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), wednesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), thursday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), friday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), saturday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), sunday: z.array(z.object({ start: z.string(), end: z.string() })).optional() }).optional(), always_open_for_user_group_ids: z.array(z.number()).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/locations/v1.0/{location} // DELETE /public-api/resources/locations/v1.0/{location} // PATCH /public-api/resources/locations/v1.0/{location} export const locationUpdateDeprecatedBody = z.object({ id: z.number().int().optional(), public_charge_points: z.number().int().optional(), public_charge_points_ids: z.array(z.number().int()).optional(), name: z.record(z.string()).optional(), status: z.enum(["active", "disabled"]).optional(), description: z.record(z.string()).optional(), detailed_description: z.record(z.string()).optional(), additional_description: z.record(z.string()).optional(), geoposition: z.object({ latitude: z.number().min(-90).max(90), longitude: z.number().min(-180).max(180) }).optional(), address: z.record(z.string()).optional(), post_code: z.string().optional(), region: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.string()]).optional(), city: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), external_id: z.string().optional(), timezone: z.string().optional(), location_image: z.object({ original: z.string(), thumbnail: z.string().optional(), mimeType: z.string(), category: z.enum(["charger", "entrance", "location", "network", "operator", "other", "owner"]).optional() }).optional(), images: z.array(z.object({ original: z.string(), thumbnail: z.string().optional(), mimeType: z.string(), category: z.enum(["charger", "entrance", "location", "network", "operator", "other", "owner"]).optional() })).optional(), working_hours: z.object({ is_always_open: z.boolean(), stop_session_outside_working_hours: z.boolean().optional(), hours: z.object({ monday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), tuesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), wednesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), thursday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), friday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), saturday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), sunday: z.array(z.object({ start: z.string(), end: z.string() })).optional() }).optional(), always_open_for_user_group_ids: z.array(z.number()).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/locations/v2.0 // POST /public-api/resources/locations/v2.0 export const locationCreateBody = z.object({ id: z.number().int().optional(), operatorId: z.number().int().optional(), externalId: z.string().optional(), name: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), status: z.enum(["enabled", "disabled"]).optional(), description: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), shortDescription: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), additionalDescription: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), geoposition: z.object({ latitude: z.number().min(-90).max(90), longitude: z.number().min(-180).max(180) }), address: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), streetAddress: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), city: z.string().optional(), region: z.string().optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]), postCode: z.string().optional(), timezone: z.string().optional(), parkingType: z.enum(["ALONG_MOTORWAY", "PARKING_GARAGE", "PARKING_LOT", "ON_DRIVEWAY", "ON_STREET", "UNDERGROUND_GARAGE", "IS_TENT", "SECURE"]).optional(), accessibilityType: z.enum(["free_publicly_accessible", "restricted_access", "paid_publicly_accessible"]).optional(), accessMethods: z.array(z.enum(["OPEN", "TOKEN", "LICENSE_PLATE", "ACCESS_CODE", "INTERCOM", "PARKING_TICKET"])).optional(), facilities: z.array(z.enum(["AIRPORT", "BATHROOM", "BIKE_SHARING", "BUS_STOP", "CAFE", "CARPOOL_PARKING", "FUEL_STATION", "HOTEL", "MALL", "METRO_STATION", "MUSEUM", "NATURE", "PARKING_LOT", "RECREATION_AREA", "RESTAURANT", "SPORT", "STAFFED", "SUPERMARKET", "TAXI_STAND", "TRAIN_STATION", "TRAM_STOP", "WIFI"])).optional(), paymentOptions: z.array(z.enum(["EMV_CHIP_TERMINAL", "NFC_CONTACTLESS_TERMINAL", "QR_CODE_PAYMENT", "WEB_PAYMENT", "CASH_PAYMENT"])).optional(), acceptedPaymentBrands: z.array(z.enum(["VISA", "MASTERCARD", "MAESTRO", "AMEX", "GIROCARD", "OTHER"])).optional(), workingHours: z.object({ isAlwaysOpen: z.boolean().optional(), allowChargingOutsideWorkingHours: z.boolean().optional(), stopSessionOutsideWorkingHours: z.boolean().optional(), alwaysOpenForUserGroupIds: z.array(z.number()).optional(), hours: z.object({ monday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), tuesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), wednesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), thursday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), friday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), saturday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), sunday: z.array(z.object({ start: z.string(), end: z.string() })).optional() }).optional() }).optional(), tags: z.array(z.string()).optional(), externalAppData: z.record(z.unknown()).optional() }); // GET /public-api/resources/locations/v2.0/{location} // DELETE /public-api/resources/locations/v2.0/{location} // PATCH /public-api/resources/locations/v2.0/{location} export const locationUpdateBody = z.object({ id: z.number().int().optional(), externalId: z.string().optional(), name: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), status: z.enum(["enabled", "disabled"]).optional(), description: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), shortDescription: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), additionalDescription: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), geoposition: z.object({ latitude: z.number().min(-90).max(90), longitude: z.number().min(-180).max(180) }).optional(), address: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), streetAddress: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), city: z.string().optional(), region: z.string().optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), postCode: z.string().optional(), timezone: z.string().optional(), parkingType: z.enum(["ALONG_MOTORWAY", "PARKING_GARAGE", "PARKING_LOT", "ON_DRIVEWAY", "ON_STREET", "UNDERGROUND_GARAGE", "IS_TENT", "SECURE"]).optional(), accessibilityType: z.enum(["free_publicly_accessible", "restricted_access", "paid_publicly_accessible"]).optional(), accessMethods: z.array(z.enum(["OPEN", "TOKEN", "LICENSE_PLATE", "ACCESS_CODE", "INTERCOM", "PARKING_TICKET"])).optional(), facilities: z.array(z.enum(["AIRPORT", "BATHROOM", "BIKE_SHARING", "BUS_STOP", "CAFE", "CARPOOL_PARKING", "FUEL_STATION", "HOTEL", "MALL", "METRO_STATION", "MUSEUM", "NATURE", "PARKING_LOT", "RECREATION_AREA", "RESTAURANT", "SPORT", "STAFFED", "SUPERMARKET", "TAXI_STAND", "TRAIN_STATION", "TRAM_STOP", "WIFI"])).optional(), workingHours: z.object({ isAlwaysOpen: z.boolean().optional(), allowChargingOutsideWorkingHours: z.boolean().optional(), stopSessionOutsideWorkingHours: z.boolean().optional(), alwaysOpenForUserGroupIds: z.array(z.number()).optional(), hours: z.object({ monday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), tuesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), wednesday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), thursday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), friday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), saturday: z.array(z.object({ start: z.string(), end: z.string() })).optional(), sunday: z.array(z.object({ start: z.string(), end: z.string() })).optional() }).optional() }).optional(), tags: z.array(z.string()).optional(), externalAppData: z.record(z.unknown()).optional() }); // GET /public-api/resources/locations/v2.0/{location}/charging-zones // POST /public-api/resources/locations/v2.0/{location}/charging-zones export const locationChargingZoneCreateBody = z.object({ id: z.number().int().optional(), name: z.string(), floorLevel: z.string().max(4).optional(), locationId: z.number().int().optional(), status: z.enum(["enabled", "disabled"]), additionalInfo: z.object({ enabled: z.boolean().optional(), title: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), description: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional() }).optional() }); // GET /public-api/resources/locations/v2.0/{location}/charging-zones/{chargingZone} // DELETE /public-api/resources/locations/v2.0/{location}/charging-zones/{chargingZone} // PATCH /public-api/resources/locations/v2.0/{location}/charging-zones/{chargingZone} export const locationChargingZoneUpdateBody = z.object({ id: z.number().int().optional(), name: z.string().optional(), floorLevel: z.string().max(4).optional(), locationId: z.number().int().optional(), status: z.enum(["enabled", "disabled"]).optional(), additionalInfo: z.object({ enabled: z.boolean().optional(), title: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), description: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional() }).optional() }); // GET /public-api/resources/locations/v2.0/{location}/notes // POST /public-api/resources/locations/v2.0/{location}/notes export const locationNoteCreateBody = z.object({ summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/locations/v2.0/{location}/notes/{note} // DELETE /public-api/resources/locations/v2.0/{location}/notes/{note} // PATCH /public-api/resources/locations/v2.0/{location}/notes/{note} export const locationNoteUpdateBody = z.object({ summary: z.string().max(255).optional(), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/operators/v1.0 // GET /public-api/resources/operators/v1.0/{operator} // GET /public-api/resources/parking-spaces/v1.0 // POST /public-api/resources/parking-spaces/v1.0 export const createParkingSpaceBody = z.object({ id: z.number().int().optional(), locationId: z.number().int(), label: z.string(), externalId: z.string().optional(), latitude: z.number().min(-90).max(90).optional(), longitude: z.number().min(-180).max(180).optional(), directions: z.string().max(1000).optional(), properties: z.object({ width: z.number().int().min(0).max(500).optional(), length: z.number().int().min(0).max(2000).optional(), driveThrough: z.boolean().optional(), refrigerationOutlet: z.boolean().optional(), parkingDirection: z.enum(["parallel", "perpendicular", "angle"]).optional(), roofed: z.boolean().optional(), lighting: z.boolean().optional() }).optional(), accessibility: z.object({ disabilitiesAccessible: z.boolean().optional(), kerbHeightCm: z.number().int().min(0).max(100).optional(), hearingLoop: z.boolean().optional(), tactilePaving: z.boolean().optional(), brailleSignage: z.boolean().optional(), visualSignage: z.boolean().optional(), audioAnnouncements: z.boolean().optional(), accessiblePaymentTerminal: z.boolean().optional() }).optional(), vehicleRestrictions: z.object({ maxWidth: z.number().int().min(0).optional(), maxLength: z.number().int().min(0).optional(), maxHeight: z.number().int().min(0).optional(), maxWeight: z.number().int().min(0).optional(), supportedVehicleTypes: z.array(z.enum(["twoAndThreeWheelVehiclesAndQuadricycles", "passengerVehicles", "passengerVehiclesWithTrailer", "lightDutyVans", "heavyDutyTractorUnitsWithoutTrailer", "heavyDutyTrucksWithoutArticulationPoint", "heavyDutyTrucksWithTrailerAttached", "busesOrMotorCoaches"])).optional(), restrictedToSpecificVehicleTypes: z.boolean().optional(), evOnly: z.boolean().optional(), whileChargingOnly: z.boolean().optional(), disabledPermitOnly: z.boolean().optional(), customersOnly: z.boolean().optional(), staffOnly: z.boolean().optional(), deliveriesOnly: z.boolean().optional(), permitRequired: z.boolean().optional(), taxisOnly: z.boolean().optional(), parkAndRide: z.boolean().optional(), dangerousGoodsAllowed: z.boolean().optional(), reservationRequired: z.boolean().optional(), timeLimit: z.number().int().min(0).optional() }).optional(), compliance: z.object({ standards: z.array(z.string().max(100)).optional(), apdsReference: z.string().max(255).optional() }).optional(), disabilitiesAccessible: z.boolean().optional(), evses: z.array(z.number().int()).optional(), status: z.enum(["enabled", "disabled"]).optional(), occupancyStatus: z.enum(["unknown", "available", "occupied", "blocked"]).optional() }); // GET /public-api/resources/parking-spaces/v1.0/{parkingSpace} // PUT /public-api/resources/parking-spaces/v1.0/{parkingSpace} export const updateParkingSpaceBody = z.object({ id: z.number().int().optional(), locationId: z.number().int(), label: z.string(), externalId: z.string().optional(), latitude: z.number().min(-90).max(90).optional(), longitude: z.number().min(-180).max(180).optional(), directions: z.string().max(1000).optional(), properties: z.object({ width: z.number().int().min(0).max(500).optional(), length: z.number().int().min(0).max(2000).optional(), driveThrough: z.boolean().optional(), refrigerationOutlet: z.boolean().optional(), parkingDirection: z.enum(["parallel", "perpendicular", "angle"]).optional(), roofed: z.boolean().optional(), lighting: z.boolean().optional() }).optional(), accessibility: z.object({ disabilitiesAccessible: z.boolean().optional(), kerbHeightCm: z.number().int().min(0).max(100).optional(), hearingLoop: z.boolean().optional(), tactilePaving: z.boolean().optional(), brailleSignage: z.boolean().optional(), visualSignage: z.boolean().optional(), audioAnnouncements: z.boolean().optional(), accessiblePaymentTerminal: z.boolean().optional() }).optional(), vehicleRestrictions: z.object({ maxWidth: z.number().int().min(0).optional(), maxLength: z.number().int().min(0).optional(), maxHeight: z.number().int().min(0).optional(), maxWeight: z.number().int().min(0).optional(), supportedVehicleTypes: z.array(z.enum(["twoAndThreeWheelVehiclesAndQuadricycles", "passengerVehicles", "passengerVehiclesWithTrailer", "lightDutyVans", "heavyDutyTractorUnitsWithoutTrailer", "heavyDutyTrucksWithoutArticulationPoint", "heavyDutyTrucksWithTrailerAttached", "busesOrMotorCoaches"])).optional(), restrictedToSpecificVehicleTypes: z.boolean().optional(), evOnly: z.boolean().optional(), whileChargingOnly: z.boolean().optional(), disabledPermitOnly: z.boolean().optional(), customersOnly: z.boolean().optional(), staffOnly: z.boolean().optional(), deliveriesOnly: z.boolean().optional(), permitRequired: z.boolean().optional(), taxisOnly: z.boolean().optional(), parkAndRide: z.boolean().optional(), dangerousGoodsAllowed: z.boolean().optional(), reservationRequired: z.boolean().optional(), timeLimit: z.number().int().min(0).optional() }).optional(), compliance: z.object({ standards: z.array(z.string().max(100)).optional(), apdsReference: z.string().max(255).optional() }).optional(), disabilitiesAccessible: z.boolean().optional(), evses: z.array(z.number().int()).optional(), status: z.enum(["enabled", "disabled"]).optional(), occupancyStatus: z.enum(["unknown", "available", "occupied", "blocked"]).optional() }); // DELETE /public-api/resources/parking-spaces/v1.0/{parkingSpace} // PATCH /public-api/resources/parking-spaces/v1.0/{parkingSpace} export const parkingSpaceUpdateBody = z.object({ id: z.number().int().optional(), locationId: z.number().int().optional(), label: z.string().optional(), externalId: z.string().optional(), latitude: z.number().min(-90).max(90).optional(), longitude: z.number().min(-180).max(180).optional(), directions: z.string().max(1000).optional(), properties: z.object({ width: z.number().int().min(0).max(500).optional(), length: z.number().int().min(0).max(2000).optional(), driveThrough: z.boolean().optional(), refrigerationOutlet: z.boolean().optional(), parkingDirection: z.enum(["parallel", "perpendicular", "angle"]).optional(), roofed: z.boolean().optional(), lighting: z.boolean().optional() }).optional(), accessibility: z.object({ disabilitiesAccessible: z.boolean().optional(), kerbHeightCm: z.number().int().min(0).max(100).optional(), hearingLoop: z.boolean().optional(), tactilePaving: z.boolean().optional(), brailleSignage: z.boolean().optional(), visualSignage: z.boolean().optional(), audioAnnouncements: z.boolean().optional(), accessiblePaymentTerminal: z.boolean().optional() }).optional(), vehicleRestrictions: z.object({ maxWidth: z.number().int().min(0).optional(), maxLength: z.number().int().min(0).optional(), maxHeight: z.number().int().min(0).optional(), maxWeight: z.number().int().min(0).optional(), supportedVehicleTypes: z.array(z.enum(["twoAndThreeWheelVehiclesAndQuadricycles", "passengerVehicles", "passengerVehiclesWithTrailer", "lightDutyVans", "heavyDutyTractorUnitsWithoutTrailer", "heavyDutyTrucksWithoutArticulationPoint", "heavyDutyTrucksWithTrailerAttached", "busesOrMotorCoaches"])).optional(), restrictedToSpecificVehicleTypes: z.boolean().optional(), evOnly: z.boolean().optional(), whileChargingOnly: z.boolean().optional(), disabledPermitOnly: z.boolean().optional(), customersOnly: z.boolean().optional(), staffOnly: z.boolean().optional(), deliveriesOnly: z.boolean().optional(), permitRequired: z.boolean().optional(), taxisOnly: z.boolean().optional(), parkAndRide: z.boolean().optional(), dangerousGoodsAllowed: z.boolean().optional(), reservationRequired: z.boolean().optional(), timeLimit: z.number().int().min(0).optional() }).optional(), compliance: z.object({ standards: z.array(z.string().max(100)).optional(), apdsReference: z.string().max(255).optional() }).optional(), disabilitiesAccessible: z.boolean().optional(), evses: z.array(z.number().int()).optional(), status: z.enum(["enabled", "disabled"]).optional(), occupancyStatus: z.enum(["unknown", "available", "occupied", "blocked"]).optional() }); // GET /public-api/resources/parking-spaces/v1.0/{parkingSpace}/evses // PUT /public-api/resources/parking-spaces/v1.0/{parkingSpace}/evses export const parkingSpacesEvsesSyncBody = z.array(z.object({ parkingSpaceId: z.number().int(), evseId: z.number().int(), position: z.enum(["front", "rear", "left", "right", "frontLeft", "frontRight", "rearLeft", "rearRight"]), isPrimary: z.boolean() })); // GET /public-api/resources/partner-contracts/v1.0 // POST /public-api/resources/partner-contracts/v1.0 export const partnerContractCreateBody = z.object({ title: z.string(), partnerId: z.number().int(), contractType: z.enum(["revenueSharing", "paymentFacilitation"]).optional(), startDate: z.string().datetime(), endDate: z.string().datetime().optional(), autoRenewal: z.boolean().optional(), externalId: z.string().max(255).optional(), accessAndPermissions: z.object({ sessionsRemoteControl: z.boolean().optional(), startReservation: z.boolean().optional(), stopReservation: z.boolean().optional(), resetChargePoint: z.boolean().optional(), firmwareUpdate: z.boolean().optional(), createFromTemplate: z.boolean().optional(), changeSystemStatus: z.boolean().optional() }).optional(), revenueSharing: z.object({ partnerSharePercentageAcEvse: z.number().min(0).max(100).optional(), partnerSharePercentageDcEvse: z.number().min(0).max(100).optional(), excludeConnectionFee: z.boolean().optional(), deductElectricityCost: z.boolean().optional(), reimburseForElectricityCost: z.boolean().optional(), fixedFeePerSessionAc: z.number().optional(), fixedFeePerSessionDc: z.number().optional(), feePerKwhAc: z.number().optional(), feePerKwhDc: z.number().optional(), handlingFee: z.number().min(0).max(100).optional() }).optional(), monthlyPlatformFees: z.object({ perChargePoint: z.number().optional(), perAcEvse: z.number().optional(), perDcEvse: z.number().optional() }).optional(), reimbursementFees: z.object({ perSession: z.number().min(0).optional(), perPeriod: z.number().min(0).optional() }).optional() }); // GET /public-api/resources/partner-contracts/v1.0/{partnerContract} // PUT /public-api/resources/partner-contracts/v1.0/{partnerContract} export const partnerContractUpdateBody = z.object({ title: z.string(), partnerId: z.number().int(), contractType: z.enum(["revenueSharing", "paymentFacilitation"]).optional(), startDate: z.string().datetime(), endDate: z.string().datetime().optional(), autoRenewal: z.boolean().optional(), externalId: z.string().max(255).optional(), accessAndPermissions: z.object({ sessionsRemoteControl: z.boolean().optional(), startReservation: z.boolean().optional(), stopReservation: z.boolean().optional(), resetChargePoint: z.boolean().optional(), firmwareUpdate: z.boolean().optional(), createFromTemplate: z.boolean().optional(), changeSystemStatus: z.boolean().optional() }).optional(), revenueSharing: z.object({ partnerSharePercentageAcEvse: z.number().min(0).max(100).optional(), partnerSharePercentageDcEvse: z.number().min(0).max(100).optional(), excludeConnectionFee: z.boolean().optional(), deductElectricityCost: z.boolean().optional(), reimburseForElectricityCost: z.boolean().optional(), fixedFeePerSessionAc: z.number().optional(), fixedFeePerSessionDc: z.number().optional(), feePerKwhAc: z.number().optional(), feePerKwhDc: z.number().optional(), handlingFee: z.number().min(0).max(100).optional() }).optional(), monthlyPlatformFees: z.object({ perChargePoint: z.number().optional(), perAcEvse: z.number().optional(), perDcEvse: z.number().optional() }).optional(), reimbursementFees: z.object({ perSession: z.number().min(0).optional(), perPeriod: z.number().min(0).optional() }).optional() }); // DELETE /public-api/resources/partner-contracts/v1.0/{partnerContract} // PATCH /public-api/resources/partner-contracts/v1.0/{partnerContract} export const partnerContractPatchBody = z.object({ title: z.string().optional(), contractType: z.enum(["revenueSharing", "paymentFacilitation"]).optional(), startDate: z.string().datetime().optional(), endDate: z.string().datetime().optional(), autoRenewal: z.boolean().optional(), externalId: z.string().max(255).optional(), accessAndPermissions: z.object({ sessionsRemoteControl: z.boolean().optional(), startReservation: z.boolean().optional(), stopReservation: z.boolean().optional(), resetChargePoint: z.boolean().optional(), firmwareUpdate: z.boolean().optional(), createFromTemplate: z.boolean().optional(), changeSystemStatus: z.boolean().optional() }).optional(), revenueSharing: z.object({ partnerSharePercentageAcEvse: z.number().min(0).max(100).optional(), partnerSharePercentageDcEvse: z.number().min(0).max(100).optional(), excludeConnectionFee: z.boolean().optional(), deductElectricityCost: z.boolean().optional(), reimburseForElectricityCost: z.boolean().optional(), fixedFeePerSessionAc: z.number().optional(), fixedFeePerSessionDc: z.number().optional(), feePerKwhAc: z.number().optional(), feePerKwhDc: z.number().optional(), handlingFee: z.number().min(0).max(100).optional() }).optional(), monthlyPlatformFees: z.object({ perChargePoint: z.number().optional(), perAcEvse: z.number().optional(), perDcEvse: z.number().optional() }).optional(), reimbursementFees: z.object({ perSession: z.number().min(0).optional(), perPeriod: z.number().min(0).optional() }).optional() }); // GET /public-api/resources/partner-contracts/v1.0/{partnerContract}/settlement-overrides // POST /public-api/resources/partner-contracts/v1.0/{partnerContract}/settlement-overrides export const partnerContractSettlementOverrideCreateBody = z.object({ name: z.string().max(255), priority: z.number().int().min(1).max(4294967295), restriction: z.object({ type: z.enum(["users_of_the_partner", "user_groups", "ad_hoc_users", "users_of_specific_partners"]), targetIds: z.array(z.number().int()).optional() }), acPercent: z.number().min(0).max(100).optional(), dcPercent: z.number().min(0).max(100).optional() }); // GET /public-api/resources/partner-contracts/v1.0/{partnerContract}/settlement-overrides/{settlementOverride} // DELETE /public-api/resources/partner-contracts/v1.0/{partnerContract}/settlement-overrides/{settlementOverride} // PATCH /public-api/resources/partner-contracts/v1.0/{partnerContract}/settlement-overrides/{settlementOverride} export const partnerContractSettlementOverrideUpdateBody = z.object({ name: z.string().max(255).optional(), priority: z.number().int().min(1).max(4294967295).optional(), restriction: z.object({ type: z.enum(["users_of_the_partner", "user_groups", "ad_hoc_users", "users_of_specific_partners"]), targetIds: z.array(z.number().int()).optional() }).optional(), acPercent: z.number().min(0).max(100).optional(), dcPercent: z.number().min(0).max(100).optional() }); // GET /public-api/resources/partner-expenses/v1.0 // GET /public-api/resources/partner-expenses/v1.1 // GET /public-api/resources/partner-expenses/v1.2 // GET /public-api/resources/partner-invite-access-policies/v1.0 // POST /public-api/resources/partner-invite-access-policies/v1.0 export const partnerInviteAccessPolicyCreateBody = z.object({ operatorId: z.number().int().optional(), name: z.string().max(255), partnerAccess: z.object({ type: z.enum(["none", "allow"]), partnerIds: z.array(z.number().int()).optional() }), restrictions: z.object({ locations: z.object({ type: z.enum(["none", "allow", "deny"]), locationIds: z.array(z.number().int()).optional() }).optional(), chargePoints: z.object({ type: z.enum(["none", "allow", "deny"]), chargePointIds: z.array(z.number().int()).optional() }).optional(), locationTags: z.object({ type: z.enum(["none", "allow", "deny"]), locationTagIds: z.array(z.number().int()).optional() }).optional(), chargePointTags: z.object({ type: z.enum(["none", "allow", "deny"]), chargePointTagIds: z.array(z.number().int()).optional() }).optional() }).optional(), includeSharedChargePoints: z.boolean().optional() }); // GET /public-api/resources/partner-invite-access-policies/v1.0/{partnerInviteAccessPolicy} // DELETE /public-api/resources/partner-invite-access-policies/v1.0/{partnerInviteAccessPolicy} // PATCH /public-api/resources/partner-invite-access-policies/v1.0/{partnerInviteAccessPolicy} export const partnerInviteAccessPolicyUpdateBody = z.object({ name: z.string().max(255).optional(), partnerAccess: z.object({ type: z.enum(["none", "allow"]), partnerIds: z.array(z.number().int()).optional() }).optional(), restrictions: z.object({ locations: z.object({ type: z.enum(["none", "allow", "deny"]), locationIds: z.array(z.number().int()).optional() }).optional(), chargePoints: z.object({ type: z.unknown(), chargePointIds: z.array(z.number().int()).optional() }).optional(), locationTags: z.object({ type: z.unknown(), locationTagIds: z.array(z.number().int()).optional() }).optional(), chargePointTags: z.object({ type: z.unknown(), chargePointTagIds: z.array(z.number().int()).optional() }).optional() }).optional(), includeSharedChargePoints: z.boolean().optional() }); // GET /public-api/resources/partner-invite-corporate-billing-policies/v1.0 // POST /public-api/resources/partner-invite-corporate-billing-policies/v1.0 export const partnerInviteCorporateBillingPolicyCreateBody = z.object({ partnerId: z.number().int(), name: z.string().max(255), coverageType: z.enum(["full_coverage", "limited_coverage"]), individualSpendingLimit: z.number().min(0).optional(), externalId: z.string().max(255).optional(), restrictions: z.object({ partner: z.object({ type: z.enum(["none", "own_only", "allow", "deny"]), partnerIds: z.array(z.number().int()).optional() }), country: z.object({ type: z.enum(["none", "allow", "deny"]), countries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional() }), location: z.object({ type: z.enum(["none", "allow", "deny"]), locationIds: z.array(z.number().int()).optional() }), locationTag: z.object({ type: z.enum(["none", "allow", "deny"]), locationTagIds: z.array(z.number().int()).optional() }), roaming: z.object({ type: z.enum(["none", "deny_all", "allow", "deny"]), roamingOperatorIds: z.array(z.number().int()).optional() }) }).optional(), tariffThresholds: z.object({ energy: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), idleTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), connection: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), chargingTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional() }).optional(), overallCostCap: z.object({ enabled: z.boolean(), maxCostPerKwh: z.number().min(0).optional() }).optional(), chargerTypeConfig: z.object({ ac: z.object({ coverageType: z.enum(["full_coverage", "limited_coverage", "not_covered"]), tariffThresholds: z.object({ energy: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), idleTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), connection: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), chargingTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional() }).optional(), overallCostCap: z.object({ enabled: z.boolean(), maxCostPerKwh: z.number().min(0).optional() }).optional() }), dc: z.object({ coverageType: z.enum(["full_coverage", "limited_coverage", "not_covered"]), tariffThresholds: z.object({ energy: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), idleTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), connection: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), chargingTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional() }).optional(), overallCostCap: z.object({ enabled: z.boolean(), maxCostPerKwh: z.number().min(0).optional() }).optional() }) }).optional() }); // GET /public-api/resources/partner-invite-corporate-billing-policies/v1.0/{corporateBillingPolicy} // DELETE /public-api/resources/partner-invite-corporate-billing-policies/v1.0/{corporateBillingPolicy} // PATCH /public-api/resources/partner-invite-corporate-billing-policies/v1.0/{corporateBillingPolicy} export const partnerInviteCorporateBillingPolicyUpdateBody = z.object({ name: z.string().max(255).optional(), coverageType: z.enum(["full_coverage", "limited_coverage"]).optional(), individualSpendingLimit: z.number().min(0).optional(), externalId: z.string().max(255).optional(), restrictions: z.object({ partner: z.object({ type: z.enum(["none", "own_only", "allow", "deny"]), partnerIds: z.array(z.number().int()).optional() }), country: z.object({ type: z.enum(["none", "allow", "deny"]), countries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional() }), location: z.object({ type: z.enum(["none", "allow", "deny"]), locationIds: z.array(z.number().int()).optional() }), locationTag: z.object({ type: z.enum(["none", "allow", "deny"]), locationTagIds: z.array(z.number().int()).optional() }), roaming: z.object({ type: z.enum(["none", "deny_all", "allow", "deny"]), roamingOperatorIds: z.array(z.number().int()).optional() }) }).optional(), tariffThresholds: z.object({ energy: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), idleTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), connection: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), chargingTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional() }).optional(), overallCostCap: z.object({ enabled: z.boolean(), maxCostPerKwh: z.number().min(0).optional() }).optional(), chargerTypeConfig: z.object({ ac: z.object({ coverageType: z.enum(["full_coverage", "limited_coverage", "not_covered"]), tariffThresholds: z.object({ energy: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), idleTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), connection: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), chargingTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional() }).optional(), overallCostCap: z.object({ enabled: z.boolean(), maxCostPerKwh: z.number().min(0).optional() }).optional() }), dc: z.object({ coverageType: z.enum(["full_coverage", "limited_coverage", "not_covered"]), tariffThresholds: z.object({ energy: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), idleTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), connection: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional(), chargingTime: z.object({ enabled: z.boolean(), maxUnitPrice: z.number().min(0).optional(), maxQuantity: z.number().min(0).optional(), maxAmount: z.number().min(0).optional() }).optional() }).optional(), overallCostCap: z.object({ enabled: z.boolean(), maxCostPerKwh: z.number().min(0).optional() }).optional() }) }).optional() }); // GET /public-api/resources/partner-invite-corporate-billing-policy-snapshots/v1.0/{corporateBillingPolicySnapshot} // GET /public-api/resources/partner-invites/v1.0 // POST /public-api/resources/partner-invites/v1.0 export const partnerInviteCreateBody = z.object({ partnerId: z.number().int(), sendViaEmail: z.boolean().optional(), email: z.string().email().optional(), language: z.string().optional(), acceptUrl: z.string().url().optional(), options: z.object({ allowCorporateAccountBilling: z.boolean().optional(), limitCorporateAccountBillingToPartnerChargePoints: z.boolean().optional(), allowAccessToPrivateChargePoints: z.boolean().optional(), corporateBillingLimit: z.number().min(0).optional() }).optional() }); // GET /public-api/resources/partner-invites/v1.0/{partnerInvite} // DELETE /public-api/resources/partner-invites/v1.0/{partnerInvite} // PATCH /public-api/resources/partner-invites/v1.0/{partnerInvite} export const partnerInviteUpdateBody = z.object({ partnerId: z.number().int().optional(), sendViaEmail: z.boolean().optional(), email: z.string().email().optional(), language: z.string().optional(), acceptUrl: z.string().url().optional(), options: z.object({ allowCorporateAccountBilling: z.boolean().optional(), limitCorporateAccountBillingToPartnerChargePoints: z.boolean().optional(), allowAccessToPrivateChargePoints: z.boolean().optional(), corporateBillingLimit: z.number().min(0).optional() }).optional() }); // GET /public-api/resources/partner-invites/v2.0 // POST /public-api/resources/partner-invites/v2.0 export const partnerInviteCreateV2_0Body = z.object({ partnerId: z.number().int(), sendViaEmail: z.boolean().optional(), email: z.string().email().optional(), language: z.enum(["en", "bg", "mk", "el", "zh-CN", "zh-HK", "zh-TW", "pt", "sl", "hr", "it", "de", "hu", "fi", "is", "sv-SE", "da-DK", "nb-NO", "tr-TR", "es-ES", "ar", "ary", "he", "ta", "ms", "cy", "sr", "fr", "fr-MA", "ro", "lt", "uk", "ru", "nl", "ca-ES", "id", "ar-EG", "pl", "lo", "th", "sq-XK", "ga-IE", "bs", "ja", "ko-KR", "cs", "lv", "et", "az", "ka", "af", "hi", "de-CH", "fr-CH", "it-CH", "en-GB"]).optional(), accessPolicyId: z.number().int().optional(), corporateBillingPolicyId: z.number().int().optional(), reimbursement: z.object({ policyId: z.number().int().optional(), restrictions: z.object({ rfids: z.object({ type: z.enum(["none", "allow"]), rfidIds: z.array(z.number().int()).optional() }).optional(), vehicles: z.object({ type: z.enum(["none", "allow"]), vehicleIds: z.array(z.number().int()).optional() }).optional() }).optional() }).optional() }); // GET /public-api/resources/partner-invites/v2.0/{partnerInvite} // DELETE /public-api/resources/partner-invites/v2.0/{partnerInvite} // PATCH /public-api/resources/partner-invites/v2.0/{partnerInvite} export const partnerInviteUpdateV2_0Body = z.object({ partnerId: z.number().int().optional(), accessPolicyId: z.number().int().optional(), corporateBillingPolicyId: z.number().int().optional(), reimbursement: z.object({ policyId: z.number().int().optional(), restrictions: z.object({ rfids: z.object({ type: z.enum(["none", "allow"]), rfidIds: z.array(z.number().int()).optional() }).optional(), vehicles: z.object({ type: z.enum(["none", "allow"]), vehicleIds: z.array(z.number().int()).optional() }).optional() }).optional() }).optional() }); // GET /public-api/resources/partner-invoices/v1.0 // GET /public-api/resources/partner-invoices/v1.0/{partnerInvoice} // GET /public-api/resources/partner-revenues/v1.0 // GET /public-api/resources/partner-revenues/v1.1 // GET /public-api/resources/partner-revenues/v1.2 // GET /public-api/resources/partner-settlement-reports/v1.0 // GET /public-api/resources/partner-settlement-reports/v1.0/{partnerSettlementReport} // GET /public-api/resources/partner-settlement-reports/v1.0/{partnerSettlementReport}/records // POST /public-api/resources/partner-settlement-reports/v1.0/{partnerSettlementReport}/records export const partnerSettlementReportPartnerSettlementRecordCreateBody = z.object({ date: z.string(), paidAmount: z.number(), note: z.string() }); // GET /public-api/resources/partner-settlement-reports/v1.0/{partnerSettlementReport}/records/{PartnerSettlementRecord} // PUT /public-api/resources/partner-settlement-reports/v1.0/{partnerSettlementReport}/records/{PartnerSettlementRecord} export const partnerSettlementReportPartnerSettlementRecordUpdateBody = z.object({ date: z.string(), paidAmount: z.number(), note: z.string() }); // DELETE /public-api/resources/partner-settlement-reports/v1.0/{partnerSettlementReport}/records/{PartnerSettlementRecord} // GET /public-api/resources/partners/v1.0 // POST /public-api/resources/partners/v1.0 export const partnerCreateDeprecatedBody = z.object({ name: z.string(), regNo: z.string().optional(), vatNo: z.string().optional(), country: z.union([z.literal("AF"), z.literal("AX"), z.literal("AL"), z.literal("DZ"), z.literal("AS"), z.literal("AD"), z.literal("AO"), z.literal("AI"), z.literal("AQ"), z.literal("AG"), z.literal("AR"), z.literal("AM"), z.literal("AW"), z.literal("AU"), z.literal("AT"), z.literal("AZ"), z.literal("BS"), z.literal("BH"), z.literal("BD"), z.literal("BB"), z.literal("BY"), z.literal("BE"), z.literal("BZ"), z.literal("BJ"), z.literal("BM"), z.literal("BT"), z.literal("BO"), z.literal("BQ"), z.literal("BA"), z.literal("BW"), z.literal("BV"), z.literal("BR"), z.literal("IO"), z.literal("BN"), z.literal("BG"), z.literal("BF"), z.literal("BI"), z.literal("KH"), z.literal("CM"), z.literal("CA"), z.literal("CV"), z.literal("KY"), z.literal("CF"), z.literal("TD"), z.literal("CL"), z.literal("CN"), z.literal("CX"), z.literal("CC"), z.literal("CO"), z.literal("KM"), z.literal("CG"), z.literal("CD"), z.literal("CK"), z.literal("CR"), z.literal("CI"), z.literal("HR"), z.literal("CU"), z.literal("CW"), z.literal("CY"), z.literal("CZ"), z.literal("DK"), z.literal("DJ"), z.literal("DM"), z.literal("DO"), z.literal("EC"), z.literal("EG"), z.literal("SV"), z.literal("GQ"), z.literal("ER"), z.literal("EE"), z.literal("ET"), z.literal("FK"), z.literal("FO"), z.literal("FJ"), z.literal("FI"), z.literal("FR"), z.literal("GF"), z.literal("PF"), z.literal("TF"), z.literal("GA"), z.literal("GM"), z.literal("GE"), z.literal("DE"), z.literal("GH"), z.literal("GI"), z.literal("GR"), z.literal("GL"), z.literal("GD"), z.literal("GP"), z.literal("GU"), z.literal("GT"), z.literal("GG"), z.literal("GN"), z.literal("GW"), z.literal("GY"), z.literal("HT"), z.literal("HM"), z.literal("VA"), z.literal("HN"), z.literal("HK"), z.literal("HU"), z.literal("IS"), z.literal("IN"), z.literal("ID"), z.literal("IR"), z.literal("IQ"), z.literal("IE"), z.literal("IM"), z.literal("IL"), z.literal("IT"), z.literal("JM"), z.literal("JP"), z.literal("JE"), z.literal("JO"), z.literal("KZ"), z.literal("KE"), z.literal("KI"), z.literal("KP"), z.literal("KR"), z.literal("XK"), z.literal("KW"), z.literal("KG"), z.literal("LA"), z.literal("LV"), z.literal("LB"), z.literal("LS"), z.literal("LR"), z.literal("LY"), z.literal("LI"), z.literal("LT"), z.literal("LU"), z.literal("MO"), z.literal("MK"), z.literal("MG"), z.literal("MW"), z.literal("MY"), z.literal("MV"), z.literal("ML"), z.literal("MT"), z.literal("MH"), z.literal("MQ"), z.literal("MR"), z.literal("MU"), z.literal("YT"), z.literal("MX"), z.literal("FM"), z.literal("MD"), z.literal("MC"), z.literal("MN"), z.literal("ME"), z.literal("MS"), z.literal("MA"), z.literal("MZ"), z.literal("MM"), z.literal("NA"), z.literal("NR"), z.literal("NP"), z.literal("NL"), z.literal("NC"), z.literal("NZ"), z.literal("NI"), z.literal("NE"), z.literal("NG"), z.literal("NU"), z.literal("NF"), z.literal("MP"), z.literal("NO"), z.literal("OM"), z.literal("PK"), z.literal("PW"), z.literal("PS"), z.literal("PA"), z.literal("PG"), z.literal("PY"), z.literal("PE"), z.literal("PH"), z.literal("PN"), z.literal("PL"), z.literal("PT"), z.literal("PR"), z.literal("QA"), z.literal("RE"), z.literal("RO"), z.literal("RU"), z.literal("RW"), z.literal("BL"), z.literal("SH"), z.literal("KN"), z.literal("LC"), z.literal("MF"), z.literal("PM"), z.literal("VC"), z.literal("WS"), z.literal("SM"), z.literal("ST"), z.literal("SA"), z.literal("SN"), z.literal("RS"), z.literal("SC"), z.literal("SL"), z.literal("SG"), z.literal("SX"), z.literal("SK"), z.literal("SI"), z.literal("SB"), z.literal("SO"), z.literal("ZA"), z.literal("GS"), z.literal("SS"), z.literal("ES"), z.literal("LK"), z.literal("SD"), z.literal("SR"), z.literal("SJ"), z.literal("SZ"), z.literal("SE"), z.literal("CH"), z.literal("SY"), z.literal("TW"), z.literal("TJ"), z.literal("TZ"), z.literal("TH"), z.literal("TL"), z.literal("TG"), z.literal("TK"), z.literal("TO"), z.literal("TT"), z.literal("TN"), z.literal("TR"), z.literal("TM"), z.literal("TC"), z.literal("TV"), z.literal("UG"), z.literal("UA"), z.literal("AE"), z.literal("GB"), z.literal("US"), z.literal("UM"), z.literal("UY"), z.literal("UZ"), z.literal("VU"), z.literal("VE"), z.literal("VN"), z.literal("VG"), z.literal("VI"), z.literal("WF"), z.literal("EH"), z.literal("YE"), z.literal("ZM"), z.literal("ZW"), z.null()]).optional(), city: z.string().optional(), postcode: z.string().optional(), address: z.string().optional(), contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional(), faultNotificationsEmail: z.string().email().optional(), monthlyPlatformFee: z.number().optional(), options: z.object({ createUsers: z.boolean().optional(), addUserBalance: z.boolean().optional(), supplierOnReceipts: z.boolean().optional(), allowToControlTariffs: z.boolean().optional(), allowToControlTariffGroups: z.boolean().optional() }).optional(), corporateBilling: z.object({ enabled: z.boolean().optional(), monthlyLimit: z.number().optional(), discount: z.number().optional() }).optional(), externalId: z.string().optional() }); // GET /public-api/resources/partners/v1.0/{partner} // DELETE /public-api/resources/partners/v1.0/{partner} // PATCH /public-api/resources/partners/v1.0/{partner} export const partnerUpdateDeprecatedBody = z.object({ name: z.string(), regNo: z.string().optional(), vatNo: z.string().optional(), country: z.union([z.literal("AF"), z.literal("AX"), z.literal("AL"), z.literal("DZ"), z.literal("AS"), z.literal("AD"), z.literal("AO"), z.literal("AI"), z.literal("AQ"), z.literal("AG"), z.literal("AR"), z.literal("AM"), z.literal("AW"), z.literal("AU"), z.literal("AT"), z.literal("AZ"), z.literal("BS"), z.literal("BH"), z.literal("BD"), z.literal("BB"), z.literal("BY"), z.literal("BE"), z.literal("BZ"), z.literal("BJ"), z.literal("BM"), z.literal("BT"), z.literal("BO"), z.literal("BQ"), z.literal("BA"), z.literal("BW"), z.literal("BV"), z.literal("BR"), z.literal("IO"), z.literal("BN"), z.literal("BG"), z.literal("BF"), z.literal("BI"), z.literal("KH"), z.literal("CM"), z.literal("CA"), z.literal("CV"), z.literal("KY"), z.literal("CF"), z.literal("TD"), z.literal("CL"), z.literal("CN"), z.literal("CX"), z.literal("CC"), z.literal("CO"), z.literal("KM"), z.literal("CG"), z.literal("CD"), z.literal("CK"), z.literal("CR"), z.literal("CI"), z.literal("HR"), z.literal("CU"), z.literal("CW"), z.literal("CY"), z.literal("CZ"), z.literal("DK"), z.literal("DJ"), z.literal("DM"), z.literal("DO"), z.literal("EC"), z.literal("EG"), z.literal("SV"), z.literal("GQ"), z.literal("ER"), z.literal("EE"), z.literal("ET"), z.literal("FK"), z.literal("FO"), z.literal("FJ"), z.literal("FI"), z.literal("FR"), z.literal("GF"), z.literal("PF"), z.literal("TF"), z.literal("GA"), z.literal("GM"), z.literal("GE"), z.literal("DE"), z.literal("GH"), z.literal("GI"), z.literal("GR"), z.literal("GL"), z.literal("GD"), z.literal("GP"), z.literal("GU"), z.literal("GT"), z.literal("GG"), z.literal("GN"), z.literal("GW"), z.literal("GY"), z.literal("HT"), z.literal("HM"), z.literal("VA"), z.literal("HN"), z.literal("HK"), z.literal("HU"), z.literal("IS"), z.literal("IN"), z.literal("ID"), z.literal("IR"), z.literal("IQ"), z.literal("IE"), z.literal("IM"), z.literal("IL"), z.literal("IT"), z.literal("JM"), z.literal("JP"), z.literal("JE"), z.literal("JO"), z.literal("KZ"), z.literal("KE"), z.literal("KI"), z.literal("KP"), z.literal("KR"), z.literal("XK"), z.literal("KW"), z.literal("KG"), z.literal("LA"), z.literal("LV"), z.literal("LB"), z.literal("LS"), z.literal("LR"), z.literal("LY"), z.literal("LI"), z.literal("LT"), z.literal("LU"), z.literal("MO"), z.literal("MK"), z.literal("MG"), z.literal("MW"), z.literal("MY"), z.literal("MV"), z.literal("ML"), z.literal("MT"), z.literal("MH"), z.literal("MQ"), z.literal("MR"), z.literal("MU"), z.literal("YT"), z.literal("MX"), z.literal("FM"), z.literal("MD"), z.literal("MC"), z.literal("MN"), z.literal("ME"), z.literal("MS"), z.literal("MA"), z.literal("MZ"), z.literal("MM"), z.literal("NA"), z.literal("NR"), z.literal("NP"), z.literal("NL"), z.literal("NC"), z.literal("NZ"), z.literal("NI"), z.literal("NE"), z.literal("NG"), z.literal("NU"), z.literal("NF"), z.literal("MP"), z.literal("NO"), z.literal("OM"), z.literal("PK"), z.literal("PW"), z.literal("PS"), z.literal("PA"), z.literal("PG"), z.literal("PY"), z.literal("PE"), z.literal("PH"), z.literal("PN"), z.literal("PL"), z.literal("PT"), z.literal("PR"), z.literal("QA"), z.literal("RE"), z.literal("RO"), z.literal("RU"), z.literal("RW"), z.literal("BL"), z.literal("SH"), z.literal("KN"), z.literal("LC"), z.literal("MF"), z.literal("PM"), z.literal("VC"), z.literal("WS"), z.literal("SM"), z.literal("ST"), z.literal("SA"), z.literal("SN"), z.literal("RS"), z.literal("SC"), z.literal("SL"), z.literal("SG"), z.literal("SX"), z.literal("SK"), z.literal("SI"), z.literal("SB"), z.literal("SO"), z.literal("ZA"), z.literal("GS"), z.literal("SS"), z.literal("ES"), z.literal("LK"), z.literal("SD"), z.literal("SR"), z.literal("SJ"), z.literal("SZ"), z.literal("SE"), z.literal("CH"), z.literal("SY"), z.literal("TW"), z.literal("TJ"), z.literal("TZ"), z.literal("TH"), z.literal("TL"), z.literal("TG"), z.literal("TK"), z.literal("TO"), z.literal("TT"), z.literal("TN"), z.literal("TR"), z.literal("TM"), z.literal("TC"), z.literal("TV"), z.literal("UG"), z.literal("UA"), z.literal("AE"), z.literal("GB"), z.literal("US"), z.literal("UM"), z.literal("UY"), z.literal("UZ"), z.literal("VU"), z.literal("VE"), z.literal("VN"), z.literal("VG"), z.literal("VI"), z.literal("WF"), z.literal("EH"), z.literal("YE"), z.literal("ZM"), z.literal("ZW"), z.null()]).optional(), city: z.string().optional(), postcode: z.string().optional(), address: z.string().optional(), contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional(), faultNotificationsEmail: z.string().email().optional(), monthlyPlatformFee: z.number().optional(), options: z.object({ createUsers: z.boolean().optional(), addUserBalance: z.boolean().optional(), supplierOnReceipts: z.boolean().optional(), allowToControlTariffs: z.boolean().optional(), allowToControlTariffGroups: z.boolean().optional() }).optional(), corporateBilling: z.object({ enabled: z.boolean().optional(), monthlyLimit: z.number().optional(), discount: z.number().optional() }).optional(), externalId: z.string().optional() }); // GET /public-api/resources/partners/v2.0 // POST /public-api/resources/partners/v2.0 export const partnerCreateBody = z.object({ businessName: z.string().optional(), reimbursement: z.object({ enabled: z.boolean().optional(), payoutMode: z.enum(["operator_managed", "partner_managed"]).optional(), cycle: z.enum(["monthly", "quarterly", "annual"]).optional() }).optional(), notifications: z.object({ technical: z.object({ chargePointFaults: z.boolean().optional() }).optional(), billing: z.object({ settlementReports: z.boolean().optional() }).optional() }).optional(), id: z.number().int().optional(), name: z.string().optional(), translatedName: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), regNo: z.string().optional(), vatNo: z.string().optional(), address: z.string().optional(), translatedAddress: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), postcode: z.string().optional(), city: z.string().optional(), translatedCity: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), region: z.string().optional(), translatedRegion: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), contactDetails: z.object({ administrative: z.object({ contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional() }).optional(), technical: z.object({ contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional() }).optional(), billing: z.object({ contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional() }).optional() }).optional(), monthlyPlatformFee: z.number().optional(), receiptsPrefix: z.string().optional(), receiptsStartingNumber: z.string().regex(new RegExp("^\\d+(\\.\\d+)?$")).optional(), invoiceNumberPrefix: z.string().min(1).max(10).optional(), startingInvoiceNumber: z.string().regex(new RegExp("^\\d+$")).optional(), options: z.object({ userVisibility: z.enum(["none", "all", "corporateBillingOnly"]).optional(), allowViewingUsersWhoAcceptedInvite: z.boolean().optional(), createUsers: z.boolean().optional(), addUserBalance: z.boolean().optional(), allowViewingAllSessionsOfInvitedUsers: z.boolean().optional(), supplierOnReceipts: z.boolean().optional(), supplierOnInvoices: z.boolean().optional(), allowToControlTariffs: z.boolean().optional(), allowToControlTariffGroups: z.boolean().optional(), allowToControlCpConfigurations: z.boolean().optional(), allowToLogExemptPeriods: z.boolean().optional(), settlementReportBreakdown: z.enum(["none", "by_location", "by_partner_contract", "by_location_and_partner_contract"]).optional() }).optional(), corporateBilling: z.object({ enabled: z.boolean().optional(), monthlyLimit: z.number().optional(), frequency: z.enum(["monthly", "quarterly", "semiAnnually", "annually"]).optional(), limit: z.number().min(0).optional(), discount: z.number().optional() }).optional(), externalId: z.string().optional(), bankDetails: z.object({ bankIban: z.string().optional(), bankCode: z.string().optional(), bankAccountNumber: z.string().optional(), bankAccountType: z.string().optional(), bankBic: z.string().optional(), bankName: z.string().optional(), bankAddress: z.string().optional(), bankAccountHolder: z.string().optional(), translatedBankName: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), translatedBankAddress: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), translatedBankAccountHolder: z.array(z.object({ locale: z.string(), translation: z.string() })).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional(), operatorId: z.number().int().optional() }); // GET /public-api/resources/partners/v2.0/{partner} // DELETE /public-api/resources/partners/v2.0/{partner} // PATCH /public-api/resources/partners/v2.0/{partner} export const partnerUpdateBody = z.object({ businessName: z.string().optional(), reimbursement: z.object({ enabled: z.boolean().optional(), payoutMode: z.enum(["operator_managed", "partner_managed"]).optional(), cycle: z.enum(["monthly", "quarterly", "annual"]).optional() }).optional(), notifications: z.object({ technical: z.object({ chargePointFaults: z.boolean().optional() }).optional(), billing: z.object({ settlementReports: z.boolean().optional() }).optional() }).optional(), id: z.number().int().optional(), name: z.string().optional(), translatedName: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), regNo: z.string().optional(), vatNo: z.string().optional(), address: z.string().optional(), translatedAddress: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), postcode: z.string().optional(), city: z.string().optional(), translatedCity: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), region: z.string().optional(), translatedRegion: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), contactDetails: z.object({ administrative: z.object({ contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional() }).optional(), technical: z.object({ contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional() }).optional(), billing: z.object({ contactPerson: z.string().optional(), email: z.string().email().optional(), phone: z.string().optional() }).optional() }).optional(), monthlyPlatformFee: z.number().optional(), receiptsPrefix: z.string().optional(), receiptsStartingNumber: z.string().regex(new RegExp("^\\d+(\\.\\d+)?$")).optional(), invoiceNumberPrefix: z.string().min(1).max(10).optional(), startingInvoiceNumber: z.string().regex(new RegExp("^\\d+$")).optional(), options: z.object({ userVisibility: z.enum(["none", "all", "corporateBillingOnly"]).optional(), allowViewingUsersWhoAcceptedInvite: z.boolean().optional(), createUsers: z.boolean().optional(), addUserBalance: z.boolean().optional(), allowViewingAllSessionsOfInvitedUsers: z.boolean().optional(), supplierOnReceipts: z.boolean().optional(), supplierOnInvoices: z.boolean().optional(), allowToControlTariffs: z.boolean().optional(), allowToControlTariffGroups: z.boolean().optional(), allowToControlCpConfigurations: z.boolean().optional(), allowToLogExemptPeriods: z.boolean().optional(), settlementReportBreakdown: z.enum(["none", "by_location", "by_partner_contract", "by_location_and_partner_contract"]).optional() }).optional(), corporateBilling: z.object({ enabled: z.boolean().optional(), monthlyLimit: z.number().optional(), frequency: z.enum(["monthly", "quarterly", "semiAnnually", "annually"]).optional(), limit: z.number().min(0).optional(), discount: z.number().optional() }).optional(), externalId: z.string().optional(), bankDetails: z.object({ bankIban: z.string().optional(), bankCode: z.string().optional(), bankAccountNumber: z.string().optional(), bankAccountType: z.string().optional(), bankBic: z.string().optional(), bankName: z.string().optional(), bankAddress: z.string().optional(), bankAccountHolder: z.string().optional(), translatedBankName: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), translatedBankAddress: z.array(z.object({ locale: z.string(), translation: z.string() })).optional(), translatedBankAccountHolder: z.array(z.object({ locale: z.string(), translation: z.string() })).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/partners/v2.0/{partner}/admins // POST /public-api/resources/partners/v2.0/{partner}/admins export const partnerAdminCreateBody = z.object({ name: z.string().max(255), email: z.string().email().max(255), password: z.string(), passwordConfirmation: z.string(), adminType: z.enum(["partner", "partnerSiteManager"]), roleId: z.number().int(), locale: z.string().max(10).optional(), whitelistedIps: z.array(z.string()).optional(), locationIds: z.array(z.number().int()).optional() }); // DELETE /public-api/resources/partners/v2.0/{partner}/admins/{admin} // PATCH /public-api/resources/partners/v2.0/{partner}/admins/{admin} export const partnerAdminUpdateBody = z.object({ name: z.string().max(255).optional(), email: z.string().email().max(255).optional(), password: z.string().optional(), passwordConfirmation: z.string().optional(), roleId: z.number().int().optional(), locale: z.string().max(10).optional(), whitelistedIps: z.array(z.string()).optional(), locationIds: z.array(z.number().int()).optional() }); // GET /public-api/resources/partners/v2.0/{partner}/notes // POST /public-api/resources/partners/v2.0/{partner}/notes export const partnerNoteCreateBody = z.object({ summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/partners/v2.0/{partner}/notes/{note} // DELETE /public-api/resources/partners/v2.0/{partner}/notes/{note} // PATCH /public-api/resources/partners/v2.0/{partner}/notes/{note} export const partnerNoteUpdateBody = z.object({ summary: z.string().max(255).optional(), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/payment-terminals/v1.0 // POST /public-api/resources/payment-terminals/v1.0 export const createPaymentTerminalDeprecatedBody = z.union([z.union([z.object({ preauthorizeAmount: z.number().optional(), currencyId: z.number().int().optional(), valueAddedTaxId: z.number().int().optional() }), z.object({ transactionTimeout: z.number().int().optional() })]), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), bundle: z.object({ version: z.string().optional(), downloadUrl: z.string().optional() }), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), suppressReceiptWhenInvoiceIssued: z.boolean(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), webhookUrl: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), suppressReceiptWhenInvoiceIssued: z.boolean() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), verificationCode: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), suppressReceiptWhenInvoiceIssued: z.boolean() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), merchantAccount: z.string(), adyenApiKey: z.string(), supportedLanguages: z.array(z.string()).optional(), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), suppressReceiptWhenInvoiceIssued: z.boolean(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), countryCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), bundle: z.object({ version: z.string().optional(), downloadUrl: z.string().optional() }), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), suppressReceiptWhenInvoiceIssued: z.boolean(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), bundle: z.object({ version: z.string().optional(), downloadUrl: z.string().optional() }), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), suppressReceiptWhenInvoiceIssued: z.boolean(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() })]); // GET /public-api/resources/payment-terminals/v1.0/{paymentTerminal} // DELETE /public-api/resources/payment-terminals/v1.0/{paymentTerminal} // PATCH /public-api/resources/payment-terminals/v1.0/{paymentTerminal} export const updatePaymentTerminalDeprecatedBody = z.union([z.union([z.object({ preauthorizeAmount: z.number().optional(), currencyId: z.number().int().optional(), valueAddedTaxId: z.number().int().optional() }), z.object({ transactionTimeout: z.number().int().optional() })]), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), webhookUrl: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), verificationCode: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), merchantAccount: z.string().optional(), adyenApiKey: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), networkStatusMonitoringEnabled: z.boolean().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), networkStatusMonitoringEnabled: z.boolean().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Ampeco", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional() })]); // GET /public-api/resources/payment-terminals/v1.1 // POST /public-api/resources/payment-terminals/v1.1 export const createPaymentTerminalV1_1Body = z.union([z.union([z.object({ preauthorizeAmount: z.number().optional(), currencyId: z.number().int().optional(), valueAddedTaxId: z.number().int().optional() }), z.object({ transactionTimeout: z.number().int().optional() })]), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), bundle: z.object({ version: z.string().optional(), downloadUrl: z.string().optional() }), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), simplifiedJourneyMode: z.enum(["off", "evseList", "screensaver"]).optional(), screensaverWelcomeMessage: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), screensaverPaymentMethods: z.array(z.enum(["visa", "mastercard", "paypal", "maestro", "amex", "bancontact", "cartes_bancaires", "diners_club", "discover", "interac", "jcb", "mada", "visa_electron", "applepay", "googlepay", "twint"])).max(8).optional(), screensaverLogoUrl: z.string().url().optional(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), invoiceDetailsMandatory: z.boolean().optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), webhookUrl: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), verificationCode: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), invoiceDetailsMandatory: z.boolean().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), merchantAccount: z.string(), adyenApiKey: z.string(), supportedLanguages: z.array(z.string()).optional(), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), invoiceDetailsMandatory: z.boolean().optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), countryCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), bundle: z.object({ version: z.string().optional(), downloadUrl: z.string().optional() }), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), invoiceDetailsMandatory: z.boolean().optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() }), z.object({ id: z.number().int().optional(), name: z.string(), integrationId: z.number().int(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]), operatorId: z.number().int(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string(), defaultLanguage: z.string(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), currencyCode: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), bundle: z.object({ version: z.string().optional(), downloadUrl: z.string().optional() }), networkStatusMonitoringEnabled: z.boolean().optional(), kioskModeEnabled: z.boolean().optional(), invoiceFields: z.array(z.object({ field: z.string(), required: z.boolean(), type: z.enum(["individual", "company"]), label: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })) })).optional(), invoiceDetailsMandatory: z.boolean().optional(), showTermsAndConditions: z.boolean().optional(), termVersionId: z.number().int().optional() })]); // GET /public-api/resources/payment-terminals/v1.1/{paymentTerminal} // DELETE /public-api/resources/payment-terminals/v1.1/{paymentTerminal} // PATCH /public-api/resources/payment-terminals/v1.1/{paymentTerminal} export const updatePaymentTerminalV1_1Body = z.union([z.union([z.object({ preauthorizeAmount: z.number().optional(), currencyId: z.number().int().optional(), valueAddedTaxId: z.number().int().optional() }), z.object({ transactionTimeout: z.number().int().optional() })]), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string().optional(), terminalModel: z.string().optional(), currentBundleVersion: z.string().optional(), lastCertifiedAppVersion: z.string().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), simplifiedJourneyMode: z.enum(["off", "evseList", "screensaver"]).optional(), screensaverWelcomeMessage: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), screensaverPaymentMethods: z.array(z.enum(["visa", "mastercard", "paypal", "maestro", "amex", "bancontact", "cartes_bancaires", "diners_club", "discover", "interac", "jcb", "mada", "visa_electron", "applepay", "googlepay", "twint"])).max(8).optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), adminToken: z.string().optional(), webhookUrl: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), verificationCode: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), serialNumber: z.string().optional(), externalId: z.string().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string().optional(), terminalModel: z.string().optional(), currentBundleVersion: z.string().optional(), lastCertifiedAppVersion: z.string().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), merchantAccount: z.string().optional(), adyenApiKey: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), networkStatusMonitoringEnabled: z.boolean().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string().optional(), terminalModel: z.string().optional(), currentBundleVersion: z.string().optional(), lastCertifiedAppVersion: z.string().optional(), adminToken: z.string().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional(), networkStatusMonitoringEnabled: z.boolean().optional() }), z.object({ id: z.number().int().optional(), name: z.string().optional(), integrationId: z.number().int().optional(), terminalType: z.enum(["Payter", "Valina", "Crane", "Generic", "Nayax", "Embedded", "Pax", "Windcave", "Web portal", "AdyenCastles", "Adyen Castles", "Printec Castles", "Cardlink Castles"]).optional(), chargingZoneId: z.number().int().optional(), chargePointId: z.number().int().optional(), terminalId: z.string().optional(), terminalModel: z.string().optional(), currentBundleVersion: z.string().optional(), lastCertifiedAppVersion: z.string().optional(), adminToken: z.string().optional(), isOnline: z.boolean().optional(), networkStatus: z.enum(["online", "offline", "unknown"]).optional(), phone: z.string().optional(), defaultLanguage: z.string().optional(), presentCardOnStopSession: z.boolean().optional(), info: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), serialNumber: z.string().optional(), externalId: z.string().optional(), supportedLanguages: z.array(z.string()).optional() })]); // GET /public-api/resources/provisioning-certificates/v2.0 // POST /public-api/resources/provisioning-certificates/v2.0 export const createPcIdBody = z.object({ id: z.number().int().optional(), pcId: z.string(), name: z.string(), vehicleType: z.enum(["company", "private"]), userId: z.number().int() }); // GET /public-api/resources/provisioning-certificates/v2.0/{provisioningCertificate} // DELETE /public-api/resources/provisioning-certificates/v2.0/{provisioningCertificate} // PATCH /public-api/resources/provisioning-certificates/v2.0/{provisioningCertificate} export const updatePcIdBody = z.object({ id: z.number().int().optional(), pcId: z.string().optional(), name: z.string().optional(), vehicleType: z.enum(["company", "private"]).optional(), userId: z.number().int().optional() }); // GET /public-api/resources/receipts/v2.0 // GET /public-api/resources/receipts/v2.0/{receipt} // GET /public-api/resources/reimbursement-policies/v1.0 // POST /public-api/resources/reimbursement-policies/v1.0 export const reimbursementPolicyCreateBody = z.object({ name: z.string().max(255), validityStartsOn: z.string(), partnerId: z.number().int().optional(), partnerContractId: z.number().int().optional(), electricityRateId: z.number().int().optional(), validityEndsOn: z.string().optional(), electricityRateSource: z.enum(["policy", "charge_point"]), operatorId: z.number().int().optional() }); // GET /public-api/resources/reimbursement-policies/v1.0/{reimbursementPolicy} // DELETE /public-api/resources/reimbursement-policies/v1.0/{reimbursementPolicy} // PATCH /public-api/resources/reimbursement-policies/v1.0/{reimbursementPolicy} export const reimbursementPolicyUpdateBody = z.object({ name: z.string().max(255).optional(), validityStartsOn: z.string().optional(), electricityRateSource: z.enum(["policy", "charge_point"]).optional(), partnerId: z.number().int().optional(), partnerContractId: z.number().int().optional(), electricityRateId: z.number().int().optional(), validityEndsOn: z.string().optional() }); // GET /public-api/resources/reimbursement-records/v1.0 // GET /public-api/resources/reimbursement-records/v1.0/{reimbursementRecord} // GET /public-api/resources/reimbursement-reports/v1.0 // GET /public-api/resources/reimbursement-reports/v1.0/{reimbursementReport} // GET /public-api/resources/reservations/v1.0 // GET /public-api/resources/reservations/v1.0/{reservation} // GET /public-api/resources/rfid-tags/v1.0 // POST /public-api/resources/rfid-tags/v1.0 export const rfidTagCreateDeprecatedBody = z.object({ id: z.number().int().optional(), rfidTagUid: z.string(), rfidLabel: z.string().optional(), expireAt: z.string().optional(), createdAt: z.string().optional(), status: z.enum(["enabled", "disabled", "suspended"]), userId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/rfid-tags/v1.0/{rfidTag} // DELETE /public-api/resources/rfid-tags/v1.0/{rfidTag} // PATCH /public-api/resources/rfid-tags/v1.0/{rfidTag} export const rfidTagUpdateDeprecatedBody = z.object({ id: z.number().int().optional(), rfidTagUid: z.string(), rfidLabel: z.string().optional(), expireAt: z.string().optional(), createdAt: z.string().optional(), status: z.enum(["enabled", "disabled", "suspended"]), userId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/roaming-connections/v2.0 // GET /public-api/resources/roaming-connections/v2.0/{roamingConnection} // GET /public-api/resources/roaming-cpos/v1.0 // GET /public-api/resources/roaming-cpos/v1.0/{roamingCpo} // PATCH /public-api/resources/roaming-cpos/v1.0/{roamingCpo} export const roamingCpoUpdateBody = z.object({ businessName: z.string().optional(), enabled: z.boolean().optional(), cpoSettings: z.object({ cpoQrCodePrefix: z.string().optional(), tariffMappingMode: z.enum(["per_roaming_tariff", "per_evse", "single_tariff_group"]).optional(), applyCustomTariffsToEvsesWithRoamingTariff: z.boolean().optional(), sendsPeriodicMeterUpdates: z.boolean().optional(), externalTariffIntegration: z.enum(["has.to.be"]).optional(), treatEvseStatusUnknownAs: z.enum(["available", "unavailable"]).optional(), phaseAcPowerFormula: z.enum(["amperage_voltage_3", "amperage_voltage_sqr3"]).optional() }).optional() }); // GET /public-api/resources/roaming-emsps/v1.0 // POST /public-api/resources/roaming-emsps/v1.0 export const roamingEmspCreateBody = z.union([z.object({ businessName: z.string().optional(), connectionId: z.number().int(), hubjectId: z.string().optional() }), z.object({ businessName: z.string().optional(), connectionId: z.number().int(), countryCode: z.string(), partyId: z.string() })]); // GET /public-api/resources/roaming-emsps/v1.0/{roamingEmsp} // DELETE /public-api/resources/roaming-emsps/v1.0/{roamingEmsp} // PATCH /public-api/resources/roaming-emsps/v1.0/{roamingEmsp} export const roamingEmspUpdateBody = z.union([z.object({ businessName: z.string().optional(), hubjectId: z.string().optional() }), z.object({ businessName: z.string().optional(), countryCode: z.string().optional(), partyId: z.string().optional() })]); // GET /public-api/resources/roaming-emsps/v1.0/{roamingEmsp}/partners // GET /public-api/resources/roaming-operators/v2.0 // GET /public-api/resources/roaming-operators/v2.0/{roamingOperator} // PATCH /public-api/resources/roaming-operators/v2.0/{roamingOperator} export const roamingOperatorUpdateBody = z.object({ businessName: z.string().optional(), partnerId: z.number().int().optional(), enabled: z.boolean().optional(), cpoSettings: z.object({ cpoQrcodePrefix: z.string().optional(), manualEvseManagement: z.boolean().optional(), applyCustomTariffsToEvsesWithRoamingTariff: z.boolean().optional(), sendsPeriodicMeterUpdates: z.boolean().optional(), externalTariffIntegration: z.string().optional(), threatEvseStatusUnknownAs: z.enum(["available", "unavailable"]).optional(), phaseAcPowerFormula: z.enum(["amperage_voltage_3", "amperage_voltage_sqr3"]).optional() }).optional() }); // GET /public-api/resources/roaming-operators/v2.0/{roamingOperator}/custom-tariff-filters // POST /public-api/resources/roaming-operators/v2.0/{roamingOperator}/custom-tariff-filters export const createRoamingCustomTariffFilterBody = z.object({ id: z.number().int().optional(), name: z.string().min(1).max(255), status: z.enum(["enabled", "disabled"]), countryCode: z.string().regex(new RegExp("^[A-Z]{2}$")).optional(), applicableCurrentTypes: z.array(z.enum(["AC", "DC"])).optional(), powerBelowKw: z.number().min(0).optional(), evseIdPrefix: z.string().max(1000).optional(), order: z.number().int().optional(), createdAt: z.string().datetime().optional(), updatedAt: z.string().datetime().optional() }); // PUT /public-api/resources/roaming-operators/v2.0/{roamingOperator}/custom-tariff-filters/reorder export const reorderRoamingCustomTariffFiltersBody = z.object({ filters: z.array(z.object({ id: z.number().int(), order: z.number().int().min(1) })) }); // GET /public-api/resources/roaming-operators/v2.0/{roamingOperator}/custom-tariff-filters/{customTariffFilter} // DELETE /public-api/resources/roaming-operators/v2.0/{roamingOperator}/custom-tariff-filters/{customTariffFilter} // PATCH /public-api/resources/roaming-operators/v2.0/{roamingOperator}/custom-tariff-filters/{customTariffFilter} export const updateRoamingCustomTariffFilterBody = z.object({ name: z.string().min(1).max(255).optional(), status: z.enum(["enabled", "disabled"]).optional(), countryCode: z.string().regex(new RegExp("^[A-Z]{2}$")).optional(), applicableCurrentTypes: z.array(z.enum(["AC", "DC"])).optional(), powerBelowKw: z.number().min(0).optional(), evseIdPrefix: z.string().max(1000).optional(), order: z.number().int().optional() }); // GET /public-api/resources/roaming-platforms/v1.0 // GET /public-api/resources/roaming-platforms/v1.0/{roamingPlatform} // GET /public-api/resources/roaming-providers/v2.0 // POST /public-api/resources/roaming-providers/v2.0 export const roamingProviderCreateBody = z.union([z.object({ businessName: z.string().optional(), platformId: z.number().int(), partnerId: z.number().int().optional(), hubjectId: z.string().optional() }), z.object({ businessName: z.string().optional(), platformId: z.number().int(), partnerId: z.number().int().optional(), countryCode: z.string().optional(), partyId: z.string().optional() })]); // GET /public-api/resources/roaming-providers/v2.0/{roamingProvider} // DELETE /public-api/resources/roaming-providers/v2.0/{roamingProvider} // PATCH /public-api/resources/roaming-providers/v2.0/{roamingProvider} export const roamingProviderUpdateBody = z.union([z.object({ businessName: z.string().optional(), platformId: z.number().int().optional(), partnerId: z.number().int().optional(), hubjectId: z.string().optional() }), z.object({ businessName: z.string().optional(), platformId: z.number().int().optional(), partnerId: z.number().int().optional(), countryCode: z.string().optional(), partyId: z.string().optional() })]); // GET /public-api/resources/roaming-tariffs/v2.0 // GET /public-api/resources/roaming-tariffs/v2.0/{roamingTariff} // PATCH /public-api/resources/roaming-tariffs/v2.0/{roamingTariff} export const roamingTariffUpdateBody = z.object({ id: z.number().int().optional(), roamingIds: z.array(z.string()).optional(), roamingTariffHumanReadable: z.string().optional(), rawRoamingTariffs: z.array(z.object({})).optional(), operatorId: z.number().int().optional(), tariffGroupId: z.number().int().optional(), cpoTariffGroupId: z.number().int().optional() }); // GET /public-api/resources/security-events-log/v2.0 // GET /public-api/resources/security-events-log/v2.0/{securityEventLog} // GET /public-api/resources/security-events/v2.0 // GET /public-api/resources/security-events/v2.0/{securityEvent} // GET /public-api/resources/sessions/v1.0 // GET /public-api/resources/sessions/v1.0/{session} // GET /public-api/resources/sessions/v1.0/{session}/consumption-stats // GET /public-api/resources/sessions/v1.0/{session}/energy-coupon-session-consumptions // GET /public-api/resources/sessions/v1.0/{session}/timeline-snapshot // GET /public-api/resources/settings/v1.0 // GET /public-api/resources/sharing-invites/v1.0 // GET /public-api/resources/sharing-invites/v1.0/{sharingInvite} // GET /public-api/resources/sub-operators/v1.0 // GET /public-api/resources/sub-operators/v1.0/{subOperator} // GET /public-api/resources/sub-operators/v2.0 // POST /public-api/resources/sub-operators/v2.0 export const subOperatorCreateBody = z.object({ businessName: z.string().max(255), externalId: z.string().max(255).optional(), regNo: z.string().max(255).optional(), taxNo: z.string().max(255).optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), postcode: z.string().max(255).optional(), contactPerson: z.string().max(255).optional(), phone: z.string().max(255).optional(), email: z.string().max(255).optional(), faultNotificationsEmail: z.string().email().max(255).optional(), businessOperationalContext: z.string().optional(), capabilities: z.object({ canControlChargePoints: z.boolean().optional(), canControlTariff: z.boolean().optional(), canControlTariffGroups: z.boolean().optional(), canControlPartnersTariffsAndTariffGroups: z.boolean().optional() }).optional(), partnerIds: z.array(z.number().int()).optional(), translatedName: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).min(1).optional(), translatedAddress: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).optional(), translatedCity: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).optional(), translatedRegion: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).optional(), name: z.string().max(255).optional(), city: z.string().max(255).optional(), region: z.string().optional(), address: z.string().max(255).optional() }); // GET /public-api/resources/sub-operators/v2.0/{subOperator} // DELETE /public-api/resources/sub-operators/v2.0/{subOperator} // PATCH /public-api/resources/sub-operators/v2.0/{subOperator} export const subOperatorUpdateBody = z.object({ translatedName: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).min(1).optional(), translatedAddress: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).optional(), translatedCity: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).optional(), translatedRegion: z.array(z.object({ locale: z.string(), translation: z.string().max(255) })).optional(), name: z.string().max(255).optional(), businessName: z.string().max(255).optional(), externalId: z.string().max(255).optional(), regNo: z.string().max(255).optional(), taxNo: z.string().max(255).optional(), country: z.union([z.literal("AF"), z.literal("AX"), z.literal("AL"), z.literal("DZ"), z.literal("AS"), z.literal("AD"), z.literal("AO"), z.literal("AI"), z.literal("AQ"), z.literal("AG"), z.literal("AR"), z.literal("AM"), z.literal("AW"), z.literal("AU"), z.literal("AT"), z.literal("AZ"), z.literal("BS"), z.literal("BH"), z.literal("BD"), z.literal("BB"), z.literal("BY"), z.literal("BE"), z.literal("BZ"), z.literal("BJ"), z.literal("BM"), z.literal("BT"), z.literal("BO"), z.literal("BQ"), z.literal("BA"), z.literal("BW"), z.literal("BV"), z.literal("BR"), z.literal("IO"), z.literal("BN"), z.literal("BG"), z.literal("BF"), z.literal("BI"), z.literal("KH"), z.literal("CM"), z.literal("CA"), z.literal("CV"), z.literal("KY"), z.literal("CF"), z.literal("TD"), z.literal("CL"), z.literal("CN"), z.literal("CX"), z.literal("CC"), z.literal("CO"), z.literal("KM"), z.literal("CG"), z.literal("CD"), z.literal("CK"), z.literal("CR"), z.literal("CI"), z.literal("HR"), z.literal("CU"), z.literal("CW"), z.literal("CY"), z.literal("CZ"), z.literal("DK"), z.literal("DJ"), z.literal("DM"), z.literal("DO"), z.literal("EC"), z.literal("EG"), z.literal("SV"), z.literal("GQ"), z.literal("ER"), z.literal("EE"), z.literal("ET"), z.literal("FK"), z.literal("FO"), z.literal("FJ"), z.literal("FI"), z.literal("FR"), z.literal("GF"), z.literal("PF"), z.literal("TF"), z.literal("GA"), z.literal("GM"), z.literal("GE"), z.literal("DE"), z.literal("GH"), z.literal("GI"), z.literal("GR"), z.literal("GL"), z.literal("GD"), z.literal("GP"), z.literal("GU"), z.literal("GT"), z.literal("GG"), z.literal("GN"), z.literal("GW"), z.literal("GY"), z.literal("HT"), z.literal("HM"), z.literal("VA"), z.literal("HN"), z.literal("HK"), z.literal("HU"), z.literal("IS"), z.literal("IN"), z.literal("ID"), z.literal("IR"), z.literal("IQ"), z.literal("IE"), z.literal("IM"), z.literal("IL"), z.literal("IT"), z.literal("JM"), z.literal("JP"), z.literal("JE"), z.literal("JO"), z.literal("KZ"), z.literal("KE"), z.literal("KI"), z.literal("KP"), z.literal("KR"), z.literal("XK"), z.literal("KW"), z.literal("KG"), z.literal("LA"), z.literal("LV"), z.literal("LB"), z.literal("LS"), z.literal("LR"), z.literal("LY"), z.literal("LI"), z.literal("LT"), z.literal("LU"), z.literal("MO"), z.literal("MK"), z.literal("MG"), z.literal("MW"), z.literal("MY"), z.literal("MV"), z.literal("ML"), z.literal("MT"), z.literal("MH"), z.literal("MQ"), z.literal("MR"), z.literal("MU"), z.literal("YT"), z.literal("MX"), z.literal("FM"), z.literal("MD"), z.literal("MC"), z.literal("MN"), z.literal("ME"), z.literal("MS"), z.literal("MA"), z.literal("MZ"), z.literal("MM"), z.literal("NA"), z.literal("NR"), z.literal("NP"), z.literal("NL"), z.literal("NC"), z.literal("NZ"), z.literal("NI"), z.literal("NE"), z.literal("NG"), z.literal("NU"), z.literal("NF"), z.literal("MP"), z.literal("NO"), z.literal("OM"), z.literal("PK"), z.literal("PW"), z.literal("PS"), z.literal("PA"), z.literal("PG"), z.literal("PY"), z.literal("PE"), z.literal("PH"), z.literal("PN"), z.literal("PL"), z.literal("PT"), z.literal("PR"), z.literal("QA"), z.literal("RE"), z.literal("RO"), z.literal("RU"), z.literal("RW"), z.literal("BL"), z.literal("SH"), z.literal("KN"), z.literal("LC"), z.literal("MF"), z.literal("PM"), z.literal("VC"), z.literal("WS"), z.literal("SM"), z.literal("ST"), z.literal("SA"), z.literal("SN"), z.literal("RS"), z.literal("SC"), z.literal("SL"), z.literal("SG"), z.literal("SX"), z.literal("SK"), z.literal("SI"), z.literal("SB"), z.literal("SO"), z.literal("ZA"), z.literal("GS"), z.literal("SS"), z.literal("ES"), z.literal("LK"), z.literal("SD"), z.literal("SR"), z.literal("SJ"), z.literal("SZ"), z.literal("SE"), z.literal("CH"), z.literal("SY"), z.literal("TW"), z.literal("TJ"), z.literal("TZ"), z.literal("TH"), z.literal("TL"), z.literal("TG"), z.literal("TK"), z.literal("TO"), z.literal("TT"), z.literal("TN"), z.literal("TR"), z.literal("TM"), z.literal("TC"), z.literal("TV"), z.literal("UG"), z.literal("UA"), z.literal("AE"), z.literal("GB"), z.literal("US"), z.literal("UM"), z.literal("UY"), z.literal("UZ"), z.literal("VU"), z.literal("VE"), z.literal("VN"), z.literal("VG"), z.literal("VI"), z.literal("WF"), z.literal("EH"), z.literal("YE"), z.literal("ZM"), z.literal("ZW"), z.null()]).optional(), city: z.string().max(255).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), region: z.string().optional(), postcode: z.string().max(255).optional(), address: z.string().max(255).optional(), contactPerson: z.string().max(255).optional(), phone: z.string().max(255).optional(), email: z.string().max(255).optional(), faultNotificationsEmail: z.string().email().max(255).optional(), businessOperationalContext: z.string().optional(), capabilities: z.object({ canControlChargePoints: z.boolean().optional(), canControlTariff: z.boolean().optional(), canControlTariffGroups: z.boolean().optional(), canControlPartnersTariffsAndTariffGroups: z.boolean().optional() }).optional(), partnerIds: z.array(z.number().int()).optional() }); // GET /public-api/resources/sub-operators/v2.0/{subOperator}/notes // POST /public-api/resources/sub-operators/v2.0/{subOperator}/notes export const subOperatorNoteCreateBody = z.object({ summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/sub-operators/v2.0/{subOperator}/notes/{note} // DELETE /public-api/resources/sub-operators/v2.0/{subOperator}/notes/{note} // PATCH /public-api/resources/sub-operators/v2.0/{subOperator}/notes/{note} export const subOperatorNoteUpdateBody = z.object({ summary: z.string().max(255).optional(), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/subscription-plans/v1.0 // GET /public-api/resources/subscription-plans/v2.0 // POST /public-api/resources/subscription-plans/v2.0 export const subscriptionPlanCreateBody = z.object({ operatorId: z.number().int().optional(), name: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), description: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })), renewalCycle: z.enum(["monthly", "annually"]), freeRenewalPeriods: z.number().int().optional(), type: z.enum(["pre-paid", "post-paid"]), baseFee: z.number().optional(), baseFeeAppliesPerEachHomeCharger: z.boolean().optional(), feePerEachPersonalChargePoint: z.number().optional(), postPaidChargingSessionsAccumulation: z.enum(["none", "personal", "personal_commercial"]).optional(), billingUsageThreshold: z.number().int().optional(), billingType: z.enum(["default", "internal", "external"]).optional(), status: z.enum(["enabled", "disabled"]), allowance: z.object({ resetCycle: z.enum(["as_renewal_cycle", "after_each_session", "after_24_hours", "after_each_week", "after_each_month", "after_each_year"]).optional(), type: z.enum(["none", "combined", "separate"]).optional(), homeChargersOnly: z.boolean().optional(), includedCountries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional(), excludedCountries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional(), excludeRoaming: z.boolean().optional(), includedPartnerChargePoints: z.array(z.number().int()).optional(), excludedPartnerChargePoints: z.array(z.number().int()).optional(), combined: z.number().int().min(0).max(4000000).optional(), ac: z.number().int().min(0).max(4000000).optional(), dc: z.number().int().min(0).max(4000000).optional() }).optional(), visibilityRestrictions: z.object({ includedPartnerUsers: z.array(z.number().int()).optional(), excludedPartnerUsers: z.array(z.number().int()).optional(), includedUserGroups: z.array(z.number().int()).optional(), excludedUserGroups: z.array(z.number().int()).optional() }).optional(), externalId: z.string().max(255).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/subscription-plans/v2.0/{subscriptionPlan} // DELETE /public-api/resources/subscription-plans/v2.0/{subscriptionPlan} // PATCH /public-api/resources/subscription-plans/v2.0/{subscriptionPlan} export const subscriptionPlanUpdateBody = z.object({ name: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), description: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), renewalCycle: z.enum(["monthly", "annually"]).optional(), freeRenewalPeriods: z.number().int().optional(), type: z.enum(["pre-paid", "post-paid"]).optional(), baseFee: z.number().optional(), feePerEachPersonalChargePoint: z.number().optional(), postPaidChargingSessionsAccumulation: z.enum(["none", "personal", "personal_commercial"]).optional(), billingUsageThreshold: z.number().int().optional(), billingType: z.enum(["default", "internal", "external"]).optional(), status: z.enum(["enabled", "disabled"]).optional(), allowance: z.object({ resetCycle: z.enum(["as_renewal_cycle", "after_each_session", "after_24_hours", "after_each_week", "after_each_month", "after_each_year"]).optional(), type: z.enum(["none", "combined", "separate"]).optional(), homeChargersOnly: z.boolean().optional(), includedCountries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional(), excludedCountries: z.array(z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])).optional(), excludeRoaming: z.boolean().optional(), includedPartnerChargePoints: z.array(z.number().int()).optional(), excludedPartnerChargePoints: z.array(z.number().int()).optional(), combined: z.number().int().min(0).max(4000000).optional(), ac: z.number().int().min(0).max(4000000).optional(), dc: z.number().int().min(0).max(4000000).optional() }).optional(), visibilityRestrictions: z.object({ includedPartnerUsers: z.array(z.number().int()).optional(), excludedPartnerUsers: z.array(z.number().int()).optional(), includedUserGroups: z.array(z.number().int()).optional(), excludedUserGroups: z.array(z.number().int()).optional() }).optional(), externalId: z.string().max(255).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/subscriptions/v1.0 // GET /public-api/resources/subscriptions/v1.0/{subscription} // GET /public-api/resources/tariff-groups/v1.0 // POST /public-api/resources/tariff-groups/v1.0 export const tariffGroupCreateBody = z.object({ operatorId: z.number().int().optional(), display: z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), totalCostFallbackMessage: z.string().max(150).optional() }).optional(), name: z.string(), tariffIds: z.array(z.number().int()).optional(), partnerId: z.number().int().optional(), offlineTariffId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/tariff-groups/v1.0/{tariffGroup} // PUT /public-api/resources/tariff-groups/v1.0/{tariffGroup} export const tariffGroupUpdateBody = z.object({ display: z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), totalCostFallbackMessage: z.string().max(150).optional() }).optional(), name: z.string(), tariffIds: z.array(z.number().int()).optional(), partnerId: z.number().int().optional(), offlineTariffId: z.number().int().optional(), lastUpdatedAt: z.string().datetime().optional() }); // DELETE /public-api/resources/tariff-groups/v1.0/{tariffGroup} // GET /public-api/resources/tariff-snapshots/v1.0/{tariffSnapshot} // GET /public-api/resources/tariffs/v1.0 // POST /public-api/resources/tariffs/v1.0 export const tariffCreateBody = z.object({ operatorId: z.number().int().optional(), name: z.string(), description: z.record(z.string()).optional(), additionalInformation: z.record(z.string()).optional(), learnMoreUrl: z.record(z.string()).optional(), dayTariffStart: z.string().optional(), nightTariffStart: z.string().optional(), pricing: z.object({ pricePerSession: z.number().optional(), connectionFee: z.number().optional(), pricePerKwh: z.number().optional(), dayPricePerKwh: z.number().optional(), nightPricePerKwh: z.number().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePerPeriod: z.number().optional(), durationFeeLimit: z.number().optional(), durationFeeCapMinutes: z.number().int().optional(), dayPricePerPeriod: z.number().optional(), nightPricePerPeriod: z.number().optional(), dayIdleFeePerMinute: z.number().optional(), nightIdleFeePerMinute: z.number().optional(), idleFeePerMinute: z.number().optional(), idleFeeGracePeriodMinutes: z.number().optional(), idleFeeGracePeriodMode: z.enum(["idle_detection", "session_start"]).optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), idleFeePeriodStart: z.string().optional(), idleFeePeriodEnd: z.string().optional(), idleFeeLimit: z.number().optional(), idleFeeCapMinutes: z.number().int().optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), minPrice: z.number().optional(), preAuthorizeAmount: z.number().optional(), incrementalPreAuthorizationAmount: z.number().optional(), taxID: z.number().int().optional(), chargePointElectricityRate: z.boolean().optional(), fallbackElectricityRateId: z.number().int().optional(), markupPercentagePerKwh: z.number().optional(), markupFixedFeePerKwh: z.number().optional(), flexibleMarkUpAsFixedPerKwh: z.object({ defaultPrice: z.number().optional(), intervalPricing: z.array(z.object({ startsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), price: z.number() })).optional() }).optional(), multiPricePerKwh: z.array(z.object({ firstKwh: z.number(), lastKwh: z.number().optional(), feePerKwh: z.number().optional(), flatFee: z.number().optional() })).optional(), multiPricePerDuration: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), multiIdleFee: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), regularUsePeriod: z.number().optional(), averagePowerLevels: z.array(z.object({ averagePowerUpToKw: z.number(), pricePerMinute: z.number() })).optional(), peakPowerLevels: z.array(z.object({ peakPowerUpToKw: z.number(), regularPricePerMinute: z.number(), excessUsePricePerMin: z.number() })).optional(), timePeriods: z.array(z.object({ startTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")) })).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional(), daysWhenApplied: z.array(z.object({ name: z.string().optional(), specialDates: z.array(z.string()).optional(), idleFeeGracePeriodMinutes: z.number().optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional() })).optional(), thresholdPriceForEnergy: z.number().optional(), priceForEnergyWhenOptimized: z.number().optional(), optimisedLabel: z.string().optional(), durationFeeFrom: z.string().optional(), durationFeeTo: z.string().optional(), subsidyIntegrationId: z.number().int().optional(), subsidy: z.object({ integrationId: z.number().int(), threshold: z.number(), compensationRate: z.number() }).optional(), lockPriceOnSessionStart: z.boolean().optional(), lockEnergyPriceOnSessionStart: z.boolean().optional(), lockDurationPriceOnSessionStart: z.boolean().optional(), lockIdlePriceOnSessionStart: z.boolean().optional(), stateOfChargeIdleThreshold: z.union([z.literal(75), z.literal(80), z.literal(85), z.literal(90), z.literal(95), z.literal(100)]).optional(), averagePowerIdleThreshold: z.number().min(0).max(999999.99).optional() }).optional(), discountTariffSettings: z.object({ discountReferenceType: z.enum(["base_tariff", "specific_tariff", "roaming_tariff"]).optional(), referencedTariffId: z.number().int().optional(), discountMode: z.enum(["global", "per_element"]).optional(), discountPercentage: z.number().min(0).max(100).optional(), discountType: z.enum(["percentage", "flat_amount"]).optional(), discountValue: z.number().min(0).optional(), discountElements: z.array(z.object({ serviceFeeType: z.enum(["flat", "connection", "energy", "charging_time", "idle_time", "min_price", "service_fee"]), discountType: z.enum(["percentage", "flat_amount"]), discountValue: z.number().min(0) })).optional() }).optional(), stopSession: z.object({ timeLimitMinutes: z.number().optional(), stopWhenEnergyExceedsKwh: z.number().optional(), stopWhenSocExceedsPercent: z.number().int().min(70).max(99).optional() }).optional(), restrictions: z.object({ applyToUsersOfChargePointOwner: z.boolean().optional(), applyToUsersOfChargePointPartner: z.boolean().optional(), applyToUsersOfAllRoamingEmsps: z.boolean().optional(), applyToAdHocUsers: z.boolean().optional(), adHocPreAuthorizeAmount: z.number().min(0).optional(), adHocIncrementalPreAuthorizationAmount: z.number().optional(), adHocStopWhenPreAuthorizedAmountFallsBelow: z.number().optional(), applyToAdHocOperatorIds: z.array(z.number().int().min(1)).optional(), applyToUsersOfPartners: z.array(z.number()).optional(), applyToUsersWithGroups: z.array(z.string()).optional(), applyToHomeChargingOwner: z.boolean().optional(), applyToHomeChargingSharedUsers: z.boolean().optional(), applyToUserGroupIds: z.array(z.number()).optional(), applyToUsersWithSubscriptions: z.array(z.number()).optional(), applyToAuthorizationMethods: z.array(z.enum(["id_tag", "mac_address", "user_device", "plug_and_charge", "plug_and_charge_iso15118"])).optional(), startDate: z.string().optional(), endDate: z.string().optional() }).optional(), partner: z.object({ id: z.number().int().optional() }).optional(), display: z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), priceInformation: z.string().optional(), priceInformationLocalized: z.record(z.string()).optional(), totalCostInformation: z.string().optional(), totalCostInformationLocalized: z.record(z.string()).optional(), plainTextModeEnabled: z.boolean().optional() }).optional(), integrationId: z.number().int().optional(), externalId: z.string().optional(), type: z.enum(["free", "flat rate", "duration+energy", "duration+energy time of day", "energy tou", "standard", "charging not allowed", "average power levels", "peak power levels", "standard_tod", "optimised dynamic pricing", "discount based"]) }); // GET /public-api/resources/tariffs/v1.0/{tariff} // PUT /public-api/resources/tariffs/v1.0/{tariff} export const tariffUpdateBody = z.object({ name: z.string(), description: z.record(z.string()).optional(), additionalInformation: z.record(z.string()).optional(), learnMoreUrl: z.record(z.string()).optional(), dayTariffStart: z.string().optional(), nightTariffStart: z.string().optional(), pricing: z.object({ pricePerSession: z.number().optional(), connectionFee: z.number().optional(), pricePerKwh: z.number().optional(), dayPricePerKwh: z.number().optional(), nightPricePerKwh: z.number().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePerPeriod: z.number().optional(), durationFeeLimit: z.number().optional(), durationFeeCapMinutes: z.number().int().optional(), dayPricePerPeriod: z.number().optional(), nightPricePerPeriod: z.number().optional(), dayIdleFeePerMinute: z.number().optional(), nightIdleFeePerMinute: z.number().optional(), idleFeePerMinute: z.number().optional(), idleFeeGracePeriodMinutes: z.number().optional(), idleFeeGracePeriodMode: z.enum(["idle_detection", "session_start"]).optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), idleFeePeriodStart: z.string().optional(), idleFeePeriodEnd: z.string().optional(), idleFeeLimit: z.number().optional(), idleFeeCapMinutes: z.number().int().optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), minPrice: z.number().optional(), preAuthorizeAmount: z.number().optional(), incrementalPreAuthorizationAmount: z.number().optional(), taxID: z.number().int().optional(), chargePointElectricityRate: z.boolean().optional(), fallbackElectricityRateId: z.number().int().optional(), markupPercentagePerKwh: z.number().optional(), markupFixedFeePerKwh: z.number().optional(), flexibleMarkUpAsFixedPerKwh: z.object({ defaultPrice: z.number().optional(), intervalPricing: z.array(z.object({ startsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), price: z.number() })).optional() }).optional(), multiPricePerKwh: z.array(z.object({ firstKwh: z.number(), lastKwh: z.number().optional(), feePerKwh: z.number().optional(), flatFee: z.number().optional() })).optional(), multiPricePerDuration: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), multiIdleFee: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), regularUsePeriod: z.number().optional(), averagePowerLevels: z.array(z.object({ averagePowerUpToKw: z.number(), pricePerMinute: z.number() })).optional(), peakPowerLevels: z.array(z.object({ peakPowerUpToKw: z.number(), regularPricePerMinute: z.number(), excessUsePricePerMin: z.number() })).optional(), timePeriods: z.array(z.object({ startTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")) })).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional(), daysWhenApplied: z.array(z.object({ name: z.string().optional(), specialDates: z.array(z.string()).optional(), idleFeeGracePeriodMinutes: z.number().optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional() })).optional(), thresholdPriceForEnergy: z.number().optional(), priceForEnergyWhenOptimized: z.number().optional(), optimisedLabel: z.string().optional(), durationFeeFrom: z.string().optional(), durationFeeTo: z.string().optional(), subsidyIntegrationId: z.number().int().optional(), subsidy: z.object({ integrationId: z.number().int(), threshold: z.number(), compensationRate: z.number() }).optional(), lockPriceOnSessionStart: z.boolean().optional(), lockEnergyPriceOnSessionStart: z.boolean().optional(), lockDurationPriceOnSessionStart: z.boolean().optional(), lockIdlePriceOnSessionStart: z.boolean().optional(), stateOfChargeIdleThreshold: z.union([z.literal(75), z.literal(80), z.literal(85), z.literal(90), z.literal(95), z.literal(100)]).optional(), averagePowerIdleThreshold: z.number().min(0).max(999999.99).optional() }).optional(), discountTariffSettings: z.object({ discountReferenceType: z.enum(["base_tariff", "specific_tariff", "roaming_tariff"]).optional(), referencedTariffId: z.number().int().optional(), discountMode: z.enum(["global", "per_element"]).optional(), discountPercentage: z.number().min(0).max(100).optional(), discountType: z.enum(["percentage", "flat_amount"]).optional(), discountValue: z.number().min(0).optional(), discountElements: z.array(z.object({ serviceFeeType: z.enum(["flat", "connection", "energy", "charging_time", "idle_time", "min_price", "service_fee"]), discountType: z.enum(["percentage", "flat_amount"]), discountValue: z.number().min(0) })).optional() }).optional(), stopSession: z.object({ timeLimitMinutes: z.number().optional(), stopWhenEnergyExceedsKwh: z.number().optional(), stopWhenSocExceedsPercent: z.number().int().min(70).max(99).optional() }).optional(), restrictions: z.object({ applyToUsersOfChargePointOwner: z.boolean().optional(), applyToUsersOfChargePointPartner: z.boolean().optional(), applyToUsersOfAllRoamingEmsps: z.boolean().optional(), applyToAdHocUsers: z.boolean().optional(), adHocPreAuthorizeAmount: z.number().min(0).optional(), adHocIncrementalPreAuthorizationAmount: z.number().optional(), adHocStopWhenPreAuthorizedAmountFallsBelow: z.number().optional(), applyToAdHocOperatorIds: z.array(z.number().int().min(1)).optional(), applyToUsersOfPartners: z.array(z.number()).optional(), applyToUsersWithGroups: z.array(z.string()).optional(), applyToHomeChargingOwner: z.boolean().optional(), applyToHomeChargingSharedUsers: z.boolean().optional(), applyToUserGroupIds: z.array(z.number()).optional(), applyToUsersWithSubscriptions: z.array(z.number()).optional(), applyToAuthorizationMethods: z.array(z.enum(["id_tag", "mac_address", "user_device", "plug_and_charge", "plug_and_charge_iso15118"])).optional(), startDate: z.string().optional(), endDate: z.string().optional() }).optional(), partner: z.object({ id: z.number().int().optional() }).optional(), display: z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), priceInformation: z.string().optional(), priceInformationLocalized: z.record(z.string()).optional(), totalCostInformation: z.string().optional(), totalCostInformationLocalized: z.record(z.string()).optional(), plainTextModeEnabled: z.boolean().optional() }).optional(), integrationId: z.number().int().optional(), externalId: z.string().optional(), type: z.enum(["free", "flat rate", "duration+energy", "duration+energy time of day", "energy tou", "standard", "charging not allowed", "average power levels", "peak power levels", "standard_tod", "optimised dynamic pricing", "discount based"]) }); // DELETE /public-api/resources/tariffs/v1.0/{tariff} // PATCH /public-api/resources/tariffs/v1.0/{tariff} export const tariffPartialUpdateBody = z.object({ name: z.string().optional(), description: z.record(z.string()).optional(), additionalInformation: z.record(z.string()).optional(), learnMoreUrl: z.record(z.string()).optional(), dayTariffStart: z.string().optional(), nightTariffStart: z.string().optional(), pricing: z.object({ pricePerSession: z.number().optional(), connectionFee: z.number().optional(), pricePerKwh: z.number().optional(), dayPricePerKwh: z.number().optional(), nightPricePerKwh: z.number().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePerPeriod: z.number().optional(), durationFeeLimit: z.number().optional(), durationFeeCapMinutes: z.number().int().optional(), dayPricePerPeriod: z.number().optional(), nightPricePerPeriod: z.number().optional(), dayIdleFeePerMinute: z.number().optional(), nightIdleFeePerMinute: z.number().optional(), idleFeePerMinute: z.number().optional(), idleFeeGracePeriodMinutes: z.number().optional(), idleFeeGracePeriodMode: z.enum(["idle_detection", "session_start"]).optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), idleFeePeriodStart: z.string().optional(), idleFeePeriodEnd: z.string().optional(), idleFeeLimit: z.number().optional(), idleFeeCapMinutes: z.number().int().optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), minPrice: z.number().optional(), preAuthorizeAmount: z.number().optional(), incrementalPreAuthorizationAmount: z.number().optional(), taxID: z.number().int().optional(), chargePointElectricityRate: z.boolean().optional(), fallbackElectricityRateId: z.number().int().optional(), markupPercentagePerKwh: z.number().optional(), markupFixedFeePerKwh: z.number().optional(), flexibleMarkUpAsFixedPerKwh: z.object({ defaultPrice: z.number().optional(), intervalPricing: z.array(z.object({ startsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), price: z.number() })).optional() }).optional(), multiPricePerKwh: z.array(z.object({ firstKwh: z.number(), lastKwh: z.number().optional(), feePerKwh: z.number().optional(), flatFee: z.number().optional() })).optional(), multiPricePerDuration: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), multiIdleFee: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), regularUsePeriod: z.number().optional(), averagePowerLevels: z.array(z.object({ averagePowerUpToKw: z.number(), pricePerMinute: z.number() })).optional(), peakPowerLevels: z.array(z.object({ peakPowerUpToKw: z.number(), regularPricePerMinute: z.number(), excessUsePricePerMin: z.number() })).optional(), timePeriods: z.array(z.object({ startTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")) })).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional(), daysWhenApplied: z.array(z.object({ name: z.string().optional(), specialDates: z.array(z.string()).optional(), idleFeeGracePeriodMinutes: z.number().optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional() })).optional(), thresholdPriceForEnergy: z.number().optional(), priceForEnergyWhenOptimized: z.number().optional(), optimisedLabel: z.string().optional(), durationFeeFrom: z.string().optional(), durationFeeTo: z.string().optional(), subsidyIntegrationId: z.number().int().optional(), subsidy: z.object({ integrationId: z.number().int(), threshold: z.number(), compensationRate: z.number() }).optional(), lockPriceOnSessionStart: z.boolean().optional(), lockEnergyPriceOnSessionStart: z.boolean().optional(), lockDurationPriceOnSessionStart: z.boolean().optional(), lockIdlePriceOnSessionStart: z.boolean().optional(), stateOfChargeIdleThreshold: z.union([z.literal(75), z.literal(80), z.literal(85), z.literal(90), z.literal(95), z.literal(100)]).optional(), averagePowerIdleThreshold: z.number().min(0).max(999999.99).optional() }).optional(), discountTariffSettings: z.object({ discountReferenceType: z.enum(["base_tariff", "specific_tariff", "roaming_tariff"]).optional(), referencedTariffId: z.number().int().optional(), discountMode: z.enum(["global", "per_element"]).optional(), discountPercentage: z.number().min(0).max(100).optional(), discountType: z.enum(["percentage", "flat_amount"]).optional(), discountValue: z.number().min(0).optional(), discountElements: z.array(z.object({ serviceFeeType: z.enum(["flat", "connection", "energy", "charging_time", "idle_time", "min_price", "service_fee"]), discountType: z.enum(["percentage", "flat_amount"]), discountValue: z.number().min(0) })).optional() }).optional(), stopSession: z.object({ timeLimitMinutes: z.number().optional(), stopWhenEnergyExceedsKwh: z.number().optional(), stopWhenSocExceedsPercent: z.number().int().min(70).max(99).optional() }).optional(), restrictions: z.object({ applyToUsersOfChargePointOwner: z.boolean().optional(), applyToUsersOfChargePointPartner: z.boolean().optional(), applyToUsersOfAllRoamingEmsps: z.boolean().optional(), applyToAdHocUsers: z.boolean().optional(), adHocPreAuthorizeAmount: z.number().min(0).optional(), adHocIncrementalPreAuthorizationAmount: z.number().optional(), adHocStopWhenPreAuthorizedAmountFallsBelow: z.number().optional(), applyToAdHocOperatorIds: z.array(z.number().int().min(1)).optional(), applyToUsersOfPartners: z.array(z.number()).optional(), applyToUsersWithGroups: z.array(z.string()).optional(), applyToHomeChargingOwner: z.boolean().optional(), applyToHomeChargingSharedUsers: z.boolean().optional(), applyToUserGroupIds: z.array(z.number()).optional(), applyToUsersWithSubscriptions: z.array(z.number()).optional(), applyToAuthorizationMethods: z.array(z.enum(["id_tag", "mac_address", "user_device", "plug_and_charge", "plug_and_charge_iso15118"])).optional(), startDate: z.string().optional(), endDate: z.string().optional() }).optional(), partner: z.object({ id: z.number().int().optional() }).optional(), display: z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), priceInformation: z.string().optional(), priceInformationLocalized: z.record(z.string()).optional(), totalCostInformation: z.string().optional(), totalCostInformationLocalized: z.record(z.string()).optional(), plainTextModeEnabled: z.boolean().optional() }).optional(), integrationId: z.number().int().optional(), externalId: z.string().optional() }); // GET /public-api/resources/tariffs/v1.0/{tariff}/scheduled-changes // POST /public-api/resources/tariffs/v1.0/{tariff}/scheduled-changes export const tariffScheduledChangeCreateBody = z.object({ scheduledAt: z.string().datetime(), name: z.string().optional(), type: z.enum(["free", "flat rate", "duration+energy", "duration+energy time of day", "energy tou", "standard", "charging not allowed", "average power levels", "peak power levels", "standard_tod", "optimised dynamic pricing"]).optional(), description: z.record(z.string()).optional(), additionalInformation: z.record(z.string()).optional(), learnMoreUrl: z.record(z.string()).optional(), dayTariffStart: z.string().optional(), nightTariffStart: z.string().optional(), pricing: z.object({ pricePerSession: z.number().optional(), connectionFee: z.number().optional(), pricePerKwh: z.number().optional(), dayPricePerKwh: z.number().optional(), nightPricePerKwh: z.number().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePerPeriod: z.number().optional(), durationFeeLimit: z.number().optional(), durationFeeCapMinutes: z.number().int().optional(), dayPricePerPeriod: z.number().optional(), nightPricePerPeriod: z.number().optional(), dayIdleFeePerMinute: z.number().optional(), nightIdleFeePerMinute: z.number().optional(), idleFeePerMinute: z.number().optional(), idleFeeGracePeriodMinutes: z.number().optional(), idleFeeGracePeriodMode: z.enum(["idle_detection", "session_start"]).optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), idleFeePeriodStart: z.string().optional(), idleFeePeriodEnd: z.string().optional(), idleFeeLimit: z.number().optional(), idleFeeCapMinutes: z.number().int().optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), minPrice: z.number().optional(), preAuthorizeAmount: z.number().optional(), incrementalPreAuthorizationAmount: z.number().optional(), taxID: z.number().int().optional(), chargePointElectricityRate: z.boolean().optional(), fallbackElectricityRateId: z.number().int().optional(), markupPercentagePerKwh: z.number().optional(), markupFixedFeePerKwh: z.number().optional(), flexibleMarkUpAsFixedPerKwh: z.object({ defaultPrice: z.number().optional(), intervalPricing: z.array(z.object({ startsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), price: z.number() })).optional() }).optional(), multiPricePerKwh: z.array(z.object({ firstKwh: z.number(), lastKwh: z.number().optional(), feePerKwh: z.number().optional(), flatFee: z.number().optional() })).optional(), multiPricePerDuration: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), multiIdleFee: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), regularUsePeriod: z.number().optional(), averagePowerLevels: z.array(z.object({ averagePowerUpToKw: z.number(), pricePerMinute: z.number() })).optional(), peakPowerLevels: z.array(z.object({ peakPowerUpToKw: z.number(), regularPricePerMinute: z.number(), excessUsePricePerMin: z.number() })).optional(), timePeriods: z.array(z.object({ startTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")) })).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional(), daysWhenApplied: z.array(z.object({ name: z.string().optional(), specialDates: z.array(z.string()).optional(), idleFeeGracePeriodMinutes: z.number().optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional() })).optional(), thresholdPriceForEnergy: z.number().optional(), priceForEnergyWhenOptimized: z.number().optional(), optimisedLabel: z.string().optional(), durationFeeFrom: z.string().optional(), durationFeeTo: z.string().optional(), subsidyIntegrationId: z.number().int().optional(), subsidy: z.object({ integrationId: z.number().int(), threshold: z.number(), compensationRate: z.number() }).optional(), lockPriceOnSessionStart: z.boolean().optional(), lockEnergyPriceOnSessionStart: z.boolean().optional(), lockDurationPriceOnSessionStart: z.boolean().optional(), lockIdlePriceOnSessionStart: z.boolean().optional(), stateOfChargeIdleThreshold: z.union([z.literal(75), z.literal(80), z.literal(85), z.literal(90), z.literal(95), z.literal(100)]).optional(), averagePowerIdleThreshold: z.number().min(0).max(999999.99).optional() }).optional(), stopSession: z.object({ timeLimitMinutes: z.number().optional(), stopWhenEnergyExceedsKwh: z.number().optional(), stopWhenSocExceedsPercent: z.number().int().min(70).max(99).optional() }).optional(), display: z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), priceInformation: z.string().optional(), priceInformationLocalized: z.record(z.string()).optional(), totalCostInformation: z.string().optional(), totalCostInformationLocalized: z.record(z.string()).optional(), plainTextModeEnabled: z.boolean().optional() }).optional() }); // GET /public-api/resources/tariffs/v1.0/{tariff}/scheduled-changes/{scheduledChange} // DELETE /public-api/resources/tariffs/v1.0/{tariff}/scheduled-changes/{scheduledChange} // PATCH /public-api/resources/tariffs/v1.0/{tariff}/scheduled-changes/{scheduledChange} export const tariffScheduledChangeUpdateBody = z.object({ scheduledAt: z.string().datetime().optional(), name: z.string().optional(), type: z.enum(["free", "flat rate", "duration+energy", "duration+energy time of day", "energy tou", "standard", "charging not allowed", "average power levels", "peak power levels", "standard_tod", "optimised dynamic pricing"]).optional(), description: z.record(z.string()).optional(), additionalInformation: z.record(z.string()).optional(), learnMoreUrl: z.record(z.string()).optional(), dayTariffStart: z.string().optional(), nightTariffStart: z.string().optional(), pricing: z.object({ pricePerSession: z.number().optional(), connectionFee: z.number().optional(), pricePerKwh: z.number().optional(), dayPricePerKwh: z.number().optional(), nightPricePerKwh: z.number().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePerPeriod: z.number().optional(), durationFeeLimit: z.number().optional(), durationFeeCapMinutes: z.number().int().optional(), dayPricePerPeriod: z.number().optional(), nightPricePerPeriod: z.number().optional(), dayIdleFeePerMinute: z.number().optional(), nightIdleFeePerMinute: z.number().optional(), idleFeePerMinute: z.number().optional(), idleFeeGracePeriodMinutes: z.number().optional(), idleFeeGracePeriodMode: z.enum(["idle_detection", "session_start"]).optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), idleFeePeriodStart: z.string().optional(), idleFeePeriodEnd: z.string().optional(), idleFeeLimit: z.number().optional(), idleFeeCapMinutes: z.number().int().optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), minPrice: z.number().optional(), preAuthorizeAmount: z.number().optional(), incrementalPreAuthorizationAmount: z.number().optional(), taxID: z.number().int().optional(), chargePointElectricityRate: z.boolean().optional(), fallbackElectricityRateId: z.number().int().optional(), markupPercentagePerKwh: z.number().optional(), markupFixedFeePerKwh: z.number().optional(), flexibleMarkUpAsFixedPerKwh: z.object({ defaultPrice: z.number().optional(), intervalPricing: z.array(z.object({ startsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endsAt: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), price: z.number() })).optional() }).optional(), multiPricePerKwh: z.array(z.object({ firstKwh: z.number(), lastKwh: z.number().optional(), feePerKwh: z.number().optional(), flatFee: z.number().optional() })).optional(), multiPricePerDuration: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), multiIdleFee: z.array(z.object({ firstUnit: z.number().int(), lastUnit: z.number().int().optional(), feePerUnit: z.number().optional(), flatFee: z.number().optional() })).optional(), regularUsePeriod: z.number().optional(), averagePowerLevels: z.array(z.object({ averagePowerUpToKw: z.number(), pricePerMinute: z.number() })).optional(), peakPowerLevels: z.array(z.object({ peakPowerUpToKw: z.number(), regularPricePerMinute: z.number(), excessUsePricePerMin: z.number() })).optional(), timePeriods: z.array(z.object({ startTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")), endTime: z.string().regex(new RegExp("^\\d{2}:\\d{2}$")) })).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional(), daysWhenApplied: z.array(z.object({ name: z.string().optional(), specialDates: z.array(z.string()).optional(), idleFeeGracePeriodMinutes: z.number().optional(), idlePricingPeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), connectionFeeMinimumSessionDuration: z.number().int().optional(), connectionFeeMinimumSessionEnergy: z.number().optional(), durationFeeGracePeriod: z.number().int().optional(), pricePeriodInMinutes: z.union([z.literal(1), z.literal(15), z.literal(30), z.literal(60), z.literal(240), z.literal(360)]).optional(), pricePeriods: z.object({ connectionFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), energyFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), durationFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional(), idleFeePeriods: z.object({ fee: z.array(z.number()).optional() }).optional() }).optional() })).optional(), thresholdPriceForEnergy: z.number().optional(), priceForEnergyWhenOptimized: z.number().optional(), optimisedLabel: z.string().optional(), durationFeeFrom: z.string().optional(), durationFeeTo: z.string().optional(), subsidyIntegrationId: z.number().int().optional(), subsidy: z.object({ integrationId: z.number().int(), threshold: z.number(), compensationRate: z.number() }).optional(), lockPriceOnSessionStart: z.boolean().optional(), lockEnergyPriceOnSessionStart: z.boolean().optional(), lockDurationPriceOnSessionStart: z.boolean().optional(), lockIdlePriceOnSessionStart: z.boolean().optional(), stateOfChargeIdleThreshold: z.union([z.literal(75), z.literal(80), z.literal(85), z.literal(90), z.literal(95), z.literal(100)]).optional(), averagePowerIdleThreshold: z.number().min(0).max(999999.99).optional() }).optional(), stopSession: z.object({ timeLimitMinutes: z.number().optional(), stopWhenEnergyExceedsKwh: z.number().optional(), stopWhenSocExceedsPercent: z.number().int().min(70).max(99).optional() }).optional(), display: z.object({ defaultPriceInformation: z.string().max(150).optional(), defaultPriceInformationOffline: z.string().max(150).optional(), priceInformation: z.string().optional(), priceInformationLocalized: z.record(z.string()).optional(), totalCostInformation: z.string().optional(), totalCostInformationLocalized: z.record(z.string()).optional(), plainTextModeEnabled: z.boolean().optional() }).optional() }); // GET /public-api/resources/tax-identification-numbers/v2.0 // POST /public-api/resources/tax-identification-numbers/v2.0 export const taxIdentificationNumberCreateBody = z.object({ name: z.string() }); // GET /public-api/resources/tax-identification-numbers/v2.0/{taxIdentificationNumber} // DELETE /public-api/resources/tax-identification-numbers/v2.0/{taxIdentificationNumber} // PATCH /public-api/resources/tax-identification-numbers/v2.0/{taxIdentificationNumber} export const taxIdentificationNumberUpdateBody = z.object({ name: z.string().optional() }); // GET /public-api/resources/taxes/v2.0 // POST /public-api/resources/taxes/v2.0 export const taxCreateBody = z.object({ name: z.string(), displayName: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), percentage: z.number(), taxIdentificationNumberId: z.number().int().optional() }); // GET /public-api/resources/taxes/v2.0/{tax} // DELETE /public-api/resources/taxes/v2.0/{tax} // PATCH /public-api/resources/taxes/v2.0/{tax} export const taxUpdateBody = z.object({ name: z.string().optional(), displayName: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional(), percentage: z.number().optional(), taxIdentificationNumberId: z.number().int().optional() }); // GET /public-api/resources/templates/v1.0 // GET /public-api/resources/terms-and-policies/v2.0 // GET /public-api/resources/terms-and-policies/v2.0/{termVersion} // GET /public-api/resources/top-up-packages/v2.0 // POST /public-api/resources/top-up-packages/v2.0 export const topUpPackagCreateBody = z.object({ operatorId: z.number().int().optional(), price: z.number(), bonus: z.number(), enabled: z.boolean().optional() }); // GET /public-api/resources/top-up-packages/v2.0/{topUpPackage} // DELETE /public-api/resources/top-up-packages/v2.0/{topUpPackage} // PATCH /public-api/resources/top-up-packages/v2.0/{topUpPackage} export const topUpPackageUpdateBody = z.object({ price: z.number().optional(), bonus: z.number().optional(), enabled: z.boolean().optional() }); // GET /public-api/resources/transactions/v1.0 // POST /public-api/resources/transactions/v1.0 export const transactionsCreateBody = z.object({ operatorId: z.number().int().optional(), sessionId: z.number().int().optional(), paymentMethod: z.object({ cardType: z.enum(["credit", "debit", "prepaid"]).optional(), bin: z.string().min(1).max(255).optional(), fingerprint: z.string().min(1).max(255).optional(), acquirerName: z.string().min(1).max(255).optional(), issuerName: z.string().min(1).max(255).optional(), issuerCode: z.string().min(1).max(255).optional(), methodType: z.enum(["card", "bank_transfer", "wallet"]).optional(), cardNetwork: z.enum(["visa", "mastercard", "paypal", "maestro", "amex", "bancontact", "cartes_bancaires", "diners_club", "discover", "interac", "jcb", "mada", "visa_electron", "unknown"]).optional(), bankTransferType: z.enum(["pse", "sepa"]).optional(), walletType: z.enum(["applepay", "googlepay", "twint", "bancontact", "other"]).optional(), type: z.enum(["visa", "mastercard", "paypal", "maestro", "amex", "bancontact", "cartes_bancaires", "diners_club", "discover", "interac", "jcb", "mada", "visa_electron", "unknown"]).optional(), last4: z.string().min(4).max(4).optional(), expMonth: z.string().optional(), expYear: z.string().optional() }).optional(), totalAmount: z.number().min(0).max(10000000000000), authorizedAmount: z.number().min(0).max(10000000000000).optional(), status: z.enum(["pending", "finalized", "failed", "reversed", "refunded", "authorized", "initialized"]), ref: z.string().optional(), failureReason: z.string().optional(), invoiceRequired: z.boolean().optional(), email: z.string().email().optional(), locale: z.string().optional(), invoiceDetails: z.object({ invoiceType: z.enum(["individual", "company"]), individualName: z.string().optional(), individualPersonalId: z.string().optional(), individualTaxId: z.string().optional(), companyName: z.string().optional(), companyRegNo: z.string().optional(), companyTaxId: z.string().optional(), companyTaxAdministrationOfficeName: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), city: z.string().optional(), postCode: z.string().optional(), address: z.string().optional(), recipientCode: z.string().min(7).max(7).regex(new RegExp("^[A-Za-z0-9]{7}$")).optional(), recipientCertifiedEmail: z.string().email().optional() }).optional(), lastUpdatedAt: z.string().datetime().optional(), paymentMetadata: z.object({ applicationIdentifier: z.string().max(255).optional(), terminalIdentifier: z.string().max(255).optional(), merchantIdentifier: z.string().max(255).optional(), authorisationCode: z.string().max(255).optional(), acquirerIdentifier: z.string().max(255).optional(), cardholderVerificationMethod: z.enum(["no_cvm", "signature", "online_pin", "offline_pin", "consumer_device", "online_pin_and_signature", "offline_pin_and_signature"]).optional() }).optional(), paymentOrderReference: z.string().max(255).optional() }); // GET /public-api/resources/transactions/v1.0/{transaction} // PATCH /public-api/resources/transactions/v1.0/{transaction} export const transactionUpdateBody = z.object({ sessionId: z.number().int().optional(), paymentMethod: z.object({ cardType: z.enum(["credit", "debit", "prepaid"]).optional(), bin: z.string().min(1).max(255).optional(), fingerprint: z.string().min(1).max(255).optional(), acquirerName: z.string().min(1).max(255).optional(), issuerName: z.string().min(1).max(255).optional(), issuerCode: z.string().min(1).max(255).optional(), methodType: z.enum(["card", "bank_transfer"]).optional(), cardNetwork: z.enum(["visa", "mastercard", "paypal", "maestro", "amex", "bancontact", "cartes_bancaires", "diners_club", "discover", "interac", "jcb", "mada", "visa_electron", "unknown"]).optional(), bankTransferType: z.enum(["pse", "sepa"]).optional(), type: z.enum(["visa", "mastercard", "paypal", "maestro", "amex", "bancontact", "cartes_bancaires", "diners_club", "discover", "interac", "jcb", "mada", "visa_electron", "unknown"]).optional(), last4: z.string().min(4).max(4).optional(), expMonth: z.string().optional(), expYear: z.string().optional() }).optional(), status: z.enum(["pending", "finalized", "failed", "reversed", "refunded", "authorized", "initialized"]), totalAmount: z.number().min(0).max(10000000000000), authorizedAmount: z.number().min(0).max(10000000000000).optional(), ref: z.string().optional(), failureReason: z.string().optional(), invoiceRequired: z.boolean().optional(), lastUpdatedAt: z.string().datetime().optional(), paymentMetadata: z.object({ applicationIdentifier: z.string().max(255).optional(), terminalIdentifier: z.string().max(255).optional(), merchantIdentifier: z.string().max(255).optional(), authorisationCode: z.string().max(255).optional(), acquirerIdentifier: z.string().max(255).optional(), cardholderVerificationMethod: z.enum(["no_cvm", "signature", "online_pin", "offline_pin", "consumer_device", "online_pin_and_signature", "offline_pin_and_signature"]).optional() }).optional() }); // GET /public-api/resources/user-devices/v1.0 // GET /public-api/resources/user-devices/v1.0/{userDevice} // GET /public-api/resources/user-groups/v1.0 // POST /public-api/resources/user-groups/v1.0 export const userGroupCreateBody = z.object({ operatorId: z.number().int().optional(), name: z.string(), partnerId: z.number().int().optional(), description: z.string().max(2000).optional(), externalId: z.string().max(255).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/user-groups/v1.0/{userGroup} // DELETE /public-api/resources/user-groups/v1.0/{userGroup} // PATCH /public-api/resources/user-groups/v1.0/{userGroup} export const userGroupUpdateBody = z.object({ name: z.string(), partnerId: z.number().int().optional(), description: z.string().max(2000).optional(), externalId: z.string().max(255).optional(), lastUpdatedAt: z.string().datetime().optional() }); // GET /public-api/resources/users/v1.0 // POST /public-api/resources/users/v1.0 export const userCreateBody = z.object({ operatorId: z.number().int().optional(), email: z.string().email(), emailVerified: z.string().optional(), password: z.string().min(6), requirePasswordReset: z.boolean().optional(), first_name: z.string().optional(), middle_name: z.string().optional(), last_name: z.string().optional(), phone: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"])]).optional(), city: z.string().optional(), post_code: z.string().optional(), address: z.string().optional(), vehicle_no: z.string().optional(), personal_id: z.string().optional(), company_name: z.string().optional(), locale: z.string().optional(), userGroupIds: z.array(z.number().int()).optional(), externalId: z.string().optional(), options: z.object({ sessionsAllowed: z.enum(["single_session", "multiple_simultaneous_sessions_per_idtag", "simultaneous_use_of_idtags", "multiple_simultaneous_sessions_remotely_and_idtags"]).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional(), receiveNewsAndPromotions: z.boolean().optional(), skipPreAuthorization: z.boolean().optional(), skipUnpaidSessionCheck: z.boolean().optional(), bankDetails: z.object({ bankIban: z.string().optional(), bankCode: z.string().optional(), bankAccountNumber: z.string().optional(), bankAccountType: z.string().optional(), bankBic: z.string().optional() }).optional(), externalAppData: z.record(z.unknown()).optional(), nonce: z.string().optional() }); // GET /public-api/resources/users/v1.0/{user} // DELETE /public-api/resources/users/v1.0/{user} // PATCH /public-api/resources/users/v1.0/{user} export const userUpdateBody = z.object({ email: z.string().email().optional(), emailVerified: z.string().optional(), password: z.string().min(6).optional(), requirePasswordReset: z.boolean().optional(), first_name: z.string().optional(), middle_name: z.string().optional(), last_name: z.string().optional(), phone: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"])]).optional(), city: z.string().optional(), post_code: z.string().optional(), address: z.string().optional(), vehicle_no: z.string().optional(), company_name: z.string().optional(), userGroupIds: z.array(z.number().int()).optional(), externalId: z.string().optional(), options: z.object({ sessionsAllowed: z.enum(["single_session", "multiple_simultaneous_sessions_per_idtag", "simultaneous_use_of_idtags", "multiple_simultaneous_sessions_remotely_and_idtags"]).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional(), receiveNewsAndPromotions: z.boolean().optional(), skipPreAuthorization: z.boolean().optional(), skipUnpaidSessionCheck: z.boolean().optional(), bankDetails: z.object({ bankIban: z.string().optional(), bankCode: z.string().optional(), bankAccountNumber: z.string().optional(), bankAccountType: z.string().optional(), bankBic: z.string().optional() }).optional(), externalAppData: z.record(z.unknown()).optional() }); // GET /public-api/resources/users/v1.0/{user}/invoice-details // POST /public-api/resources/users/v1.0/{user}/invoice-details export const invoiceDetailsCreateOrUpdateBody = z.union([z.object({ requireInvoice: z.boolean(), invoiceType: z.enum(["individual", "company"]), individualName: z.string().optional(), individualPersonalId: z.string().optional(), individualTaxId: z.string().optional(), companyName: z.string().optional(), companyRegNo: z.string().optional(), companyTaxId: z.string().optional(), companyTaxAdministrationOfficeName: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), region: z.string().optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), city: z.string().optional(), postCode: z.string().optional(), address: z.string().optional() }), z.object({ invoiceRequired: z.boolean(), clientType: z.enum(["individual", "company"]), name: z.string().optional(), email: z.string().optional(), mobilePhoneNumber: z.string().optional(), landlinePhoneNumber: z.string().optional(), taxId: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), city: z.string().optional(), postcode: z.string().optional(), address: z.string().optional() }), z.object({ firstName: z.string(), lastName: z.string(), email: z.string(), phone: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), city: z.string().optional(), postcode: z.string().optional(), address: z.string().optional() }), z.object({ invoiceType: z.enum(["EInvoice", "Company", "Donation"]), carrierType: z.enum(["Mobile", "Citizen", "GreenWorld"]).optional(), loveCode: z.string().optional(), mobileBarCode: z.string().optional(), citizenId: z.string().optional(), companyId: z.string().optional(), name: z.string(), email: z.string(), phone: z.string(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), city: z.string().optional(), postcode: z.string().optional(), address: z.string().optional() }), z.object({ recipientCode: z.string().min(7).max(7).regex(new RegExp("^[A-Za-z0-9]{7}$")).optional(), recipientCertifiedEmail: z.string().email().optional(), requireInvoice: z.boolean(), invoiceType: z.enum(["individual", "company"]), individualName: z.string().optional(), individualPersonalId: z.string().optional(), individualTaxId: z.string().optional(), companyName: z.string().optional(), companyRegNo: z.string().optional(), companyTaxId: z.string().optional(), companyTaxAdministrationOfficeName: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), region: z.string().optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"]), z.enum(["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"]), z.enum(["81", "84", "85", "67", "89", "71", "76", "95", "79"]), z.enum(["AB", "AR", "AG", "BC", "BH", "BN", "BT", "BV", "BR", "B", "BZ", "CL", "CS", "CT", "CV", "DB", "DJ", "GL", "GR", "GJ", "HR", "HD", "IL", "IS", "IF", "MM", "MH", "MS", "NT", "OT", "PH", "SM", "SJ", "SB", "SV", "TR", "TM", "TL", "VS", "VL", "VN"])]).optional(), city: z.string().optional(), postCode: z.string().optional(), address: z.string().optional() })]); // GET /public-api/resources/users/v1.0/{user}/payment-methods // POST /public-api/resources/users/v1.0/{user}/payment-methods export const paymentMethodCreateBody = z.object({ tokenizedType: z.enum(["card", "bank_transfer"]).optional(), bankTransferType: z.enum(["sepa"]).optional(), transactionId: z.number().optional() }); // GET /public-api/resources/users/v1.0/{user}/payment-methods/{paymentMethodId} // DELETE /public-api/resources/users/v1.0/{user}/payment-methods/{paymentMethodId} // PATCH /public-api/resources/users/v1.0/{user}/payment-methods/{paymentMethodId} export const paymentMethodUpdateBody = z.object({ default: z.boolean().optional() }); // GET /public-api/resources/users/v1.0/{user}/subscription-billing-periods // GET /public-api/resources/users/v1.0/{user}/subscription-billing-periods/{billingPeriod} // GET /public-api/resources/users/v1.1 // POST /public-api/resources/users/v1.1 export const userCreateV1_1Body = z.object({ operatorId: z.number().int().optional(), email: z.string().email(), emailVerified: z.string().optional(), password: z.string().min(6), requirePasswordReset: z.boolean().optional(), first_name: z.string().optional(), middle_name: z.string().optional(), last_name: z.string().optional(), phone: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"])]).optional(), city: z.string().optional(), post_code: z.string().optional(), address: z.string().optional(), vehicle_no: z.string().optional(), personal_id: z.string().optional(), company_name: z.string().optional(), company_tax_id: z.string().optional(), company_address: z.string().optional(), company_city: z.string().optional(), company_postal_code: z.string().optional(), company_country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), company_receipts_enabled: z.boolean().optional(), locale: z.enum(["en", "bg", "mk", "el", "zh-CN", "zh-HK", "zh-TW", "pt", "sl", "hr", "it", "de", "hu", "fi", "is", "sv-SE", "da-DK", "nb-NO", "tr-TR", "es-ES", "ar", "ary", "he", "ta", "ms", "cy", "sr", "fr", "fr-MA", "ro", "lt", "uk", "ru", "nl", "ca-ES", "id", "ar-EG", "pl", "lo", "th", "sq-XK", "ga-IE", "bs", "ja", "ko-KR", "cs", "lv", "et", "az", "ka"]).optional(), userGroupIds: z.array(z.number().int()).optional(), externalId: z.string().optional(), options: z.object({ sessionsAllowed: z.enum(["single_session", "multiple_simultaneous_sessions_per_idtag", "simultaneous_use_of_idtags", "multiple_simultaneous_sessions_remotely_and_idtags"]).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional(), receiveNewsAndPromotions: z.boolean().optional(), bankDetails: z.object({ bankIban: z.string().optional(), bankCode: z.string().optional(), bankAccountNumber: z.string().optional(), bankAccountType: z.string().optional(), bankBic: z.string().optional() }).optional(), externalAppData: z.record(z.unknown()).optional(), nonce: z.string().optional(), partnerId: z.number().int().optional() }); // GET /public-api/resources/users/v1.1/{user} // DELETE /public-api/resources/users/v1.1/{user} // PATCH /public-api/resources/users/v1.1/{user} export const userUpdateV1_1Body = z.object({ email: z.string().email().optional(), emailVerified: z.string().optional(), password: z.string().min(6).optional(), requirePasswordReset: z.boolean().optional(), first_name: z.string().optional(), middle_name: z.string().optional(), last_name: z.string().optional(), phone: z.string().optional(), country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), state: z.union([z.enum(["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA", "WA", "WV", "WI", "WY"]), z.enum(["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT", "JBT", "CX", "NF", "CC", "AQ", "CSI", "ACI", "HM"])]).optional(), city: z.string().optional(), post_code: z.string().optional(), address: z.string().optional(), vehicle_no: z.string().optional(), personal_id: z.string().optional(), company_name: z.string().optional(), company_tax_id: z.string().optional(), company_address: z.string().optional(), company_city: z.string().optional(), company_postal_code: z.string().optional(), company_country: z.enum(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "XK", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]).optional(), company_receipts_enabled: z.boolean().optional(), locale: z.enum(["en", "bg", "mk", "el", "zh-CN", "zh-HK", "zh-TW", "pt", "sl", "hr", "it", "de", "hu", "fi", "is", "sv-SE", "da-DK", "nb-NO", "tr-TR", "es-ES", "ar", "ary", "he", "ta", "ms", "cy", "sr", "fr", "fr-MA", "ro", "lt", "uk", "ru", "nl", "ca-ES", "id", "ar-EG", "pl", "lo", "th", "sq-XK", "ga-IE", "bs", "ja", "ko-KR", "cs", "lv", "et", "az", "ka"]).optional(), userGroupIds: z.array(z.number().int()).optional(), externalId: z.string().optional(), options: z.object({ sessionsAllowed: z.enum(["single_session", "multiple_simultaneous_sessions_per_idtag", "simultaneous_use_of_idtags", "multiple_simultaneous_sessions_remotely_and_idtags"]).optional() }).optional(), lastUpdatedAt: z.string().datetime().optional(), receiveNewsAndPromotions: z.boolean().optional(), bankDetails: z.object({ bankIban: z.string().optional(), bankCode: z.string().optional(), bankAccountNumber: z.string().optional(), bankAccountType: z.string().optional(), bankBic: z.string().optional() }).optional(), externalAppData: z.record(z.unknown()).optional() }); // GET /public-api/resources/users/v1.1/{user}/notes // POST /public-api/resources/users/v1.1/{user}/notes export const userNoteCreateBody = z.object({ summary: z.string().max(255), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/users/v1.1/{user}/notes/{note} // DELETE /public-api/resources/users/v1.1/{user}/notes/{note} // PATCH /public-api/resources/users/v1.1/{user}/notes/{note} export const userNoteUpdateBody = z.object({ summary: z.string().max(255).optional(), details: z.string().max(2000).optional(), pinned: z.boolean().optional() }); // GET /public-api/resources/utilities/v1.0 // POST /public-api/resources/utilities/v1.0 export const createUtilityBody = z.object({ name: z.string().min(1).max(255) }); // GET /public-api/resources/utilities/v1.0/{utility} // PUT /public-api/resources/utilities/v1.0/{utility} export const updateUtilityBody = z.object({ name: z.string().min(1).max(255) }); // DELETE /public-api/resources/utilities/v1.0/{utility} // GET /public-api/resources/vehicles/v1.0 // POST /public-api/resources/vehicles/v1.0 export const vehicleCreateBody = z.object({ operatorId: z.number().int().optional(), partnerId: z.number().int().optional(), label: z.string().max(255), licensePlate: z.string().max(255).optional(), vin: z.string().min(17).max(17).regex(new RegExp("^[A-HJ-NPR-Z0-9]{17}$")).optional(), pcId: z.string().max(255).optional(), usageType: z.enum(["private", "company"]).optional(), userIds: z.array(z.number().int()).optional() }); // GET /public-api/resources/vehicles/v1.0/telemetry-readings // GET /public-api/resources/vehicles/v1.0/{vehicle} // DELETE /public-api/resources/vehicles/v1.0/{vehicle} // PATCH /public-api/resources/vehicles/v1.0/{vehicle} export const vehicleUpdateBody = z.object({ partnerId: z.number().int().optional(), label: z.string().max(255).optional(), licensePlate: z.string().max(255).optional(), vin: z.string().min(17).max(17).regex(new RegExp("^[A-HJ-NPR-Z0-9]{17}$")).optional(), pcId: z.string().max(255).optional(), usageType: z.enum(["private", "company"]).optional(), userIds: z.array(z.number().int()).optional() }); // GET /public-api/resources/vehicles/v1.0/{vehicle}/relations/users // POST /public-api/resources/vehicles/v1.0/{vehicle}/relations/users export const vehicleUsersAttachBody = z.object({ userIds: z.array(z.number().int()) }); // PUT /public-api/resources/vehicles/v1.0/{vehicle}/relations/users export const vehicleUsersReplaceBody = z.object({ userIds: z.array(z.number().int()) }); // DELETE /public-api/resources/vehicles/v1.0/{vehicle}/relations/users/{user} // GET /public-api/resources/vehicles/v1.0/{vehicle}/telemetry-readings // POST /public-api/resources/vehicles/v1.0/{vehicle}/telemetry-readings export const vehicleTelemetryReadingCreateBody = z.object({ odometerKm: z.number().min(0).max(999999999.999).optional(), submittedAt: z.string().datetime().optional(), submittedByUserId: z.number().int().optional() }); // DELETE /public-api/resources/vehicles/v1.0/{vehicle}/telemetry-readings/{vehicleTelemetryReading} // GET /public-api/resources/vendor-error-codes/v2.0 // POST /public-api/resources/vendor-error-codes/v2.0 export const vendorErrorCodeCreateBody = z.object({ id: z.number().int().optional(), vendorId: z.string(), errorCode: z.string(), errorCodeDescription: z.string().optional(), errorCodeCustomerAction: z.string().optional() }); // GET /public-api/resources/vendor-error-codes/v2.0/{vendorErrorCode} // DELETE /public-api/resources/vendor-error-codes/v2.0/{vendorErrorCode} // PATCH /public-api/resources/vendor-error-codes/v2.0/{vendorErrorCode} export const vendorErrorCodeUpdateBody = z.object({ id: z.number().int().optional(), vendorId: z.string(), errorCode: z.string(), errorCodeDescription: z.string().optional(), errorCodeCustomerAction: z.string().optional() }); // GET /public-api/resources/vouchers/v2.0 // POST /public-api/resources/vouchers/v2.0 export const voucherCreateDeprecatedBody = z.object({ amount: z.number(), expireDate: z.string().optional(), description: z.string().optional() }); // GET /public-api/resources/vouchers/v2.0/{voucher} // DELETE /public-api/resources/vouchers/v2.0/{voucher} // PATCH /public-api/resources/vouchers/v2.0/{voucher} export const voucherUpdateDeprecatedBody = z.object({ status: z.enum(["enabled", "disabled"]).optional(), expireDate: z.string().optional(), amount: z.number() }); // GET /public-api/resources/vouchers/v2.1 // POST /public-api/resources/vouchers/v2.1 export const voucherCreateBody = z.object({ operatorId: z.number().int().optional(), amount: z.number(), expireDate: z.string().optional(), validityPeriod: z.enum(["2 days", "1 week", "2 weeks", "1 month", "3 months", "6 months", "1 year", "2 years", "3 years", "5 years"]).optional(), assignBeforeDate: z.string().optional(), description: z.string().optional(), prefix: z.string().min(3).max(3).optional(), title: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional() }); // GET /public-api/resources/vouchers/v2.1/{voucher} // DELETE /public-api/resources/vouchers/v2.1/{voucher} // PATCH /public-api/resources/vouchers/v2.1/{voucher} export const voucherUpdateBody = z.object({ status: z.enum(["enabled", "disabled"]).optional(), expireDate: z.string().optional(), validityPeriod: z.enum(["2 days", "1 week", "2 weeks", "1 month", "3 months", "6 months", "1 year", "2 years", "3 years", "5 years"]).optional(), assignBeforeDate: z.string().optional(), amount: z.number(), prefix: z.string().min(3).max(3).optional(), title: z.array(z.object({ locale: z.string().optional(), translation: z.string().optional() })).optional() });