RayProp Logo
    Get API access
    v1 · sandbox and live keys

    Nigerian shortlet supply, as an API.

    Search verified apartments, quote a stay with tax, hold real inventory, and confirm against a prefunded wallet. Hotel rooms sit behind the same key.

    Bookable shortlets in the API
    1,337
    Cities · neighbourhoods
    23 · 133
    Amounts
    Kobo, integer, NGN
    Auth
    x-api-key · sandbox + live
    Create a sandbox keyRead the endpoint reference →
    Recorded response · live catalogue200
    curl "https://api.rayprop.io/functions/v1/complete-api/listings\
    ?city=Lagos&bedrooms=2&limit=1" \
      -H "x-api-key: rp_sandbox_••••••••"
    {
      "success": true,
      "data": [
        {
          "id": "11F350DA",
          "unique_listing_id": "11F350DA",
          "title": "2 Bedroom Shortlet in Surulere",
          "city": "Lagos",
          "state": "Lagos",
          "neighborhood": "Surulere",
          "property_category": "shortlet",
          "bedrooms": 2,
          "bathrooms": 2,
          "max_guests": 4,
          "price_per_night": 9500000,
          "currency": "NGN",
          "minimum_stay": 1,
          "check_in_time": "14:00:00",
          "check_out_time": "12:00:00",
          "amenities": ["wifi", "backup_generator",
            "security_cameras", "housekeeping"],
          "listing_images": [{ "image_url": "…", "is_primary": true }]
        }
      ],
      "meta": { "page": 1, "limit": 1, "returned": 1, "hasMore": true }
    }

    price_per_night is the all-in RayProp price in kobo. Host identity, address and phone numbers are never in this payload.

    Booking runbook

    Five calls from search to confirmed stay.

    Every constraint below is enforced by the API, not by convention.

    1. 01
      GET /listings

      Find inventory

      Filter by city, neighbourhood, bedrooms and price. Flat allowance for every key: 20,000 requests/hour, 25,000 unique listings/day. Wildcards are stripped from text filters.

      GET /listings?city=Lagos&neighborhood=Lekki&bedrooms=2
    2. 02
      GET /availability

      Check the dates

      Availability merges host calendars and connected iCal feeds. Conflicting date ranges are rejected before a hold is ever created.

      GET /availability?listing_id=11F350DA
            &check_in=2026-10-02&check_out=2026-10-05
    3. 03
      POST /quotes

      Price it, including your markup

      One quote returns nights, subtotal, 7.5% VAT and the total your guest pays. Add developer_markup_per_night and it lands inside the same total. Quotes are valid for 30 minutes.

      {
        "quote_id": "…",
        "dates": { "check_in": "2026-10-02", "nights": 3 },
        "pricing": {
          "price_per_night": 10500000,
          "subtotal": 31500000,
          "vat_rate": "7.5%",
          "vat_amount": 2362500,
          "total_amount": 33862500,
          "currency": "NGN"
        },
        "valid_for_seconds": 1800
      }
    4. 04
      POST /holds

      Hold the real calendar

      A hold blocks the actual dates for 15 minutes on a live key. If it lapses, a 30-minute cooldown stops the same key from re-holding the same listing on repeat.

      { "hold_id": "…", "status": "active",
        "expires_at": "2026-10-01T09:15:00Z" }
    5. 05
      POST /reservations

      Confirm and settle

      Confirmation debits your prefunded wallet under a row-level lock, so the same hold can never be charged twice. Guest and host contact details are released only once payment is verified.

      reservation.created → reservation.booked
      → reservation.checked_in → reservation.completed

    Data contract

    What each field means, and what we deliberately withhold.

    1,337

    Active shortlets bookable through the API

    23

    Cities with live inventory

    133

    Distinct neighbourhoods

    Sept 2026

    Snapshot date for the figures on this page

    FieldRule
    id / unique_listing_idShort opaque code (e.g. 11F350DA). Internal UUIDs are never returned.
    city / state / neighborhoodSeparate fields. Neighbourhoods are never merged — Wuse and Maitama stay distinct.
    price_per_nightInteger kobo, all-in. Host cost and RayProp margin are not split out.
    currencyNGN for shortlets. Hotel offers carry their own currency field.
    address / latitude / longitudeWithheld from search. Released on the reservation once payment is verified.
    host name / phone / emailNever exposed to API consumers, at any stage.
    amenities, house_rulesStructured arrays. Empty when the host has not supplied them — never invented.
    check_in_time / check_out_timeLocal time, 24-hour. Defaults are 14:00 and 12:00.
    minimum_stay / advance_notice_hoursEnforced at quote and hold time, not just documented.

    Failure behaviour

    The unhappy paths, written down.

    Errors return a stable code, a message you can show a user, and no stack traces. Rate limits degrade softly: you get overage headers and a warning before anything is cut off.

    No key on the request401
    {
      "success": false,
      "error": {
        "code": "MISSING_AUTHENTICATION",
        "message": "Authentication required. Use x-api-key header or access via RapidAPI.",
        "suggestions": [
          "Include x-api-key header with your RayProp API key",
          "Obtain an API key from the RayProp developer portal"
        ]
      }
    }
    Dates that cannot be priced400
    {
      "success": false,
      "error": {
        "code": "VAL_004",
        "message": "check_in_date must be before check_out_date"
      }
    }
    Re-holding a listing you just released409
    {
      "success": false,
      "error": {
        "code": "HOLD_COOLDOWN",
        "message": "Cooldown active — you recently had a hold on this listing. Wait 30 minutes after expiry before re-holding."
      }
    }
    Past the daily unique-listing allowance200 with warning
    {
      "success": true,
      "data": [ /* listings you already accessed today */ ],
      "warnings": [{
        "code": "DAILY_LIMIT_APPROACHING",
        "message": "Daily unique listing access limit reached"
      }],
      "dataAccess": { "accessedToday": 25000, "dailyLimit": 25000 }
    }

    Already running on it

    Haap Living sells RayProp inventory under its own brand.

    The product on the right is live. Search, pricing, availability and booking all come from the same endpoints on this page — the same catalogue, a different brand and a different markup.

    BookAirPocket

    Shortlet supply added to an existing travel business.

    View storefront →

    Houzii

    Branded storefront, own pricing, RayProp fulfilment.

    View storefront →

    Endpoint surface

    /listings/availability/quotes/holds/reservations/payments/wallet/hotels/reviews/webhooks/usage/analytics
    Haap Living booking product showing verified Nigerian shortlets with nightly prices, powered by the RayProp API
    Live capture of haapliving.com. Inventory and prices are read straight from the API.

    Commercial terms

    Subscription for access, flat fee per night booked.

    No percentage commission on stay value. Wallet balances do not expire, and booking fees are already inside the price the API returns.

    Sandbox

    Free

    Test the API with sample data

    • 5,000 search requests/mo
    • Sandbox API keys
    • Full documentation access
    • Community support
    Start for free
    Most popular

    Starter

    ₦200,000/month

    For early-stage products

    • 50,000 search requests/mo
    • 200 bookings/mo
    • Production API keys
    • 20 req/sec rate limit
    • Email support
    Get started

    Growth

    ₦350,000+/month

    For scaling platforms

    • 200,000 search requests/mo
    • 900 bookings/mo
    • Priority support
    • 60 req/sec rate limit
    • Dedicated account manager
    Contact sales

    Enterprise

    Custom

    For large-scale deployments

    • Unlimited searches
    • Custom booking limits
    • SLA guarantee
    • Custom rate limits
    • On-call engineering support
    Contact sales

    Integrate in sandbox before you spend anything.

    Live keys unlock real holds and wallet debits. Everything else behaves the same in sandbox, including errors and webhooks.

    Create a sandbox keyTalk to the team →
    1. 01Sign up and a sandbox key is issued immediately.
    2. 02Call /listings against seeded sandbox inventory.
    3. 03Run quote → hold → reservation end to end without moving money.
    4. 04Fund a wallet, swap the key, go live.
    RayProp Logo

    Infrastructure for Africa's shortlet ecosystem.

    Products

    • Listings
    • Book with Ray (AI)
    • Become a Host
    • Agent Portal

    Developers

    • Developer API
    • Developer Portal
    • Documentation
    • Changelog
    • Status
    • Security

    Popular Locations

    • Shortlets in Lagos
    • Shortlets in Abuja
    • Shortlets in Port Harcourt
    • Lekki Phase 1
    • Ikoyi
    • Victoria Island
    • Maitama
    • Wuse

    Resources

    • Blog
    • Support
    • Hosts FAQ
    • Agents FAQ
    • Developers FAQ
    • Listings FAQ

    Company

    • About
    • Contact
    • Careers
    • Privacy

    Disclaimer

    RayProp lists only human-verified shortlets across Africa. Inventory, availability, and pricing are subject to host confirmation. RayProp is an infrastructure layer; we do not own the listings displayed.

    © 2026 RayProp. All rights reserved·Privacy·Terms·Cookies·Sitemap·Cookie Preferences