> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.pricelabs.co/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.pricelabs.co/_mcp/server.

# Quick Start

Get up and running with the PriceLabs Customer API in under 5 minutes.

## 1. Generate your API key

#### [Generate API Key](https://app.pricelabs.co/account_settings?tab=api_details)

Open **Account Settings → API Details → Enable** to create your key.

Need the full walkthrough with screenshots, or want to grant access to team members? See [Enable the API](/customer-api/api-reference/enable-the-api).

## 2. Verify your API key

Call `GET /v1/listings_minimal` — it returns a lightweight catalog of your listings and their channel/OTA IDs, so it's fast even on large accounts and a good first request to confirm your key works. Enter your API key below and run it right from these docs.

### Request

GET [https://api.pricelabs.co/v1/listings_minimal](https://api.pricelabs.co/v1/listings_minimal)

**`Minimal listing directory with channel IDs`**

```curl Minimal listing directory with channel IDs
curl https://api.pricelabs.co/v1/listings_minimal \
     -H "X-API-Key: {{API_KEY}}"
```

**`Minimal listing directory with channel IDs`**

```python Minimal listing directory with channel IDs
import requests

url = "https://api.pricelabs.co/v1/listings_minimal"

headers = {"X-API-Key": "{{API_KEY}}"}

response = requests.get(url, headers=headers)

print(response.json())
```

**`Minimal listing directory with channel IDs`**

```javascript Minimal listing directory with channel IDs
const url = 'https://api.pricelabs.co/v1/listings_minimal';
const options = {method: 'GET', headers: {'X-API-Key': '{{API_KEY}}'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Minimal listing directory with channel IDs`**

```go Minimal listing directory with channel IDs
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.pricelabs.co/v1/listings_minimal"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-API-Key", "{{API_KEY}}")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Minimal listing directory with channel IDs`**

```ruby Minimal listing directory with channel IDs
require 'uri'
require 'net/http'

url = URI("https://api.pricelabs.co/v1/listings_minimal")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '{{API_KEY}}'

response = http.request(request)
puts response.read_body
```

**`Minimal listing directory with channel IDs`**

```java Minimal listing directory with channel IDs
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.pricelabs.co/v1/listings_minimal")
  .header("X-API-Key", "{{API_KEY}}")
  .asString();
```

**`Minimal listing directory with channel IDs`**

```php Minimal listing directory with channel IDs
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.pricelabs.co/v1/listings_minimal', [
  'headers' => [
    'X-API-Key' => '{{API_KEY}}',
  ],
]);

echo $response->getBody();
```

**`Minimal listing directory with channel IDs`**

```csharp Minimal listing directory with channel IDs
using RestSharp;

var client = new RestClient("https://api.pricelabs.co/v1/listings_minimal");
var request = new RestRequest(Method.GET);
request.AddHeader("X-API-Key", "{{API_KEY}}");
IRestResponse response = client.Execute(request);
```

**`Minimal listing directory with channel IDs`**

```swift Minimal listing directory with channel IDs
import Foundation

let headers = ["X-API-Key": "{{API_KEY}}"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.pricelabs.co/v1/listings_minimal")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A working key returns something like (sample data shown below):

```json
{
  "listings": [
    {
      "listing_id": "1234567",
      "pms_name": "hostaway",
      "listing_name": "Sunset Villa",
      "property_name": "Sunset Villa",
      "parent_key": 0,
      "group_id": null,
      "channel_listing_details": [
        { "channel_name": "airbnb", "channel_listing_id": "000000000000000001" },
        { "channel_name": "vrbo", "channel_listing_id": "00000001" }
      ]
    }
  ],
  "total_listings": 1
}
```

> **Getting a 403 instead?**
>
> A `403` with `API_KEY_INVALID` means the header is missing or the key is wrong. Double-check you're
> sending it as `X-API-Key` and that the API is enabled for your account (step 1).

## Next steps

* Browse the [API Reference](/customer-api/api-reference/customer-api/listings/all-listings) for all available endpoints
* Check [rate limits and timeouts](/customer-api/api-reference/enable-the-api#rate-limiting) before going to production
* Questions? Reach out to [support@pricelabs.co](mailto:support@pricelabs.co)