Access and price
API access is an add-on for owners: AED 100 a month, charged daily from the balance. The owner switches it on in Settings → API and makes keys there. A key is shown once; keep it secret.
Authentication
Send the key in the Authorization header of every request. A key reads the companies its owner owns, or only those picked for it, and never writes. Changing or resetting the owner's password stops every key made before it.
curl https://uaeasy.ae/api/public/v1/companies \ -H "Authorization: Bearer uaesy_live_..."
Lists and paging
Lists return an object with data (the rows) and nextCursor. Ask for up to 200 rows with limit (100 by default); pass nextCursor as cursor for the next page until it comes back null. updatedSince returns only rows changed since a moment, for a nightly sync. Deleted rows simply stop appearing, so re-read the full list now and then.
{
"data": [ { "id": "…", … } ],
"nextCursor": "6f1d…"
}Money, dates and ids
Amounts are whole numbers in fils: 100 fils = 1 AED. VAT is given apart from the net amount. Dates are YYYY-MM-DD, moments are ISO 8601 with a time zone, ids are UUIDs.
Limits and errors
Each key may make 60 requests a minute and 10,000 a day. An error comes back as an object with detail, and one of these codes:
| 401 | No key, or the key is unknown, revoked or expired. |
| 402 | API access is switched off, or the balance has run out. |
| 403 | The key reaches no company its owner still owns. |
| 404 | No such record in the key's companies. |
| 422 | A parameter is not valid: detail says which. |
| 429 | Over a limit: wait the seconds in the Retry-After header. |
Methods
List companies
GET/api/public/v1/companies
The companies this key reads: those you own, or the ones you picked for the key, whose account has API access on. Use their id as companyId to narrow the other lists to one company.
Response
A list of Company:
| Field | Type | Description |
|---|---|---|
| id | uuid | Company id; pass it as companyId to other lists. |
| name | string | Company name. |
Example
curl "https://uaeasy.ae/api/public/v1/companies" \ -H "Authorization: Bearer uaesy_live_..."
List buildings
GET/api/public/v1/buildings
Buildings registered as a whole, with their number of units and floors. Units inside a building carry its id as buildingId in the properties list.
Parameters
| Field | Type | Description |
|---|---|---|
| companyId | uuid optional | Only this company; default all of the key's companies |
| updatedSince | date-time optional | Only rows changed at or after this moment (ISO 8601) |
| cursor | uuid optional | nextCursor from the previous page |
| limit | integer optional | Rows per page, 1 to 200; 100 by default. |
Response
A page: data holds the Building rows, nextCursor the next page. Each Building:
| Field | Type | Description |
|---|---|---|
| id | uuid | Building id. |
| companyId | uuid | Company the building belongs to. |
| number | integer | The building's number in UAESY. |
| name | string | Building name. |
| buildingNumber | string or null | Building number from the title deed or Makani, if entered. |
| emirate | string | Emirate. |
| unitCount | integer | Units the building has. |
| floorCount | integer or null | Floors, if entered. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/buildings" \ -H "Authorization: Bearer uaesy_live_..."
List properties
GET/api/public/v1/properties
Units and stand-alone properties, with their address, size, status and prices. Properties in the trash are left out. wholeBuilding marks the hidden unit that stands for a building leased as one.
Parameters
| Field | Type | Description |
|---|---|---|
| companyId | uuid optional | Only this company; default all of the key's companies |
| updatedSince | date-time optional | Only rows changed at or after this moment (ISO 8601) |
| buildingId | uuid optional | Only units of this building. |
| cursor | uuid optional | nextCursor from the previous page |
| limit | integer optional | Rows per page, 1 to 200; 100 by default. |
Response
A page: data holds the Property rows, nextCursor the next page. Each Property:
| Field | Type | Description |
|---|---|---|
| id | uuid | Property id. |
| companyId | uuid | Company the property belongs to. |
| buildingId | uuid or null | The building it is in, when it is a unit of one. |
| number | integer | The property's number in UAESY. |
| name | string | Name shown in UAESY. |
| kind | string | Residential or commercial. |
| type | string | Apartment, villa, office and so on. |
| wholeBuilding | boolean | The unit that stands for a whole building leased as one |
| status | string | Vacant, occupied and so on. |
| emirate | string | Emirate. |
| community | string | Community or district. |
| area | string or null | Area within the community. |
| building | string or null | Building name as written on the property. |
| unitNumber | string or null | Unit number. |
| floor | string or null | Floor. |
| sizeSqft | number or null | Size in square feet. |
| sizeSqm | number or null | Size in square metres. |
| bedrooms | integer or null | Bedrooms. |
| bathrooms | integer or null | Bathrooms. |
| furnished | string | Furnished, semi-furnished or unfurnished. |
| dldTitleDeedNo | string or null | DLD title deed number. |
| dewaPremiseNo | string or null | DEWA premise number. |
| makaniNo | string or null | Makani number. |
| purchasePriceFils | integer or null | Purchase price, fils. |
| purchaseDate | date or null | Purchase date. |
| forRent | boolean | Listed for rent. |
| rentPriceFils | integer or null | Asking rent a year, fils. |
| forSale | boolean | Listed for sale. |
| salePriceFils | integer or null | Asking price, fils. |
| createdAt | date-time | When it was added. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/properties" \ -H "Authorization: Bearer uaesy_live_..."
Get a property
GET/api/public/v1/properties/{property_id}
One property by its id; 404 when it is not in your companies or is in the trash.
Parameters
| Field | Type | Description |
|---|---|---|
| property_id | uuid required | The id of the record, from its list. |
Response
One Property:
| Field | Type | Description |
|---|---|---|
| id | uuid | Property id. |
| companyId | uuid | Company the property belongs to. |
| buildingId | uuid or null | The building it is in, when it is a unit of one. |
| number | integer | The property's number in UAESY. |
| name | string | Name shown in UAESY. |
| kind | string | Residential or commercial. |
| type | string | Apartment, villa, office and so on. |
| wholeBuilding | boolean | The unit that stands for a whole building leased as one |
| status | string | Vacant, occupied and so on. |
| emirate | string | Emirate. |
| community | string | Community or district. |
| area | string or null | Area within the community. |
| building | string or null | Building name as written on the property. |
| unitNumber | string or null | Unit number. |
| floor | string or null | Floor. |
| sizeSqft | number or null | Size in square feet. |
| sizeSqm | number or null | Size in square metres. |
| bedrooms | integer or null | Bedrooms. |
| bathrooms | integer or null | Bathrooms. |
| furnished | string | Furnished, semi-furnished or unfurnished. |
| dldTitleDeedNo | string or null | DLD title deed number. |
| dewaPremiseNo | string or null | DEWA premise number. |
| makaniNo | string or null | Makani number. |
| purchasePriceFils | integer or null | Purchase price, fils. |
| purchaseDate | date or null | Purchase date. |
| forRent | boolean | Listed for rent. |
| rentPriceFils | integer or null | Asking rent a year, fils. |
| forSale | boolean | Listed for sale. |
| salePriceFils | integer or null | Asking price, fils. |
| createdAt | date-time | When it was added. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/properties/3f2c9a1e-5b7d-4c21-9e0a-1d2b3c4d5e6f" \ -H "Authorization: Bearer uaesy_live_..."
List tenants
GET/api/public/v1/tenants
People and companies who rent from you, with their contact details. Emirates ID and passport numbers are never sent.
Parameters
| Field | Type | Description |
|---|---|---|
| companyId | uuid optional | Only this company; default all of the key's companies |
| updatedSince | date-time optional | Only rows changed at or after this moment (ISO 8601) |
| cursor | uuid optional | nextCursor from the previous page |
| limit | integer optional | Rows per page, 1 to 200; 100 by default. |
Response
A page: data holds the Tenant rows, nextCursor the next page. Each Tenant:
| Field | Type | Description |
|---|---|---|
| id | uuid | Tenant id. |
| companyId | uuid | Company the tenant rents from. |
| type | string | person or company |
| name | string | Full name or company name. |
| phone | string or null | Phone in international format. |
| string or null | Email. | |
| nationality | string or null | Nationality, for a person. |
| companyRegNo | string or null | Trade licence number, for a company. |
| createdAt | date-time | When it was added. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/tenants" \ -H "Authorization: Bearer uaesy_live_..."
Get a tenant
GET/api/public/v1/tenants/{tenant_id}
One tenant by its id.
Parameters
| Field | Type | Description |
|---|---|---|
| tenant_id | uuid required | The id of the record, from its list. |
Response
One Tenant:
| Field | Type | Description |
|---|---|---|
| id | uuid | Tenant id. |
| companyId | uuid | Company the tenant rents from. |
| type | string | person or company |
| name | string | Full name or company name. |
| phone | string or null | Phone in international format. |
| string or null | Email. | |
| nationality | string or null | Nationality, for a person. |
| companyRegNo | string or null | Trade licence number, for a company. |
| createdAt | date-time | When it was added. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/tenants/3f2c9a1e-5b7d-4c21-9e0a-1d2b3c4d5e6f" \ -H "Authorization: Bearer uaesy_live_..."
List contracts
GET/api/public/v1/contracts
Leases with their term, rent, VAT, deposit and status. Filter by status, propertyId or tenantId. Contracts of properties in the trash are left out.
Parameters
| Field | Type | Description |
|---|---|---|
| companyId | uuid optional | Only this company; default all of the key's companies |
| updatedSince | date-time optional | Only rows changed at or after this moment (ISO 8601) |
| status | string optional | Only rows in this status. draft · pending_signature · active · expired · terminated · renewed |
| propertyId | uuid optional | Only rows of this property. |
| tenantId | uuid optional | Only rows of this tenant. |
| cursor | uuid optional | nextCursor from the previous page |
| limit | integer optional | Rows per page, 1 to 200; 100 by default. |
Response
A page: data holds the Contract rows, nextCursor the next page. Each Contract:
| Field | Type | Description |
|---|---|---|
| id | uuid | Contract id. |
| companyId | uuid | Company of the contract. |
| propertyId | uuid | The property leased. |
| tenantId | uuid | The tenant. |
| number | string | Contract number shown in UAESY. |
| status | string | Where the lease stands. |
| startDate | date | First day of the lease. |
| endDate | date | Last day of the lease, rent-free days included. |
| graceDays | integer | Rent-free days at the start. |
| annualRentFils | integer | Rent a year before VAT, fils. |
| vatRateBps | integer | VAT in basis points: 500 = 5% |
| securityDepositFils | integer | Security deposit, fils. |
| chequeCount | integer | Number of payments the rent is split into. |
| archived | boolean | History entered after the fact |
| ownerUse | boolean | The owner uses the unit: a term only, no rent |
| renewedFromId | uuid or null | The contract this one renews. |
| terminatedAt | date-time or null | When it was ended early. |
| createdAt | date-time | When it was added. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/contracts" \ -H "Authorization: Bearer uaesy_live_..."
Get a contract
GET/api/public/v1/contracts/{contract_id}
One contract with its whole payment schedule in payments, ordered by due date.
Parameters
| Field | Type | Description |
|---|---|---|
| contract_id | uuid required | The id of the record, from its list. |
Response
One ContractDetail:
| Field | Type | Description |
|---|---|---|
| id | uuid | Contract id. |
| companyId | uuid | Company of the contract. |
| propertyId | uuid | The property leased. |
| tenantId | uuid | The tenant. |
| number | string | Contract number shown in UAESY. |
| status | string | Where the lease stands. |
| startDate | date | First day of the lease. |
| endDate | date | Last day of the lease, rent-free days included. |
| graceDays | integer | Rent-free days at the start. |
| annualRentFils | integer | Rent a year before VAT, fils. |
| vatRateBps | integer | VAT in basis points: 500 = 5% |
| securityDepositFils | integer | Security deposit, fils. |
| chequeCount | integer | Number of payments the rent is split into. |
| archived | boolean | History entered after the fact |
| ownerUse | boolean | The owner uses the unit: a term only, no rent |
| renewedFromId | uuid or null | The contract this one renews. |
| terminatedAt | date-time or null | When it was ended early. |
| createdAt | date-time | When it was added. |
| updatedAt | date-time | Last change. |
| payments | array of Payment | The payment schedule, by due date. |
Example
curl "https://uaeasy.ae/api/public/v1/contracts/3f2c9a1e-5b7d-4c21-9e0a-1d2b3c4d5e6f" \ -H "Authorization: Bearer uaesy_live_..."
List payments
GET/api/public/v1/payments
Rent payments of every contract, and other incomes of a unit (kind = income, no contract). Filter by status, contract, property or a due-date range: dueFrom=2026-01-01&dueTo=2026-12-31&status=received gives what came in this year.
Parameters
| Field | Type | Description |
|---|---|---|
| companyId | uuid optional | Only this company; default all of the key's companies |
| updatedSince | date-time optional | Only rows changed at or after this moment (ISO 8601) |
| status | string optional | Only rows in this status. due · received · cleared · returned · bounced · cancelled |
| contractId | uuid optional | Only rows of this contract. |
| propertyId | uuid optional | Only rows of this property. |
| dueFrom | date optional | Only rows due on or after this day. |
| dueTo | date optional | Only rows due on or before this day. |
| cursor | uuid optional | nextCursor from the previous page |
| limit | integer optional | Rows per page, 1 to 200; 100 by default. |
Response
A page: data holds the Payment rows, nextCursor the next page. Each Payment:
| Field | Type | Description |
|---|---|---|
| id | uuid | Payment id. |
| companyId | uuid | Company of the payment. |
| kind | string | rent of a contract, or another income of a unit rent · income |
| contractId | uuid or null | null for kind=income |
| propertyId | uuid | The property it is for. |
| number | integer | Payment number shown in UAESY. |
| dueDate | date | Day it is due. |
| amountNetFils | integer | Amount before VAT, fils. |
| vatFils | integer | VAT, fils. |
| method | string or null | Cheque, cash, bank transfer or card, once known. |
| status | string | Where the payment stands. |
| receivedDate | date or null | Day it was received. |
| receiptNumber | string or null | Receipt number, if one was issued. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/payments?status=received&dueFrom=2026-01-01&limit=50" \ -H "Authorization: Bearer uaesy_live_..."
List expenses
GET/api/public/v1/expenses
Expenses of your units and buildings, planned, pending or paid, with net amount, VAT, payee and invoice. Filter by status, propertyId or a due-date range.
Parameters
| Field | Type | Description |
|---|---|---|
| companyId | uuid optional | Only this company; default all of the key's companies |
| updatedSince | date-time optional | Only rows changed at or after this moment (ISO 8601) |
| status | string optional | Only rows in this status. planned · pending · paid |
| propertyId | uuid optional | Only rows of this property. |
| dueFrom | date optional | Only rows due on or after this day. |
| dueTo | date optional | Only rows due on or before this day. |
| cursor | uuid optional | nextCursor from the previous page |
| limit | integer optional | Rows per page, 1 to 200; 100 by default. |
Response
A page: data holds the Expense rows, nextCursor the next page. Each Expense:
| Field | Type | Description |
|---|---|---|
| id | uuid | Expense id. |
| companyId | uuid | Company of the expense. |
| propertyId | uuid or null | The property it is for, if any. |
| buildingId | uuid or null | The building it is for, when it is for a building as a whole. |
| number | integer | Expense number shown in UAESY. |
| category | string | Category, such as maintenance or service charges. |
| description | string | What it is for. |
| payee | string or null | Who is paid. |
| amountNetFils | integer | Amount before VAT, fils. |
| vatFils | integer | VAT, fils. |
| dueDate | date | Day it is due. |
| paidDate | date or null | Day it was paid. |
| status | string | Planned, pending or paid. |
| method | string or null | How it was paid. |
| invoiceNumber | string or null | Supplier's invoice number. |
| invoiceDate | date or null | Supplier's invoice date. |
| createdAt | date-time | When it was added. |
| updatedAt | date-time | Last change. |
Example
curl "https://uaeasy.ae/api/public/v1/expenses" \ -H "Authorization: Bearer uaesy_live_..."