API REFERENCE

    Panama Real Estate Data, via API

    Access verified comp data, transaction histories, mortgage records, and neighborhood analytics directly from Panama's Registro Público via a clean, versioned REST API.

    Browse Endpoints

    14

    Endpoints

    3

    Resource Groups

    9,000+

    Verified Comps

    86

    Neighborhoods

    Base URLhttps://api.panacomps.com/api/v1v1 · HTTPS only
    QUICK START

    Up and running in minutes

    Three steps from receiving your key to querying live registry data.

    01

    Request an API key

    Contact us to request access. Keys are issued to verified partners and enterprise clients. We'll confirm your access tier and send credentials securely.

    02

    Authenticate every request

    Include your key as a Bearer token in the Authorization header, or pass it via the X-API-Key header. All requests must use HTTPS.

    03

    Query the data

    Use standard GET requests against any endpoint. Responses are JSON with a consistent envelope. Paginate large result sets with page and limit parameters.

    javascript
    const response = await fetch(
      'https://api.panacomps.com/api/v1/buildings',
      {
        headers: {
          'Authorization': 'Bearer pk_live_YOUR_API_KEY_HERE'
        }
      }
    );
    
    const { data } = await response.json();
    // data → array of building objects
    console.log(data[0].name);
    // → "P.H. BIJAO BEACH CLUB & RESIDENCES"
    AUTHENTICATION

    API Key Authentication

    Every request must include your API key. Two equivalent methods are supported.

    Option A — Bearer Token

    http
    GET /api/v1/buildings HTTP/1.1
    Host: api.panacomps.com
    Authorization: Bearer pk_live_YOUR_API_KEY_HERE

    Option B — X-API-Key Header

    http
    GET /api/v1/buildings HTTP/1.1
    Host: api.panacomps.com
    X-API-Key: pk_live_YOUR_API_KEY_HERE

    Rate Limits

    Requests are rate-limited per API key using a sliding one-minute window. Default limit is 100 requests per minute. Exceeded limits return HTTP 429 with code RATE_LIMIT_EXCEEDED.

    RateLimit-Limit

    Your key's limit per minute

    RateLimit-Remaining

    Requests left in current window

    RateLimit-Reset

    Unix timestamp when window resets

    ENDPOINTS

    14 Endpoints, 3 Resource Groups

    All endpoints are read-only GET requests. Path parameters are shown as :param.

    Buildings

    350+ tracked buildings — stats, properties, liens, and foreclosures

    GET/buildings
    List all buildings with summary statistics.
    GET/buildings/:building
    Get a single building with aggregate stats and property counts.
    GET/buildings/:building/properties
    Paginated list of properties in a building.
    pagelimitsortpriceMinpriceMaxsqmMinsqmMaxdateFromdateTo
    GET/buildings/:building/mortgages
    List active mortgages and liens recorded against units in this building.
    GET/buildings/:building/foreclosures
    List foreclosure actions recorded against units in this building.

    Properties

    Individual units — transactions, valuations, ownership, and legal documents

    GET/properties
    Search all properties across buildings.
    buildingfolioneighborhoodunitsortpriceMinpriceMaxsqmMinsqmMaxdateFromdateTopagelimit
    GET/properties/:folio
    Get a single property by its Registro Público folio number.
    GET/properties/:folio/history
    Full ownership and transaction history for a property.
    GET/properties/:folio/mortgages
    Mortgages and liens on this property, including full legal document text.
    GET/properties/:folio/foreclosures
    Foreclosure actions on this property, including full legal document text.
    GET/properties/:folio/documents
    All registered documents with OCR-extracted text from Registro Público.

    Neighborhoods

    86 neighborhoods — browse areas and find buildings by location

    GET/neighborhoods
    List all 86 neighborhoods with building and property counts.
    GET/neighborhoods/:id
    Get a single neighborhood by ID.
    GET/neighborhoods/:id/buildings
    List all buildings located in a neighborhood.
    REQUEST / RESPONSE

    Consistent JSON format

    All responses follow the same envelope structure, making it easy to handle lists, single objects, and errors uniformly.

    List response

    json
    {
      "data": [ ... ],
      "meta": {
        "page": 1,
        "limit": 20,
        "total": 684,
        "totalPages": 35
      }
    }

    Single object response

    json
    {
      "data": {
        "folio": "331717",
        "edificio": "P.H. ELEMENT",
        "unit": "INTERIOR DEPTO.-E",
        "owner": "DANIELLE FERRANDO",
        "saleDate": "2011-02-18",
        "saleAmount": 164492.54,
        "squareMeters": 113.25,
        "pricePerSqm": 1452.47
      }
    }

    Pagination parameters

    ParameterDefaultDescription
    page1Page number (1-indexed)
    limit20Items per page (max 100)

    Filter parameters — /properties and /buildings/:building/properties

    ParameterTypeDescription
    buildingstringFilter by building technical name
    foliostringExact folio number lookup
    neighborhoodintegerFilter by neighborhood ID
    unitstringFilter by unit identifier
    sortstringdate-desc · date-asc · price-desc · price-asc
    dateFrom / dateToISO dateFilter by sale date range (YYYY-MM-DD)
    priceMin / priceMaxnumberFilter by sale amount in USD
    sqmMin / sqmMaxnumberFilter by property size in square meters
    CODE EXAMPLES

    Works with any HTTP client

    Copy-ready examples for the most common languages. Replace pk_live_YOUR_API_KEY_HERE with your issued key.

    JavaScript (fetch)

    javascript
    const BASE = 'https://api.panacomps.com/api/v1';
    const KEY  = 'pk_live_YOUR_API_KEY_HERE';
    
    const headers = { 'Authorization': 'Bearer ' + KEY };
    
    // List properties in a building, sorted by recent sales
    const res = await fetch(
      BASE + '/buildings/BIJAO_BEACH_CLUB/properties' +
      '?sort=date-desc&limit=50',
      { headers }
    );
    const { data, meta } = await res.json();
    
    console.log('Showing ' + data.length + ' of ' + meta.total + ' properties');
    data.forEach(p => {
      console.log(p.unit, '
    #x27; + p.saleAmount, p.saleDate); });

    Python (requests)

    python
    import requests
    
    BASE = "https://api.panacomps.com/api/v1"
    KEY  = "pk_live_YOUR_API_KEY_HERE"
    
    headers = {"Authorization": f"Bearer {KEY}"}
    
    # Search properties with price and size filters
    params = {
        "building": "BIJAO_BEACH_CLUB",
        "sort": "price-desc",
        "priceMin": 200000,
        "sqmMin": 80,
        "limit": 25,
    }
    
    r = requests.get(f"{BASE}/properties", headers=headers, params=params)
    r.raise_for_status()
    
    result = r.json()
    print(f"Found {result['meta']['total']} matching properties")
    for prop in result["data"]:
        sqm = prop["squareMeters"]
        ppsqm = prop["pricePerSqm"]
        print(f"{prop['unit']}  {sqm}m2  ${ppsqm}/m2")
    ERROR HANDLING

    Predictable error responses

    All errors return a JSON body with a machine-readable code and a human-readable message.

    HTTPCodeMeaning
    401MISSING_API_KEYNo Authorization or X-API-Key header
    401INVALID_API_KEYKey not recognised
    403API_KEY_DISABLEDKey has been deactivated
    403BUILDING_ACCESS_DENIEDKey is not authorised for this building
    400INVALID_IDNon-numeric ID parameter
    404BUILDING_NOT_FOUNDBuilding identifier not found
    404PROPERTY_NOT_FOUNDFolio number not found
    404NEIGHBORHOOD_NOT_FOUNDNeighborhood ID not found
    404NOT_FOUNDEndpoint does not exist
    429RATE_LIMIT_EXCEEDEDToo many requests — slow down
    500INTERNAL_ERRORServer error — contact support

    Error response shape

    json
    // HTTP 401
    {
      "error": {
        "code": "INVALID_API_KEY",
        "message": "The provided API key was not recognised."
      }
    }
    
    // HTTP 429
    {
      "error": {
        "code": "RATE_LIMIT_EXCEEDED",
        "message": "Rate limit exceeded. Retry after the RateLimit-Reset time."
      }
    }
    API Access

    Ready to integrate?

    API access is available for verified partners and enterprise clients. Contact us for pricing, key issuance, and onboarding support.