Urban Company Partner icon

UC Partner data API: leads, invoices and credits

Urban Company · Business

Urban Company Partner (listed on Play as UC Partner) is the Android app Urban Company — the Delhi-founded home-services marketplace formerly called UrbanClap — gives independent professionals so they can take and finish customer jobs. Beauticians, salon and spa specialists, cleaners, pest-control technicians and appliance-repair partners sign in with a phone OTP, choose a live profile, then work from a home board of new and ongoing requests, a booking calendar for availability and leave, an invoice screen that splits service charge from parts, a job-history list of completed bookings, and a credit-wallet recharge flow that settles through Paytm, Razorpay or Juspay. The app is the supply-side counterpart of Urban Company's consumer booking app and is used by partners in India plus the UAE and Saudi Arabia, sitting in the same home-services aggregator slot as Housejoy and other local marketplace tools for independent technicians.

Lead-credit wallets expose currentCredits and is_paytm_active next to the job invoice that splits _serviceCharge from _materialCost. New-request cards add leadId, formattedBookingTime and a budgetModel with ucQuote, minBudget and leadValue; calendar days list totalJobs beside leave rows that hold leaveSlots.

Partner-ops dashboards can reconcile open jobs against invoice _total and job-history totalAmount / invoiceAmount rows. Lending stacks can size float from currentCredits and Paytm balance. KYC bots can pull grouped finance sections typed bank_account, pan and gst. openData Studio turns those partner objects into callable open data.

Screenshots

  • Urban Company Partner screenshot 1
  • Urban Company Partner screenshot 2
  • Urban Company Partner screenshot 3
  • Urban Company Partner screenshot 4
  • Urban Company Partner screenshot 5

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Generate partner OTP

    POST /v1/partner/otp osint

    Sends a one-time code to the partner phone for the selected country_id and isd_code; isMasterLogin flags a master-account login.

    Auth: Unauthenticated. Device headers x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • phone
    • signup
    • resend
    • country_id
    • isd_code
    • isMasterLogin
    POST /v1/partner/otp HTTP/1.1
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "phone": "9876543210",
      "signup": false,
      "resend": false,
      "country_id": "IN",
      "isd_code": "91"
    }
    {
      "isMasterLogin": false
    }
  • Verify partner OTP

    POST /v1/partner/session osint

    Confirms the OTP and returns the session token plus profiles[] with providerId, credits, newLeadCount and ongoingLeadCount used on the profile picker.

    Auth: Unauthenticated OTP exchange. Response token is stored as otpToken and later prefixed Bearer by the session store.

    • phone
    • otp
    • country_id
    • isd_code
    • device
    • name
    • android_id
    • gcm_id
    • application_type
    • resolution
    • token
    • create_allowed
    • is_test_login
    • newSignUpEnabled
    • leadId
    • title
    • profiles
    • providerId
    • category
    • address
    • isLive
    • credits
    • newLeadCount
    • ongoingLeadCount
    • countryId
    • isdCode
    • profilePhoto
    • status
    POST /v1/partner/session HTTP/1.1
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "phone": "9876543210",
      "otp": "123456",
      "country_id": "IN",
      "isd_code": "91",
      "device": {
        "name": "android",
        "android_id": "a1b2c3d4e5f6",
        "gcm_id": "fcm-token",
        "application_type": "android"
      },
      "resolution": "thumb"
    }
    {
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
      "create_allowed": true,
      "is_test_login": false,
      "newSignUpEnabled": false,
      "leadId": "pl_9f21",
      "title": "Select a profile",
      "profiles": [
        {
          "providerId": "pr_4412",
          "name": "R. Sharma",
          "category": "Salon at home",
          "address": "Andheri West, Mumbai",
          "isLive": true,
          "credits": 42,
          "newLeadCount": 3,
          "ongoingLeadCount": 1,
          "countryId": "IN",
          "isdCode": "91",
          "profilePhoto": {
            "url": "https://cdn.example/p.jpg"
          },
          "status": {
            "text": "Active"
          }
        }
      ]
    }
  • Discover new leads

    POST /v1/jobs/inbox opendata

    Pages the new-lead board: unviewed count, missed-lead cursor, header_data and lead_details cards the partner can buy.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type; x-minion-id when a helper is selected.

    • page_number
    • missed_leads_shown
    • minion_id
    • new_lead_not_viewed
    • header_data
    • no_more_leads
    • lead_details
    • leadId
    • name
    • location
    POST /v1/jobs/inbox HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "page_number": 0,
      "missed_leads_shown": 0,
      "minion_id": ""
    }
    {
      "new_lead_not_viewed": 2,
      "missed_leads_shown": 0,
      "no_more_leads": false,
      "header_data": {
        "title": "New leads"
      },
      "lead_details": [
        {
          "leadId": "ld_8821",
          "name": "A. Khan",
          "location": "Koramangala"
        }
      ]
    }
  • List ongoing leads

    POST /v1/jobs/active opendata

    Pages the ongoing-job list with filter/sort, count, insights and is_no_more_leads / is_load_more cursors.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type; x-minion-id when a helper is selected.

    • filter
    • sort
    • page_number
    • nocaching
    • ondemand
    • minion_id
    • timestamp
    • count
    • insights
    • is_no_more_leads
    • is_load_more
    POST /v1/jobs/active HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "filter": "all",
      "sort": [
        "booking_time"
      ],
      "page_number": 0,
      "nocaching": false,
      "ondemand": false,
      "minion_id": "",
      "timestamp": 0
    }
    {
      "count": 4,
      "page_number": 1,
      "timestamp": 1759420800,
      "is_no_more_leads": false,
      "is_load_more": true,
      "insights": {
        "label": "On time"
      }
    }
  • Get unified lead detail

    POST /v1/jobs/card opendata

    Opens one request_id into LeadMetaData (leadId, formattedBookingTime, location) and the budgetModel quote window the partner sees on the job card.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type; x-minion-id when a helper is selected.

    • request_id
    • minion_id
    • lead_meta_model
    • leadId
    • _id
    • name
    • leadOpen
    • location
    • formattedBookingTime
    • lostLead
    • leadDetailVersion
    • isLeadBuyingAllowed
    • isScanEnabled
    • cardNotOpenMessage
    • close
    • isBlockAbleLead
    • budgetModel
    • ucQuote
    • ucQuoteText
    • ucBudget
    • minBudget
    • maxBudget
    • budgetMessage
    • leadValue
    • orignalLeadValue
    • priceNegotiable
    • unit
    • discount
    • lead_card_template
    • another_job_not_allowed_msg
    • blocker_dialog_model
    POST /v1/jobs/card HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "request_id": "ld_8821",
      "minion_id": ""
    }
    {
      "lead_meta_model": {
        "leadId": "ld_8821",
        "_id": "req_8821",
        "name": "A. Khan",
        "leadOpen": true,
        "location": "Koramangala",
        "formattedBookingTime": "2 Oct, 11:00 AM",
        "lostLead": false,
        "leadDetailVersion": "V3",
        "isLeadBuyingAllowed": true,
        "isScanEnabled": false,
        "cardNotOpenMessage": "",
        "close": false,
        "isBlockAbleLead": false,
        "budgetModel": {
          "ucQuote": "1299",
          "ucQuoteText": "UC quote",
          "ucBudget": "1500",
          "minBudget": 999,
          "maxBudget": 1999,
          "budgetMessage": "Quote within range",
          "leadValue": 12,
          "orignalLeadValue": 12,
          "priceNegotiable": true,
          "unit": "job",
          "discount": "0"
        }
      },
      "lead_card_template": {},
      "another_job_not_allowed_msg": "",
      "blocker_dialog_model": {}
    }
  • Respond on a lead

    POST /v1/jobs/quote opendata

    Accepts or quotes on a request_id with budget_model.unit and refreshes the partner creditsInfo wallet after the buy.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • request_id
    • budget_model
    • unit
    • creditsInfo
    • credits
    POST /v1/jobs/quote HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "request_id": "ld_8821",
      "budget_model": {
        "unit": "job"
      }
    }
    {
      "creditsInfo": {
        "credits": 30
      }
    }
  • Fulfill lead payment

    POST /v1/jobs/collect openfinance

    Marks the job paid or frozen: state_key / state_option, GST flag and optional feedback, then returns lead_detail plus a reorder flag.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • request_id
    • is_freeze
    • state_key
    • state_option
    • is_gst_enabled
    • feedback
    • option_key
    • token
    • lead_detail
    • reorder
    POST /v1/jobs/collect HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "request_id": "ld_8821",
      "is_freeze": false,
      "state_key": "collect_payment",
      "state_option": "cash",
      "is_gst_enabled": true,
      "feedback": {
        "option_key": "job_done",
        "token": "fb_token"
      }
    }
    {
      "lead_detail": {
        "leadId": "ld_8821"
      },
      "reorder": false
    }
  • Booking calendar summary

    POST /v1/calendar/month opendata

    Loads the partner calendar for a yyyy/mm: per-day totalJobs and events, leaveSlots, legends and the bottom_link_text_stack.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • yyyy
    • mm
    • current_date
    • days
    • date
    • totalJobs
    • events
    • leaves
    • leaveSlots
    • legends
    • bottom_link_text_stack
    POST /v1/calendar/month HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "yyyy": 2026,
      "mm": 10
    }
    {
      "current_date": "2026-10-02",
      "days": [
        {
          "date": "2026-10-02",
          "totalJobs": 3,
          "events": [
            "salon"
          ]
        }
      ],
      "leaves": [
        {
          "date": "2026-10-05",
          "leaveSlots": [
            "AM"
          ]
        }
      ],
      "legends": [
        {
          "key": "job"
        }
      ],
      "bottom_link_text_stack": [
        {
          "text": "Manage leave"
        }
      ]
    }
  • Invoice summary for a job

    POST /v1/jobs/invoice openfinance

    Builds the on-job invoice for a requestId: service charge, material cost, cash advance, user-paid and the summary _total.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • requestId
    • planId
    • invoiceComponents
    • spareParts
    • invoiceType
    • bookingInvoice
    • invoiceSections
    • invoiceDetail
    • _serviceCharge
    • _materialCost
    • _cashAdvance
    • _userPaid
    • summary
    • _total
    • items
    • noWorkDoneMsg
    • visitationChargeModel
    • errorMsg
    POST /v1/jobs/invoice HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "requestId": "ld_8821",
      "planId": "plan_basic",
      "invoiceComponents": [],
      "spareParts": []
    }
    {
      "data": {
        "invoiceType": "standard",
        "bookingInvoice": {},
        "invoiceComponents": [],
        "invoiceSections": [],
        "invoiceDetail": {
          "_serviceCharge": 899,
          "_materialCost": 250,
          "_cashAdvance": 0,
          "_userPaid": 1149
        },
        "summary": {
          "_total": 1149,
          "items": [],
          "noWorkDoneMsg": ""
        },
        "visitationChargeModel": {},
        "errorMsg": ""
      }
    }
  • Job payment history

    GET /v1/earnings/jobs/{page} openfinance

    Pages completed-job payment rows: customerName, location, totalAmount, invoiceAmount and onlineReceived grouped by year.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • jobHistories
    • requestId
    • customerName
    • location
    • totalAmount
    • bookingTime
    • status
    • type
    • invoiceAmount
    • onlineReceived
    • date
    • year
    GET /v1/earnings/jobs/0 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    {
      "jobHistories": [
        {
          "requestId": "ld_7701",
          "customerName": "S. Patel",
          "location": "Bandra",
          "totalAmount": "1499",
          "bookingTime": 1759334400,
          "status": "completed",
          "type": "salon",
          "invoiceAmount": "1499",
          "onlineReceived": "1499",
          "date": "01 Oct 2026",
          "year": "2026"
        }
      ]
    }
  • Grouped finance details

    POST /v1/payout/kyc openfinance

    Reads KYC finance sections typed bank_account, pan or gst, plus gateway_service_name for the payout rail.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • sectionType
    • bank_account
    • pan
    • gst
    • gateway_service_name
    • sections
    • key
    • title
    • filled_status
    POST /v1/payout/kyc HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "sectionType": [
        "bank_account",
        "pan",
        "gst"
      ]
    }
    {
      "gateway_service_name": "razorpay",
      "sections": [
        {
          "key": "bank_account",
          "title": "Bank account",
          "filled_status": "filled"
        },
        {
          "key": "pan",
          "title": "PAN",
          "filled_status": "filled"
        },
        {
          "key": "gst",
          "title": "GSTIN",
          "filled_status": "pending"
        }
      ]
    }
  • Paytm wallet balance

    GET /v1/partner/wallet openbanking

    Checks whether the partner Paytm wallet is linked (is_paytm_active) and returns the current balance.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • is_paytm_active
    • balance
    GET /v1/partner/wallet HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    {
      "is_paytm_active": true,
      "balance": 1280.5
    }
  • Lead-credit recharge packages

    GET /v1/wallet/packs openfinance

    Loads the credit-wallet recharge screen: currentCredits, unitPrice, gateway and packages with credits / freeCredits.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • currency
    • currentBalanceText
    • currentCredits
    • customAmountEnabled
    • unitPrice
    • gateway
    • gatewayId
    • gatewayKey
    • rechargeMessage
    • packages
    • credits
    • freeCredits
    • couponCode
    • type
    • descriptionText
    GET /v1/wallet/packs HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    {
      "data": {
        "currency": "INR",
        "currentBalanceText": "42 credits",
        "currentCredits": 42,
        "customAmountEnabled": true,
        "unitPrice": 12.0,
        "gateway": "paytm",
        "gatewayId": 1,
        "gatewayKey": "paytm_pg",
        "rechargeMessage": "Credits expire in 365 days",
        "packages": [
          {
            "credits": "50",
            "freeCredits": "5",
            "couponCode": "",
            "type": "standard",
            "descriptionText": "50 + 5 free"
          }
        ]
      }
    }
  • Provider profile sections

    POST /v1/partner/profile osint

    Loads the partner public profile at thumb resolution: profile_sections, contact_details, business_categories and web_profile_link.

    Auth: Authorization: Bearer <token> from partner OTP verify, plus x-device-os, x-device-id, X-version-name, X-version-code, x-preferred-language, x-application-type.

    • resolution
    • profile_sections
    • contact_details
    • business_categories
    • web_profile_link
    POST /v1/partner/profile HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    x-device-os: android
    x-device-id: a1b2c3d4e5f6
    X-version-name: 7.2.22
    X-version-code: 10857
    x-preferred-language: en
    Content-Type: application/json
    
    {
      "resolution": "thumb"
    }
    {
      "profile_sections": [
        {
          "key": "about",
          "title": "About",
          "filled_status": "filled"
        }
      ],
      "contact_details": {
        "phone": "9876543210"
      },
      "business_categories": [
        "salon"
      ],
      "web_profile_link": "https://cdn.example/p/pr_4412"
    }

Data categories

  • leads
  • bookings
  • invoices
  • earnings
  • wallet-credits
  • identity

Where teams use this data

  • Partner-ops job and invoice recon

    An ops dashboard joins ongoing lead cards (leadId, formattedBookingTime) with invoice _serviceCharge / _materialCost / _total and job-history totalAmount rows so a city manager can see which bookings are still open versus already collected.

  • Credit-wallet float underwriting

    A working-capital lender reads currentCredits plus is_paytm_active and Paytm balance to size a short float against the partner's lead-buy wallet instead of waiting on weekly settlements.

  • KYC onboarding for payouts

    A compliance bot pulls grouped finance sections typed bank_account, pan and gst, then matches gateway_service_name and filled_status before enabling payouts.

  • Marketplace capacity analytics

    A supply-planning job uses calendar totalJobs and leaveSlots with new_lead_not_viewed / ongoing count to forecast how many partners are free on a given day.

Frequently asked questions

What partner objects sit behind Urban Company Partner?

The surface covers new and ongoing leads (leadId, formattedBookingTime, budgetModel), booking-calendar days (totalJobs, leaveSlots), on-job invoices (_serviceCharge, _materialCost, _total), job-history payment rows (totalAmount, invoiceAmount), a lead-credit wallet (currentCredits) and a linked Paytm balance.

How does a partner authenticate?

A phone OTP is generated and verified; the verify call returns a token that later requests send as Authorization: Bearer, together with device and app-version headers. A helper profile may also send x-minion-id.

Which markets does this partner app serve?

The login country list used here covers India, the United Arab Emirates and Saudi Arabia — Urban Company's core home-services markets for independent professionals.

Is this a public Urban Company developer API?

No. These are first-party endpoints the partner app calls after login. They are documented here as a data surface, not as a supported public SDK.

Apps similar to Urban Company Partner

  • Justlife Partner — Justlife Partner is the crew-side Android app for Justlife, a home-services marketplace in the UAE and Saudi Arabia that books cleaning, salon, pest-control and AC jobs.
  • Housejoy — Housejoy is a Bengaluru-headquartered Indian company that markets home construction, renovation, painting, maintenance and at-home beauty and salon services under the Zalon name.
  • Sulekha — Sulekha is an Indian digital platform that matches consumers with verified local professionals across home categories such as cleaning, pest control, appliance repair and domestic help.
  • Justdial — Justdial is an Indian local-search company that lists businesses and services through its phone line, website and JD Android app, covering restaurants, doctors, hotels and other local providers.
  • TaskRabbit — TaskRabbit is an IKEA-owned marketplace that matches freelance Taskers with local jobs such as furniture assembly, moving, cleaning and handyman work in the United States, Canada, the UK and several EU countries.
  • Thumbtack for Professionals — Thumbtack for Professionals is the provider app of the US home-services marketplace Thumbtack, where local handymen, cleaners and other trades find and convert customer requests.
  • Helpling Partner — Helpling Partner is the provider app for Helpling, a Berlin-based platform for home cleaning and household services, used to accept cleaning job offers and manage bookings.
  • Handy — Handy is an Angi-owned marketplace for booking residential cleaning, installation and handyman visits in the United States, United Kingdom and Canada.

Topics

  • urban company partner api
  • uc partner leads
  • urbanclap provider
  • home services invoice
  • partner credit wallet
  • paytm partner balance
  • urban company ksa uae

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote