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 onto Aliste's
For each property, call Update a property once: pass Aliste's alisteId as propertyId, and your own ID as referenceId. Do the same for every room via Update a room.
This one-time write tells Aliste how your IDs correspond to its records. Every subsequent endpoint accepts either ID.
Use your own IDs going forward
You're done. From here on, every API call can use the IDs from your own database — no need to persist Aliste's internal IDs anywhere in your system.
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",
"alisteId": "66fe39d21cd53cdac238f8c0",
"name": "Sample Property Alpha",
"cpu": 8, "cpdu": 12,
"rooms": [{ "id": "TEST001", "name": "Room A-101", "balance": 540.25 }],
"commonAreas": [{ "id": "CA1001", "name": "Recreation Hall" }]
}
]
}
}List rooms in a property #
Lists every room and common area under a property, with per-meter monitoring state.
Body parameters
Your property ID or Aliste 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",
"alisteId": "66fe39d21cd53cdac238f8c0",
"name": "Room A-101",
"cpu": 8, "cpdu": 12,
"balance": 540.25,
"blocked": false,
"devices": ["M240000"],
"monitoring": true
}
],
"commonAreas": [
{
"id": "CA1001",
"name": "Recreation Hall",
"devices": ["M310000"],
"monitoring": true
}
]
}
}Retrieve a property #
Returns the configuration of a single property including tariffs, minimums, and monitoring status.
Body parameters
Your property ID (referenceId) or Aliste 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,
"supportNumbers": ["+919834343434"],
"supportEmails": ["support@example.com"],
"monitoring": true
}
}
}Update a property #
Updates property-level settings such as unit cost and minimum recharge.
Body parameters
Aliste or 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.
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",
"cpu": 9,
"minRecharge": 200
}
}
}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
Your referenceId or Aliste 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.
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,
"monitoring": true,
"devices": ["M240000"],
"devicesStatus": [
{ "deviceId": "M240000", "connected": true }
]
}
}
}List room users #
Returns every tenant currently attached to a room.
Body parameters
Your referenceId or Aliste 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
Aliste or client room ID.
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",
"mnb": -100,
"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
Room to act on.
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", "blocked": true }
}
}Room consumption #
Returns every deduction (energy and manual) on a room within a window. Dates must be UTC ISO-8601.
Body parameters
Room reference.
2025-01-15T00:00:00.000Z — inclusive.
2025-01-31T23:59:59.999Z — exclusive.
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",
"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
Your room ID (matches meta_data.referenceId) or the Aliste 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, stored on the Aliste user as meta_data.referenceId.
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
Room ID (your referenceId or Aliste 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": {}
}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
Aliste or 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"
}
}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
Room reference.
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
Room reference.
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", "balance": 740.25 }
}
}Manual deduction #
Pulls credit from a room balance. Use for penalties, CAM charges, or fixed-cost recoveries.
Body parameters
Room reference.
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", "balance": 590.25 }
}
}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
Room the ticket is filed against.
One of 1, 2, 3, 4, 5 — see matrix below.
Subcategory matching the chosen category.
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 |
|---|---|---|---|
| 1 | Deductions | 0 | Over consumption |
| 1 | Deductions | 1 | Can't see deduction |
| 2 | Recharge | 0 | Recharge not reflected |
| 2 | Recharge | 1 | Unable to recharge |
| 3 | Balance | 0 | Wrong balance being shown |
| 4 | Room | 0 | Wrong room number |
| 4 | Room | 1 | Roommate not added |
| 5 | Other | 0 | Other |
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" }
}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",
"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 properties to filter by.
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", "propertyName": "Sample Property", "amount": 5000 }
],
"invoices": [
{ "propertyId": "PROP12345", "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
Properties to compute pending payouts for.
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
}
]
}Recharge status webhook #
Sent when a recharge transitions to success or failed. The payload schema is identical to the Retrieve a recharge response.
200 OK within 5 seconds. Aliste retries non-2xx responses with exponential backoff.
{
"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