LookzUp | Developer APIs
Integration Reference · Setup & Development

LookzUp Developer APIs

Everything a partner platform needs to authenticate, onboard customers, browse services, take bookings, settle invoices and manage memberships — under your own brand, on top of LookzUp's ledger.

Base URL (Production Environment)
https://privatelabel-services.lookzup.com/v1
1

Overview & Integration Flow

A typical private-label integration follows this sequence. Each row is a stop on the same paper trail — a customer moves from signup, to booking, to invoice, to payment and every step hands off a reference number to the next.

StepActionAPI
1Collect Access Key, Secret and Tenant ID from LookzUp Support
2Exchange credentials for an auth tokengetAuthToken
3Build your own signup/login system for your customers
4Create a matching customer record in LookzUpcreateBusinessCustomer
5Fetch the customer's basic auth recordgetBusinessCustomerDataById
6Set/complete the customer's profileaddEditBusinessCustomerData
7Fetch the customer's stored profile datagetBusinessCustomerProfileData
8List services/packages offered by the businessgetBusinessServicePackageList
9Create a booking/appointmentcreateCustomerBooking
10Generate an invoice (if advance payment enabled)createCustomerInvoice
11Fetch booking detailsgetBookingDetails
12Record a payment against a bookingrecordCustomerPayment
13List a customer's bookingsgetCustomerBookings
14Membership request / list / details flows
15Enquiry ("Contact Us") flows
2

Authentication

Every call after this one rides on a single stamped token. Get it once, reuse it for the session.

No. 01 POST

Get Auth Token

Exchanges your partner clientId + clientSecret for a short-lived Bearer token used on all subsequent calls.

POST/public/getAuthToken

Headers

HeaderRequiredDescription
clientId Yes Your LookzUp-issued client ID
clientSecret Yes Your LookzUp-issued client secret

Example Request

bash
curl --location --request POST '{base_url}/public/getAuthToken' \
--header 'clientId: {your_client_id}' \
--header 'clientSecret: {your_client_secret}'

Example Response

json
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...(truncated)",
  "expires_in": 3600,
  "token_type": "Bearer"
}

Security Notes

  • Call this endpoint only from your backend. Never embed clientId/clientSecret in front-end code.
  • Store credentials in environment variables (e.g. .env), not in source control.
  • Cache and re-use the returned access_token for the full session (expires_in seconds ≈ 1 hour) instead of requesting a new token per call.
  • Use the token as Authorization: Bearer {access_token} on subsequent calls unless otherwise noted.

The decoded token carries tenantId, clientId and a scope array (e.g. member.read, booking.write, customer.read, membership.write).

3

Customer Management

Your platform keeps its own login system. Every onboarded customer is mirrored into LookzUp so they can book, join memberships and be found by their ticket.

No. 02 POST

Create Business Customer

Creates a new customer (or guest) record in the LookzUp auth system and returns a UUID you should store against your local user record.

POST/createBusinessCustomer

Headers

HeaderRequired
Authorization: Bearer {access_token} Yes
Content-Type: application/json Yes

Body

json
{
  "email": "newuser@testmail.com",
  "countryCode": "+91",
  "phoneNumber": "1234567890",
  "password": "newuser#123"
}

Response

json
{
  "result": "success",
  "uuid": "bI7ksbIpIKftL0VWT9v5m6KO7t13"
}

Note: Persist this uuid against your local user record — it is required as an identifier on nearly every subsequent customer-scoped call.

No. 03 GET

Get Business Customer Data by UUID

Retrieves the customer's basic Firebase-style auth record.

GET/getBusinessCustomerDataById

Headers

HeaderRequiredDescription
uuid Yes The customer UUID
Authorization: Bearer {access_token} Yes

Example Response (abridged)

json
{
  "result": "success",
  "user": {
    "uid": "lYf3B1oH3kYBzZwpiM6lGIKpRq32",
    "email": "abc@testmail.com",
    "emailVerified": false,
    "displayName": "Guest User",
    "phoneNumber": "+919830451234",
    "disabled": false,
    "tenantId": "Tulayraa-yjjzs",
    "providerData": [
      { "providerId": "phone", "phoneNumber": "+919830451234" },
      { "providerId": "password", "email": "abc@testmail.com" }
    ]
  }
}
No. 04 POST

Add / Edit Business Customer Data

Sets or updates the customer's profile. This call also transitions a newly created user into a state where they can book appointments and perform other customer actions.

POST/addEditBusinessCustomerData

Headers

HeaderRequired
Authorization Yes
Content-Type: application/json Yes

Body

json
{
  "uuid": "GHOg0L0zXhaZhKf17bwWei0snFt1",
  "email": "newuser@testmail.com",
  "countryCode": "+91",
  "phoneNumber": "1234567890",
  "displayName": "Celina Wright",
  "dob": "1981-11-10 00:00:00",
  "photoURL": "https://abc.com/pix/b.jpg",
  "gender": "Female",
  "shortBio": "A short bio.",
  "emailVerificationStatus": 1
}

Response

json
[
  { "errorcode": "0", "message": "Profile data add/updated successfully." }
]
No. 05 GET

Get Business Customer Profile Data

Fetches the profile stored in LookzUp for a given customer.

GET/getBusinessCustomerProfileData

Headers

HeaderRequired
uuid Yes
Authorization: Bearer {access_token} Yes

Example Response (abridged)

json
[
  {
    "email": "abc@testmail.com",
    "country_code": "+91",
    "profileHashId": "e4026f487863339542e5d8323ce90637acde252f",
    "name": "Byomkesh Bakshi 2",
    "gender": null,
    "dateOfBirth": "1981-11-10T00:00:00.000Z",
    "phone": "9830451234",
    "profile_code": "26CD17A525",
    "userType": 7,
    "creation_time": "2026-06-23T07:36:54.000Z"
  }
]
4

Services & Packages

The catalog a customer books from — every treatment, price and time slot the business has put on the board.

No. 06 GET

Get Business Service Package List

Returns the services and membership packages offered by the business, paginated.

GET/getBusinessServicePackageList

Headers

HeaderRequiredDescription
serviceType Yes Filter by service type (e.g. 0)
count Yes Page size
pageNumber Yes Page number
Authorization: Bearer {access_token} Yes

Example Response Item (abridged)

json
{
  "totalCount": 8,
  "businessHashId": "fa1a1ad7bb57b9c5f7ae84b1114a1d011624a0a8",
  "hash_id": "f87d3e4119e525eac0e342e71acc8ff224203552",
  "serviceName": "Beard Trim",
  "approxTime": 10,
  "description": "Shaping, grooming and styling of facial hair...",
  "shop_rate": 150,
  "home_rate": 200,
  "currency": "INR",
  "currency_symbol": "₹",
  "status": 1,
  "homeStatus": 1,
  "shopStatus": 1,
  "discountStatus": 0,
  "is_available_online": 0
}

Key Fields for Rendering a Service Catalog

  • shop_rate / home_rate / virtual_rate — pricing per delivery mode.
  • homeStatus / shopStatus / for_virtual — which delivery modes are enabled.
  • discountStatus, discountAmount, discountType, shopDiscountedPrice, homeDiscountedPrice — active discount details.
  • tax_slab_hash, tax_collection_status — whether tax applies to this service.
  • is_available_online — whether the service can be booked without a shop visit.
5

Booking Management

Where the appointment is actually punched onto the ledger — created, looked up and listed.

No. 07 POST

Create Customer Booking

Creates an appointment for a customer against one or more selected services.

POST/createCustomerBooking

Headers

HeaderRequired
uuid Yes
Authorization: Bearer {access_token} Yes
Content-Type: application/json Yes

Body (structure)

json
{
  "bookingInfo": {
    "bookingDate": "2026-07-22 21:31:48",
    "bookingStartTime": "22:00",
    "bookingEndTime": "23:00",
    "price": 200,
    "bookingType": "0",
    "bookingStatus": 1,
    "servicesInfo": [
      {
        "businessHashId": "dc9c361261775779d463ccd9889602b66b135f48",
        "hash_id": "f87d3e4119e525eac0e342e71acc8ff224203552",
        "serviceName": "Beard Trim",
        "rate": 200,
        "selected": true,
        "qty": 1
      }
    ],
    "booking_address": {
      "city": "Tinsukia",
      "state": "Assam",
      "country": "India",
      "zip": "786125",
      "lat": "27.488554",
      "lng": "95.355758",
      "address_line": "Tinsukia, Assam, India",
      "booking_type": "0",
      "country_code": "+91",
      "phone": "3333333333"
    },
    "time_zone": "Asia/Kolkata",
    "creation_time": "2026-07-22 21:31:51"
  }
}

Response

json
{
  "message": "Booking created sucessfully.",
  "errorcode": 0,
  "appointmentNo": "3",
  "bookingHashId": "dd0b4848bb88c82c0e9bec96f983e924472dd905",
  "reward_points_earned": 25
}

Note: Persist bookingHashId — it is the primary reference for invoicing, payments and status lookups.

No. 08 GET

Get Booking Details

Get the details of an appointment for a customer based on the booking hash.

GET/getBookingDetails

Headers

HeaderRequired
bookingHashId Yes
uuid Yes
Authorization Yes

The response returns booking status, timing, serviceList (JSON string), customerInfo, entityInfo, booking_address, advance_payment_status and payments — all as embedded JSON strings that should be parsed client-side.

Common bookingStatus values seen in examples: 1 (created/pending), 7 (completed/other terminal state) — confirm the full enum with LookzUp support before relying on it in production logic.

No. 09 GET

Get Customer Booking List

Returns a paginated list of a customer's appointments across businesses.

GET/getCustomerBookings

Headers

HeaderRequiredDescription
Authorization Yes
uuid Yes
pageNo Yes Page number
count Yes Page size

The response is an array of booking summaries, each including total_count (for pagination), shopName, shopImage, bookingStatus, bookingStartTime/bookingEndTime and embedded entityInfo/e_info JSON strings describing the business.

6

Invoicing & Payments

The receipt half of the ledger — what is owed and what has been settled.

No. 10 POST

Create Customer Invoice

Generates an invoice for a booking. Required when the business accepts advance payment.

POST/createCustomerInvoice

Headers

HeaderRequired
uuid Yes
bookingHashId Yes
Authorization Yes
Content-Type: application/json Yes

Response (abridged)

json
{
  "hash_id": "c207b90f0c4a2dd3e81a691ffffc5ac4c43993ac",
  "entity_name": "Glamour Salon and Parlour",
  "booking_no": "2",
  "cust_name": "Byomkesh Bakshi",
  "total_price": 610.5,
  "payment_status": 0,
  "inv_no": "GLAINV202606230828153763",
  "total_tax": "55.50",
  "item_price": 555,
  "sgst_value": 55.5,
  "currency": "INR",
  "currency_symbol": "₹",
  "invoiceDetails": "[ ...line items with per-service tax breakdown... ]",
  "isOnlinePaymentEnabled": 1,
  "advance_payment_status": "{\"home_service\": 1, \"shop_service\": 0, \"virtual_service\": 0}",
  "advance_payment_required": 100
}

Key Fields

  • invoiceDetails — JSON string; an array of line items, each with serv_name, serv_cost, cgst_value/sgst_value/igst_value, total_cost.
  • advance_payment_required — amount (in smallest applicable unit per currency) the customer must pay upfront.
  • isOnlinePaymentEnabled / submerchant_public_token — indicates whether online payment is available for this business.
No. 11 POST

Record Customer Payment

Records a payment (cash, card, online, etc.) against one or more appointments.

POST/recordCustomerPayment

Headers

HeaderRequired
Authorization: Bearer {access_token} Yes
Content-Type: application/json Yes

Body

json
{
  "appointments": [
    { "appointment_hash_id": "7d6926b1a640730c13cdd05ee70ebd94a251c051", "is_primary": 1 }
  ],
  "total_price": 400,
  "customer_payment": 100,
  "net_price": 400,
  "payment_status": 1,
  "currency": "USD",
  "currency_symbol": "$",
  "payment_mode": "Cash",
  "invoice_hash": "cf159163eb0fe33a04500f86d418d77fceab46e3",
  "is_paying_due": 1,
  "payment_time": "2026-06-29 21:04:56",
  "country_code": "+91",
  "phone": "3333333333",
  "payment_type": 1
}

Response

json
{ "msg": "success", "errorcode": 0 }
7

Membership Management

Recurring commitments — requesting, listing and inspecting gym and salon memberships.

No. 12 POST

Create Membership Request

Lets a customer request enrollment into a gym/salon membership package.

POST/createMembershipRequest

Headers

HeaderRequired
uuid Yes
Authorization: Bearer {access_token} Yes
Content-Type: application/json Yes

Body (structure)

json
{
  "customer_name": "Celina Wright",
  "customer_country_code": "+91",
  "customer_phone": "1234567890",
  "customer_notes": "Come to my home to provide the service. Is that possible?",
  "services": [
    {
      "service_type_hash": "c56ab27edc1eb9d06e9b31e56fc8020668ba9014",
      "service_name": "Third session",
      "service_qty": 1,
      "service_rate": 500,
      "service_time": 45
    }
  ],
  "timings": [
    { "weekday": 4, "start_time": "18:00", "end_time": "19:00" }
  ],
  "interest_type": "1",
  "creation_date": "2026-07-17 11:00:00"
}

Response

json
{ "errorcode": 0, "msg": "success", "data": { "reward_points_earned": 10 } }
No. 13 GET

Get Membership Request List

Lists a customer's membership applications across businesses.

GET/getMembershipRequestList

Headers

HeaderRequired
uuid Yes
Authorization: Bearer {access_token} Yes

Returns an array of request summaries including enrollment_request_status (e.g. 1 = pending, 3 = a terminal/other status — confirm full enum with LookzUp support), customer_notes and embedded entity_details.

No. 14 GET

Get Membership Request Details

Get the latest update of a membership request created by a user.

GET/getMembershipRequestDetails

Headers

HeaderRequired
requestHash Yes
Authorization Yes

Adds request_services and request_timings (both JSON strings) plus coupon fields (coupon_code, discount_value, minimum_cart_value, max_discount) to the request summary.

No. 15 GET

Get Membership List

Lists a customer's current and past confirmed memberships.

GET/getMembershipList

Headers

HeaderRequired
uuid Yes
Authorization: Bearer {access_token} Yes

Key response fields: membership_fee, discount, net_payable, total_due, membership_start_date, membership_status, service_mode, entity_services (JSON string listing the services covered).

No. 16 GET

Get Membership Details

This returns the detailed membership data of an exisiting member.

GET/getMembershipDetails

Headers

HeaderRequiredDescription
memberHash Yes
currentDate Yes Reference date for due/status calculations
Authorization Yes

Returns full membership detail: coupon_code/coupon_discount_amount/coupon_discount_type, billing_period, services (JSON string of covered services with rates), timings (JSON string of recurring slots), assign_to (staff member), total_wallet and total_reward.

8

Enquiries / Contact Us

The counter bell — a direct line for a customer to ask a business something outside the booking flow.

No. 17 POST

Create Service Enquiry

Submits a "Contact Us" style enquiry to a business.

POST/createServiceEnquiry

Headers

HeaderRequired
uuid Yes
Authorization Yes
Content-Type: application/json Yes

Body

json
{
          "name": "Celina Wright",
          "country_code": "+91",
          "phone": "1234567890",
          "email": "celina@example.com",
          "enquiry_type": 3,
          "message": "Is anyone there in the shop? I can see it's empty.",
          "creation_time": "2026-07-24 14:00:00",
          "service_mode": 2
        }

Response

json
{ "errorcode": 0, "msg": "success" }
No. 18 GET

Get Customer Service Enquiries

Lists a customer's submitted enquiries.

GET/getCustomerServiceEnquiries

Headers

HeaderRequired
uuid Yes
Authorization: Bearer {access_token} Yes
No. 19 GET

Get Customer Enquiry Details

This returns the latest update and replies of a customer enquiry.

GET/getCustomerEnquiryDetails

Headers

HeaderRequired
hashId Yes
Authorization Yes

Returns full enquiry detail including message, reply/reply_date (populated once the business responds), status, service_mode and embedded entityInfo.

9

Error Handling

  • Successful mutation calls typically return either a plain success object ({"result":"success", ...}, {"errorcode":0, "msg":"success"}) or an array containing {"errorcode": "0", "message": "..."}.
  • A non-zero errorcode indicates failure; inspect the accompanying message/msg for details.
  • Always check for result: "success" or errorcode: 0 before treating a response as authoritative — do not assume HTTP 200 alone means success, since some endpoints wrap error details inside a 200 response body.
10

Development Environment & API Testing

Before requesting Production credentials, all API integrations must be completed and verified in the LookzUp Development (Dev) environment.

No. 20

Test Your Integration in Development Environment

The Dev environment provides a safe sandbox where you can build, test, and validate your integration without affecting live business or customer data. To access the Development environment, simply insert /dev into the API base URL.

https://privatelabel-services.lookzup.com/dev/v1/...

Example

https://privatelabel-services.lookzup.com/dev/v1/createBusinessCustomer

Authentication API Exception

The getAuthToken API is not environment-specific.

Continue using the same authentication endpoint for both Development and Production environments. No /dev prefix is required for the authentication API.

No. 21

Setting Up Your Test Business

To begin testing, you must first create a test business in the LookzUp Development portal.

https://dev.business.lookzup.com
  1. 01
    Sign in to your Development Business Dashboard.
  2. 02
    Open Business Details.
  3. 03
    Navigate to Business Setup.
  4. 04
    From the options menu, select Domain Mapping.
  5. 05
    Enter the required application and domain details.
  6. 06
    Submit the request to initiate the generation of your Access Key and Secret.
No. 22

Moving to Production

Once your integration has been successfully tested and validated in the Development environment, the LookzUp team will review your implementation.

After successful verification, you will receive your Production Access Key and Production Secret, allowing your application to securely communicate with the live LookzUp platform.

Replace the Development API URLs with the Production URLs by removing the /dev path from the endpoint.

Example

https://privatelabel-services.lookzup.com/v1/...

No application code changes should be necessary other than updating the API base URL and replacing the Development credentials with the Production credentials.

Best Practice: Keep Development and Production credentials separate. Never use Production credentials during testing and never expose your Access Key or Secret in client-side applications.

11

Security & Integration Best Practices

  1. 01
    Never expose credentials client-side. clientId/clientSecret and the exchanged access_token must only be used from your backend. Your front end should call your own backend, which in turn calls LookzUp.
  2. 02
    Store secrets in environment variables (.env or your secrets manager), never in source control.
  3. 03
    Re-use tokens within their validity window (expires_in) rather than requesting a new token on every call.
  4. 04
    Mirror your own auth system with LookzUp's. On every new signup in your platform, call createBusinessCustomer and persist the returned uuid against your local user record — nearly all customer-scoped endpoints require it.
  5. 05
    Persist all returned hash IDs (bookingHashId, invoice hash_id, membership hash_id, enquiry hash_id) in your own database so you can reference them in later calls without re-querying LookzUp.
  6. 06
    Parse embedded JSON strings carefully. Several fields (serviceList, customerInfo, entityInfo, invoiceDetails, services, timings, advance_payment_status, etc.) are returned as JSON-encoded strings rather than native objects — JSON.parse() them before use.
  7. 07
    Respect currency and tax fields per business. Since businesses can be configured with different currency/currency_symbol and tax regimes (cgst/sgst/igst/utgst), always render pricing using the values returned per-request rather than hardcoding a currency.
  8. 08
    Confirm status enums with LookzUp support. Several status fields (bookingStatus, enrollment_request_status, membership_status, payment_status) use integer codes whose full meaning isn't self-documenting from the sample payloads — get the authoritative list before building status-dependent UI logic.
12

Need Help?

If you require assistance obtaining your Development credentials, you can:

Our team will review your request and help provision your Development API credentials.