API reference
The Aliste Volta API is organized around REST. Requests use JSON-encoded bodies, return JSON-encoded responses, and use standard HTTP response codes and verbs.
Authentication #
The Aliste Volta API uses HTTP Basic authentication. Generate an API key from your dashboard with the roles you need; the password is shown only once, so store it securely.
Use the keyId as the username and the keyPassword as the password. Base64-encode them together as keyId:keyPassword and pass the result in an Authorization header.
All API requests must be made over HTTPS. Requests made without authentication, or with an expired key, will fail.
curl https://test.alistetechnologies.com/integration/room/details \
-H "Authorization: Basic MjJVeHFkN2o6Y0p3bmdYSFI4cTJGTzhuYm84YVYwRGZoMEl5eVRzd1A=" \
-H "Content-Type: application/json" \
-d '{"roomId":"TEST001"}'const token = Buffer
.from(`${keyId}:${keyPassword}`)
.toString('base64');
await fetch('https://test.alistetechnologies.com/integration/room/details', {
method: 'POST',
headers: {
'Authorization': `Basic ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ roomId: 'TEST001' })
});Errors #
Aliste Volta uses conventional HTTP response codes. Codes in the 2xx range indicate success; codes in the 4xx range indicate a client error; codes in the 5xx range indicate a server error.
Every response — successful or not — has the same envelope, so your code can branch on a single boolean.
Response envelope
true if the request was successful, false otherwise.
Human-readable description. On errors, this explains what went wrong.
The payload — shape varies by endpoint. May be {} on errors.
{
"success": true,
"message": "Room fetched successfully",
"data": { "room": { /* ... */ } }
}{
"success": false,
"message": "Missing fields: roomId",
"data": {}
}Quickstart #
Five steps to take your integration from zero to live. Steps 1 and 2 are completed by your Aliste admin; the rest are handled by your engineering team.
Get share access
Ask your Aliste admin to grant your team integration access from the Share access section of the dashboard. This is what authorises your organisation to issue API keys.
Create a production API key
From the API Keys section, your admin generates a production key for the integration and grants it access to all properties you intend to integrate.
The key's password is shown only once — store it in your secret manager before closing the dialog. You'll use it in every request as Basic base64(keyId:keyPassword).
List all properties
Call GET /integration/property/all/details once with your new key. The response enumerates every property and room you have access to — each one carries an alisteId you'll reference in the next step.
Map your IDs
Link your records with Aliste's. Two approaches get you there — the only real difference is where the mapping lives.
For each property, call Update a property once — pass Aliste's alisteId as propertyId and your own ID as referenceId. Repeat for every room via Update a room.
Skip the configure calls entirely. Store each alisteId from step 3 against the matching property and room in your own database, keyed however you like.
Use your IDs going forward
You're done. Every endpoint accepts either ID — send whichever you persisted in step 4.
Call every API with the IDs already in your database. Aliste resolves them through the referenceId you wrote — there's nothing else to store on your side.
Pass the alisteId you saved as propertyId / roomId in every call. No client-side reference IDs need to live on Aliste's records.
List all properties #
Returns every property accessible to your API key, fully expanded with rooms and common areas. No body required.
curl https://test.alistetechnologies.com/integration/property/all/details \
-H "Authorization: Basic {token}"{
"success": true,
"message": "Properties and rooms fetched successfully",
"data": {
"properties": [
{
"id": "PROP12345",
"name": "Sample Property Alpha",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"minRecharge": 150,
"alisteId": "66fe39d21cd53cdac238f8c0",
"supportNumbers": ["+919834343434"],
"supportEmails": ["support@example.com"],
"rooms": [
{
"id": "TEST001",
"name": "Room A-101",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"balance": 540.25,
"blocked": false,
"devices": ["M240000"],
"minRecharge": 150,
"alisteId": "68134a6d6e9ecaea755243c1"
}
],
"commonAreas": [
{
"id": "CA1001",
"name": "Recreation Hall",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"balance": 0,
"blocked": false,
"devices": ["M310000"],
"minRecharge": 150,
"alisteId": "66fe39d21cd53cdac238f8c1"
}
]
}
]
}
}List rooms in a property #
Lists every room and common area under a property, with per-meter monitoring state.
Body parameters
alisteId received from the List all properties API, or your Client Property ID.
curl https://test.alistetechnologies.com/integration/property/rooms \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"propertyId":"PROP12345"}'{
"success": true,
"message": "Rooms fetched successfully",
"data": {
"room": [
{
"id": "TEST001",
"name": "Room A-101",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"balance": 540.25,
"blocked": false,
"devices": ["M240000"],
"minRecharge": 150,
"alisteId": "66fe39d21cd53cdac238f8c0",
"monitoring": true
}
],
"commonAreas": [
{
"id": "CA1001",
"name": "Recreation Hall",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"balance": 0,
"devices": ["M310000"],
"minRecharge": 150,
"alisteId": "66fe39d21cd53cdac238f8c1",
"monitoring": true
}
]
}
}Retrieve a property #
Returns the configuration of a single property including tariffs, minimums, and monitoring status.
Body parameters
alisteId received from the List all properties API, or your Client Property ID.
curl https://test.alistetechnologies.com/integration/property/details \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"propertyId":"PROP12345"}'{
"success": true,
"message": "Property fetched successfully",
"data": {
"property": {
"id": "PROP12345",
"name": "Sample Property Alpha",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"minRecharge": 150,
"propertyCode": "AB12CD",
"supportNumbers": ["+919834343434"],
"supportEmails": ["support@example.com"],
"monitoring": true
}
}
}Update a property #
Updates property-level settings such as unit cost and minimum recharge.
Body parameters
alisteId received from the List all properties API, or your Client Property ID.
Cost per unit at the property.
Cost per DG / inverter unit.
Minimum negative balance allowed.
Minimum expected balance.
Minimum recharge amount enforced on payment links.
Update or set your client-side property ID.
cpu: 8 and has three rooms. Rooms A and B inherit the property default, while Room C was individually configured to cpu: 10 via Update a room. Sending { "propertyId": "PROP12345", "cpu": 9 } moves Rooms A and B to cpu: 9 automatically, while Room C keeps its own cpu: 10.
curl https://test.alistetechnologies.com/integration/property/configure \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"propertyId": "PROP12345",
"cpu": 9,
"minRecharge": 200
}'{
"success": true,
"message": "Property updated successfully",
"data": {
"property": {
"id": "PROP12345",
"name": "Sample Property Alpha",
"cpu": 9,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"minRecharge": 200,
"supportNumbers": ["+919834343434"],
"supportEmails": ["support@example.com"]
}
}
}Retrieve a room #
Fetches a room's full configuration including live device connection state and a real-time current balance (today's spend already deducted).
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
Response highlights
Stored room balance.
balance minus today's consumption — what the tenant effectively has right now.
Per-device connected flag fetched live from the meter cloud.
true if every meter on the room is being monitored.
"negativeBalance" when the room is currently blocked due to a negative balance; otherwise an empty string.
curl https://test.alistetechnologies.com/integration/room/details \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"roomId":"TEST001"}'{
"success": true,
"message": "Room fetched successfully",
"data": {
"room": {
"id": "TEST001",
"name": "Room A-101",
"cpu": 8, "cpdu": 12,
"mnb": 0, "meb": 200,
"minRecharge": 150,
"balance": 540.25,
"currentBalance": 528.12,
"blocked": false,
"blockingReason": "",
"monitoring": true,
"devices": ["M240000"],
"devicesStatus": [
{ "deviceId": "M240000", "connected": true }
]
}
}
}List room users #
Returns every tenant currently attached to a room.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
curl https://test.alistetechnologies.com/integration/room/users/details \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"roomId":"TEST001"}'{
"success": true,
"message": "Room fetched successfully",
"data": {
"room": {
"roomId": "TEST001",
"alisteRoomId": "66fe39d21cd53cdac238f8c0",
"users": [
{
"userId": "CLIENT_USR_88421",
"alisteUserId": "66fe39d23cd53cdac238f8c0",
"name": "Aarav Mehta",
"mobile": "9999999999"
}
]
}
}
}Update a room #
Override property-level defaults for a single room. Only the fields you send are updated.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
Display name of the room.
Cost per unit override.
Cost per DG / inverter unit.
Minimum negative balance allowed.
Minimum expected balance.
Minimum recharge amount.
Replace your client-side room ID.
curl https://test.alistetechnologies.com/integration/room/configure \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"minRecharge": 250,
"mnb": -100
}'{
"success": true,
"message": "Room updated successfully",
"data": {
"room": {
"id": "TEST001",
"name": "Room A-101",
"cpu": 8,
"cpdu": 12,
"mnb": -100,
"meb": 200,
"balance": 540.25,
"blocked": false,
"devices": ["M240000"],
"minRecharge": 250
}
}
}Block or unblock a room #
Disconnects (or reconnects) the meter associated with a room. Blocking sends a power-cut command to the meter; the action is logged with the API key's identity and is reversible at any time.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
true to block, false to unblock.
Arbitrary metadata stored on the audit log (e.g. ticket reference, operator note).
curl https://test.alistetechnologies.com/integration/room/blockUnblock \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"block": true,
"controllerDetails": { "reason": "Non-payment" }
}'{
"success": true,
"message": "Room blocked successfully",
"data": {
"room": {
"id": "TEST001",
"name": "Room A-101",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"balance": 540.25,
"blocked": true,
"devices": ["M240000"],
"minRecharge": 150
}
}
}Room consumption #
Returns every deduction (energy and manual) on a room within a window. Dates must be UTC ISO-8601.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
2025-01-15T00:00:00.000Z — inclusive.
2025-01-31T23:59:59.999Z — exclusive.
Response highlights
true when the deduction covers units the meter accumulated while disconnected, charged once it came back online — so startTime/endTime may span a longer window than a normal deduction.
curl https://test.alistetechnologies.com/integration/room/consumption \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"startDate": "2025-01-01T00:00:00.000Z",
"endDate": "2025-01-31T23:59:59.999Z"
}'{
"success": true,
"message": "Deductions fetched successfully",
"data": {
"deductions": [
{
"roomName": "Room A-101",
"startTime": "2025-01-14T18:30:00.000Z",
"endTime": "2025-01-15T18:30:00.000Z",
"amount": 42.50,
"units": 5.31,
"type": "Regular",
"source": "energy",
"isOffline": false,
"deductionTime": "2025-01-15T18:30:05.000Z",
"note": "",
"userMessage": ""
}
]
}
}Add user to room #
Adds a user to the specified room. If the user does not yet exist in Aliste, they are registered automatically and then attached to the room.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
10-digit phone number. Only the last 10 digits are kept — prefixes are stripped.
First name of the tenant.
Your unique user ID
Last name of the tenant.
Contact email for the tenant.
Errors
curl https://test.alistetechnologies.com/integration/room/user/add \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"phoneNumber": "9999999999",
"firstName": "Aarav",
"lastName": "Mehta",
"email": "aarav@example.com",
"userId": "CLIENT_USR_88421"
}'{
"success": true,
"message": "User added to the room successfully",
"data": {}
}Remove user from room #
Detaches a user from a room. The user remains in Aliste — only the room mapping is severed.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
10-digit phone number of the user to detach.
curl https://test.alistetechnologies.com/integration/room/user/remove \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"phoneNumber": "9999999999"
}'{
"success": true,
"message": "User removed from room",
"data": {}
}Update a user #
Updates the profile fields of an existing Aliste user. Identify the user by any unique identifier they were registered with (phone prefixed with +91, or your Client User ID). Only the fields you supply are changed.
Body parameters
Any unique identifier for the user — phone number (prefixed with +91), or your Client User ID.
Updated first name of the user.
Updated last name of the user.
Updated contact email for the user.
Your unique user ID
Errors
userIdentifier.curl https://test.alistetechnologies.com/integration/user/update \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"userIdentifier": "+919999999999",
"first_name": "Aarav",
"last_name": "Mehta",
"email": "aarav@example.com",
"referenceId": "CLIENT_USR_88421"
}'{
"success": true,
"message": "User updated successfully",
"data": {}
}Create a recharge link #
Generates a hosted PayU payment link for a tenant against a specific room. Returns the link and a tracking rechargeId you can poll or wait on via webhook.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
Tenant's user ID or phone (prefixed with +91).
Recharge amount. Must be ≥ room.minRecharge.
Internal note stored on the recharge.
Browser redirect on success.
Browser redirect on failure.
Test card details
| Number | 5123 4567 8901 2346 |
| Expiry | Any future date — e.g. 05/27 |
| CVV | 123 for success |
| OTP | 123456 |
curl https://test.alistetechnologies.com/integration/recharge/initiate \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"userIdentifier": "+919999999999",
"amount": 1000,
"note": "October recharge",
"successRedirectURL": "https://yourapp.com/success",
"failureRedirectURL": "https://yourapp.com/failed"
}'{
"success": true,
"message": "Payment link created successfully",
"data": {
"paymentLink": "https://test.payu.in/_payment_link/abcd1234",
"rechargeId": "66fe38d21cd53cdac238f8c0"
}
}Create a recharge (SDK) #
Initiates a recharge and returns the PayU SDK parameters to open the PayU CheckoutPro screen inside your app. Use this when payment is collected in-app instead of via a hosted link. Accepts the same body as Create a recharge link; the response returns the SDK params and a tracking rechargeId instead of a paymentLink.
payUPaymentParams or payUCheckoutProConfig yourself — this API returns both, ready to pass straight into the SDK.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
Tenant's user ID or phone (prefixed with +91).
Recharge amount. Must be ≥ room.minRecharge.
Internal note stored on the recharge.
Response fields
Tracking ID of the recharge. Same value as payUPaymentParams.transactionId. Poll it via Retrieve a recharge or wait on the webhook.
Pass directly to the PayU CheckoutPro SDK. environment is "0" in production and "1" on test/staging.
UI/config object for the PayU CheckoutPro SDK.
Test PayU credentials to be sent from the client-side code
Test card details
| Number | 5123 4567 8901 2346 |
| Expiry | Any future date — e.g. 05/27 |
| CVV | 123 for success |
| OTP | 123456 |
curl https://test.alistetechnologies.com/integration/recharge/initiateThroughSDK \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"userIdentifier": "+919999999999",
"amount": 1000,
"note": "October recharge"
}'{
"success": true,
"message": "Payment initiated",
"data": {
"rechargeId": "66fe38d21cd53cdac238f8c0",
"payUPaymentParams": {
"key": "{payu-merchant-key}",
"transactionId": "66fe38d21cd53cdac238f8c0",
"amount": 1000,
"productInfo": "{Client Name} SmartMeter Recharge",
"firstName": "John",
"email": "john@example.com",
"phone": "9999999999",
"ios_surl": "https://smartmeter.aliste.io/payment/success",
"ios_furl": "https://smartmeter.aliste.io/payment/failed",
"android_surl": "https://smartmeter.aliste.io/payment/success",
"android_furl": "https://smartmeter.aliste.io/payment/failed",
"environment": "0",
"userCredential": "{payu-merchant-key}:{alisteUserId}",
"additionalParam": {
"udf1": "{clientId}",
"udf2": "{propertyId}",
"udf3": "{roomId}",
"udf4": "{alisteUserId}",
"udf5": "smartmeter-integration",
"walletUrn": "1"
}
},
"payUCheckoutProConfig": {
"primaryColor": "#3b82f6",
"secondaryColor": "#000000",
"merchantName": "Alise Technologies",
"merchantLogo": "A",
"showExitConfirmationOnCheckoutScreen": true,
"showExitConfirmationOnPaymentScreen": true,
"cartDetails": [{ "Order": "Smart Recharge" }, { "Item": "Recharge" }],
"paymentModesOrder": [
{ "UPI": "TEZ" },
{ "Wallets": "PAYTM" },
{ "EMI": "" },
{ "Wallets": "PHONEPE" }
],
"surePayCount": 1,
"merchantResponseTimeout": 10000,
"autoSelectOtp": true,
"autoApprove": false,
"merchantSMSPermission": false,
"showCbToolbar": true
}
}
}Retrieve a recharge #
Look up the lifecycle and settlement details of a single recharge.
Body parameters
Returned from Create a recharge link or any webhook.
Response fields
One of pending, success, failed.
Gross amount charged.
Payment-gateway fee deducted.
Net amount credited to the room.
Room balance after this recharge.
curl https://test.alistetechnologies.com/integration/recharge/status \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"rechargeId":"66fe38d21cd53cdac238f8c0"}'{
"success": true,
"message": "Recharge fetched successfully",
"data": {
"status": "success",
"amount": 1000,
"gatewayCharge": 15,
"paymentMode": "Card",
"rechargeId": "66fe38d21cd53cdac238f8c0",
"balanceAdded": 985,
"rechargedAt": "2025-01-01T10:00:00.000Z",
"createdAt": "2025-01-01T10:00:00.000Z",
"roomBalance": 2500.50,
"phoneNumber": "9999999999",
"roomId": "TEST001",
"userId": "CLIENT_USR_88421",
"userName": "Aarav Mehta",
"metaData": {
"alisteRoomId": "66fe39d21cd53cdac238f8c0",
"alisteUserId": "66fe39d23cd53cdac238f8c0"
}
}
}List recharges #
Lists every paid or failed recharge for a room in a date window, across PayU, Razorpay and manual entries.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
UTC timestamp.
UTC timestamp.
curl https://test.alistetechnologies.com/integration/room/recharges \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"startDate": "2025-01-01T00:00:00.000Z",
"endDate": "2025-01-31T23:59:59.999Z"
}'{
"success": true,
"message": "Recharges fetched successfully",
"data": {
"recharges": [
{
"roomName": "Room A-101",
"tenantName": "Aarav Mehta",
"paymentMode": "Card",
"phone": "9999999999",
"status": "paid",
"transactionId": "66fe38d21cd53cdac238f8c0",
"amount": 1000,
"balanceAdded": 985,
"gatewayCharges": 15,
"rechargeDate": "2025-01-15T10:00:00.000Z",
"userReason": "",
"note": "October recharge"
}
]
}
}Manual recharge #
Adds credit to a room balance without a payment gateway. Use for adjustments, cashback, or offline collections.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
Credit amount. Must be ≥ 0.
Internal/admin note.
Tenant-facing message shown on the transaction.
curl https://test.alistetechnologies.com/integration/room/recharge/manual \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"amount": 200,
"note": "Goodwill credit for outage 14 Jan",
"userMessage": "Credit for power outage"
}'{
"success": true,
"message": "Recharge created successfully",
"data": {
"room": {
"id": "TEST001",
"name": "Room A-101",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"balance": 740.25,
"blocked": false,
"devices": ["M240000"],
"minRecharge": 150
}
}
}Manual deduction #
Pulls credit from a room balance. Use for penalties, CAM charges, or fixed-cost recoveries.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
Amount to deduct. Must be ≥ 0.
Internal note.
Tenant-facing reason.
Defaults to Penalty. Pass an Aliste deduction source value to categorise.
curl https://test.alistetechnologies.com/integration/room/deduction/manual \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"amount": 150,
"note": "CAM charges – Jan",
"userMessage": "Common area maintenance",
"source": "CAM"
}'{
"success": true,
"message": "Deduction created successfully",
"data": {
"room": {
"id": "TEST001",
"name": "Room A-101",
"cpu": 8,
"cpdu": 12,
"mnb": 0,
"meb": 200,
"balance": 590.25,
"blocked": false,
"devices": ["M240000"],
"minRecharge": 150
}
}
}Device status #
Returns the live connection state of a smart meter. If the upstream meter cloud is unreachable, the call still returns success: true with connected: false — failures are normalised, not raised.
Body parameters
The meter's serial identifier (e.g. M240000).
curl https://test.alistetechnologies.com/integration/device/status \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"deviceID":"M240000"}'{
"success": true,
"message": "Device status fetched successfully",
"data": { "connected": true }
}Create a ticket #
Files a new support ticket against a room. The category and subcategory pair determines routing inside Aliste's support tooling.
Body parameters
alisteId received from the List all properties API, or your Client Room ID.
One of 0, 1, 2, 3, 4, 5, 6 — see matrix below.
One of 0, 1, 2 depending on the chosen category — see matrix below.
Short title shown in the agent inbox.
Body of the ticket.
Tenant's userId or +91 phone number. If provided, must exist.
Publicly accessible media URLs.
Category & subcategory matrix
| Cat | Category | Sub | Subcategory |
|---|---|---|---|
| 0 | Other | 0 | Other |
| 0 | Other | 1 | Raised By Toll Free |
| 1 | Deductions | 0 | Over consumption |
| 1 | Deductions | 1 | Cant see deduction |
| 1 | Deductions | 2 | Power Disconnected |
| 2 | Recharge | 0 | Recharge not reflected |
| 2 | Recharge | 1 | Unable to recharge |
Only a few rows are shown here for reference. Use the List ticket categories API to get the full, up-to-date list.
ticketId is returned when a matching ticket is already open. If a ticket for the same roomId, category, subcategory and userIdentifier already exists and is still in the Created state, the call returns that same ticketId instead of opening a new ticket. The description from the new call is appended to the existing description (separated by |), and any attachmentsURLs are added to the ticket's existing media array. The subject, however, is overwritten by the value in the new call (if one is sent). A different user in the same room raising the same category and subcategory always gets a new ticket. Likewise, once the ticket is moved out of Created e.g. ongoing or resolved by one of our customer support agent, the next call opens a fresh ticket.
curl https://test.alistetechnologies.com/integration/ticket/create \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"roomId": "TEST001",
"category": 2,
"subcategory": 0,
"subject": "My recharge isn't reflecting",
"description": "Paid ₹500 30 minutes ago — still not in balance.",
"userIdentifier": "+919999999999"
}'{
"success": true,
"message": "Ticket raised successfully",
"data": { "ticketId": "Tdfds34" }
}List ticket categories #
Returns the live category / subcategory matrix accepted by Create a ticket, with each numeric value and its label. Fetch this instead of hardcoding the matrix — new categories and subcategories are added over time, and this endpoint always reflects the current set.
Response fields
One entry per category. Other (0) is always returned last.
Value to send as category when creating a ticket.
Human-readable category name.
Valid subcategories for this category, each with a numeric subcategory and a label.
curl https://test.alistetechnologies.com/integration/ticket/categories \
-H "Authorization: Basic {token}"{
"success": true,
"message": "Ticket categories fetched successfully",
"data": {
"categories": [
{
"category": 1,
"label": "Deductions",
"subcategories": [
{ "subcategory": 0, "label": "Over consumption" },
{ "subcategory": 1, "label": "Cant see deduction" },
{ "subcategory": 2, "label": "Power Disconnected" }
]
},
{
"category": 0,
"label": "Other",
"subcategories": [
{ "subcategory": 0, "label": "Other" },
{ "subcategory": 1, "label": "Raised By Toll Free" }
]
}
]
}
}Retrieve a ticket #
Pulls a ticket by its ticketId along with its activity timeline.
Body parameters
The ID returned from Create a ticket.
curl https://test.alistetechnologies.com/integration/ticket/fetch \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"ticketId":"Tdfds34"}'{
"success": true,
"message": "Ticket fetched successfully",
"data": {
"ticket": {
"id": "Tdfds34",
"subject": "My recharge isn't reflecting",
"description": "Paid ₹500 30 minutes ago...",
"userId": "CLIENT_USR_88421",
"userName": "Aarav",
"roomId": "TEST001",
"userContact": "aarav@example.com",
"createdAt": "2025-01-01T10:00:00.000Z",
"attachments": [],
"status": "created",
"activity": [
{ "status": "created", "comment": "", "timestamp": "2025-01-01T10:00:00.000Z" },
{ "status": "resolved", "comment": "Refund processed", "timestamp": "2025-01-01T11:30:00.000Z" }
],
"metaData": {
"alisteRoomId": "66fe39d21cd53cdac238f8c0",
"alisteUserId": "66fe39d23cd53cdac238f8c0"
}
}
}
}List done payouts #
Returns every completed payout for the given properties between two dates, with full recharge breakdown and invoice details.
Body parameters
List of alisteIds (received from the List all properties API) or your Client Property IDs.
Inclusive lower bound on transactionDate.
Inclusive upper bound on transactionDate.
Response fields
Unique identifier for the payout record.
Bank reference ID from the transfer.
Sum of all recharges in this payout window.
Net amount actually wired.
Payouts spanning properties outside your key's scope — only IDs are returned.
curl https://test.alistetechnologies.com/integration/payouts/done \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{
"propertyIds": ["PROP12345", "PROP12346"],
"startDate": "2024-01-14T18:30:00.000Z",
"endDate": "2025-11-14T18:30:00.000Z"
}'{
"success": true,
"message": "Payout fetched successfully",
"data": {
"payouts": [
{
"payoutId": "507f1f77bcf86cd799439011",
"transactionId": "TXN123456789",
"transactionDate": "2025-01-15T00:00:00.000Z",
"method": "imps",
"rechargeAmount": 5000,
"invoiceAmount": 1500,
"adjustmentAmount": 100,
"transferredAmount": 3400,
"properties": [
{ "name": "Sample Property", "propertyId": "PROP12345", "alistePropertyId": "507f191e810c19729de860ea" }
],
"rechargeBreakdown": [
{ "propertyId": "PROP12345", "alistePropertyId": "507f191e810c19729de860ea", "propertyName": "Sample Property", "amount": 5000 }
],
"invoices": [
{ "propertyId": "PROP12345", "alistePropertyId": "507f191e810c19729de860ea", "propertyName": "Sample Property", "amount": 1500, "invoiceId": "INV987654321" }
],
"comment": "Monthly payout for January",
"startDate": "2025-01-01T00:00:00.000Z",
"endDate": "2025-01-31T23:59:59.999Z"
}
],
"extraPropertiesPayouts": [
{ "payoutId": "507f1f77bcf86cd799439012" }
]
}
}Pending payouts #
Returns the running pending amount per property — recharges collected since the last payout minus any outstanding invoices.
Body parameters
List of alisteIds (received from the List all properties API) or your Client Property IDs.
curl https://test.alistetechnologies.com/integration/payouts/pending \
-H "Authorization: Basic {token}" \
-H "Content-Type: application/json" \
-d '{"propertyIds":["PROP12345","PROP12346"]}'{
"success": true,
"message": "Payout fetched successfully",
"data": [
{
"propertyId": "PROP12345",
"alistePropertyId": "670000000000000000000001",
"propertyName": "Sample Property 1",
"startDate": "2025-09-25T10:00:00.000Z",
"endDate": "2025-10-02T10:00:00.000Z",
"totalRecharges": 1200,
"invoiceAmount": 800,
"adjustmentAmount": 0,
"pendingAmount": 400
}
]
}Managing webhooks #
The Webhooks page in the Smart Meter dashboard lets you configure, track, and manage your webhook integrations — the real-time notifications Aliste sends to your applications, keeping your platform in sync automatically.
200 OK within 5 seconds. Aliste retries non-2xx responses with exponential backoff.
Open the webhooks tab #
Where to find the Webhooks page in the dashboard — the entry point for creating, viewing, and deleting webhooks.
- Open volta.aliste.io.
- Scroll down to the bottom of the dashboard.
- Click the Webhooks tab to open it.
Add a webhook #
Register a new webhook by entering its endpoint URL, authorization details, and a header key/value pair. The dashboard confirms once it's created.
- Open the Webhooks tab.
- Click the Add webhook button.
- Select the client.
- Enter a name.
- Enter the purpose.
- Enter the endpoint URL.
- Select the event.
- Click Add header.
- Select the header key.
- Enter the header value.
- Click Submit.
Edit a webhook #
Update an existing webhook's settings — endpoint details, content type, or event selections — and save the changes.
- Open the Webhooks tab.
- Click the edit button on the webhook you want to change.
- Update the details as needed.
- Click Submit.
Change webhook status #
Toggle a webhook between active and inactive. Inactive webhooks stop receiving notifications until reactivated.
- Open the Webhooks tab.
- Click the status toggle to mark the webhook active.
- Click it again to mark the webhook inactive.
Delete a webhook #
Permanently remove a webhook. A confirmation prompt guards against accidental deletion.
- Open the Webhooks tab.
- Click the Delete button on the webhook you want to remove.
- Click No to cancel, or Yes to confirm and delete the webhook.
Webhook events #
Once a webhook is configured in the dashboard, Aliste pushes a JSON payload to your endpoint whenever a subscribed event fires. These are the payloads you'll receive.
Recharge status webhook #
Sent when a recharge transitions to success or failed. The payload schema is identical to the Retrieve a recharge response.
{
"status": "success",
"amount": 1000,
"gatewayCharge": 15,
"paymentMode": "Card",
"rechargeId": "66fe38d21cd53cdac238f8c0",
"balanceAdded": 985,
"createdAt": "2025-01-01T10:00:00.000Z",
"rechargedAt": "2025-01-01T10:00:00.000Z",
"roomBalance": 2500.50,
"phoneNumber": "9999999999",
"roomId": "TEST001",
"userId": "CLIENT_USR_88421",
"userName": "Aarav Mehta",
"metaData": {
"alisteRoomId": "66fe39d21cd53cdac238f8c0",
"alisteUserId": "66fe39d23cd53cdac238f8c0"
}
}Ticket status webhook #
Pushed on every ticket status transition. The activity array contains the complete history. Observed statuses: created, in_progress, resolved, closed.
{
"ticketId": "Tdfds34",
"status": "resolved",
"createdAt": "2025-01-01T10:00:00.000Z",
"subject": "My recharge isn't reflecting",
"description": "Paid ₹500 30 minutes ago...",
"phoneNumber": "9999999999",
"userId": "CLIENT_USR_88421",
"category": 2,
"subcategory": 0,
"activity": [
{ "status": "created", "comment": "", "timestamp": "2025-01-01T10:00:00.000Z" },
{ "status": "in_progress", "comment": "Looking into it", "timestamp": "2025-01-01T10:15:00.000Z" },
{ "status": "resolved", "comment": "Refund processed","timestamp": "2025-01-01T11:30:00.000Z" }
]
}Test credentials #
Use this demo Basic auth token against the staging base URL to validate your integration end-to-end.
curl https://test.alistetechnologies.com/integration/room/details \
-H "Authorization: Basic MjJVeHFkN2o6Y0p3bmdYSFI4cTJGTzhuYm84YVYwRGZoMEl5eVRzd1A=" \
-H "Content-Type: application/json" \
-d '{"roomId":"TEST001"}'Demo data #
Rooms wired up on staging. Only TEST001 is currently active.
| Name | Reference ID | Device ID | Status |
|---|---|---|---|
| 001 | TEST001 | M240000 | ● active |
| 002 | TEST002 | M310000 | idle |
| 003 | TEST003 | M320000 | idle |
| 004 | TEST004 | H320000 | idle |
| 005 | TEST005 | H310000 | idle |
© Aliste Technologies · Volta Integration API