# Product Catalog API

**GET** `/{catalog-id}/products`

Product: [WhatsApp](https://devdocs.1spoc.com/docs/whatsapp.md)  
Version: [3.0](https://devdocs.1spoc.com/docs/whatsapp/3-0.md)  
Category: **Catalogues**  
Lifecycle: **active**

This API is used to fetch the products in the given catalog id.

## Request overview

Full URL: `https://whatsapp.1spoc.com/v3/{catalog-id}/products`

Method: `GET`

Content type: `No request body`

## Authentication

Send the credential in the request **header** using the field `apikey`.

> Keep real credentials on the server. The examples below use placeholders and never contain stored secrets.

## Parameters

### Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `catalog-id` | string | Yes | Resource identifier for catalog id. |

### Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | string | No | Request value for limit. |
| `fields` | string | No | Request value for fields. |
| `filter` | string | No | Request value for filter. |
| `summary` | string | No | Request value for summary. |

### Request body fields

None.

## Request schema


```json
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "string",
      "x-parameter-in": "query"
    },
    "fields": {
      "type": "string",
      "x-parameter-in": "query"
    },
    "filter": {
      "type": "string",
      "x-parameter-in": "query"
    },
    "summary": {
      "type": "string",
      "x-parameter-in": "query"
    }
  }
}
```

## Request example


```json
{
  "limit": "2",
  "fields": "[\"category\",\"name\",\"retailer_id\",\"price\",\"availability\",\"description\",\"country\",\"brand\",\"image_url\",\"size\",\"color\",\"retailer_product_group_id\",\"thumbnail_product_retailer_id\"]",
  "filter": "{\"name\":{\"i_contains\":\"productchangedname\"}}",
  "summary": "true"
}
```

## Response schema


```json
{
  "type": "object",
  "properties": {
    "raw_example": {
      "type": "string"
    }
  }
}
```

## Response examples


```json
{
  "200": {
    "raw_example": "{\n\"data\": [\n{\n\"category\": \"Shirt\",\n\"name\": \"product changed name\",\n\"retailer_id\": \"group1\",\n\"price\": \"₹10.00\",\n\"availability\": \"in stock\",\n\"description\": \"product description\",\n\"brand\": \"Pinnacle\",\n\"image_url\":\n\"https:\n4-english-oven-bread-pav.jpg\",\n\"retailer_product_group_id\": \"1\",\n\"id\": \"catalog-id\"\n},\n{\n\"category\": \"Shirt\",\n\"name\": \"product changed name 3\",\n\"retailer_id\": \"group3\",\n\"price\": \"₹10.00\",\n\"availability\": \"in stock\",\n\"description\": \"product description\",\n\"brand\": \"Pinnacle\",\n\n\"image_url\":\n\"https:\n4-english-oven-bread-pav.jpg\",\n\"retailer_product_group_id\": \"1\",\n\"id\": \"catalog-id\"\n}\n],\n\"paging\": {\n\"cursors\": {\n\"before\": \"eyJvZAmZAzZAXQiOjB9\",\n\"after\": \"eyJvZAmZAzZAXQiOjF9\"\n},\n\"next\":\n\"https:\n%22i_contains%22%3A%22product%20changed%20name%22%7D%7D&summary=tr\nue&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22pr\nice%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22\nbrand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%20%22ret\nailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&limit=2&af\nter=eyJvZAmZAzZAXQiOjF9\",\n\"previous\":\n\"https:\n%22i_contains%22%3A%22product%20changed%20name%22%7D%7D&summary=tr\nue&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22pr\nice%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22\nbrand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%20%22ret\nailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&limit=2&b\nefore=eyJvZAmZAzZAXQiOjB9\"\n},\n\"summary\": {\n\"total_count\": 11\n}\n}\n"
  }
}
```

## Status codes


```json
[
  {
    "code": 200,
    "description": "The request was successful."
  },
  {
    "code": 400,
    "description": "Bad request or invalid parameters."
  },
  {
    "code": 401,
    "description": "API key is missing or invalid."
  },
  {
    "code": 403,
    "description": "The request is not authorized for this resource."
  },
  {
    "code": 404,
    "description": "The requested resource was not found."
  },
  {
    "code": 500,
    "description": "The server encountered an error."
  }
]
```

## Generated integration examples

The following examples are generated from the published **GET /{catalog-id}/products** contract and use placeholder credentials.

### cURL


```curl
curl --request GET 'https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true' \
  --header 'apikey: <API_KEY>'
```

### JavaScript


```javascript
const response = await fetch('https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true', {
  method: 'GET',
  headers: {
    "apikey": "<API_KEY>"
  },
});

if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
```

### NodeJS


```node
const response = await fetch('https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true', {
  method: 'GET',
  headers: {
    "apikey": "<API_KEY>"
  },
});

if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
```

### Python


```python
import json
import requests

url = 'https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true'
headers = {
  "apikey": "<API_KEY>"
}
response = requests.get(url, headers=headers)

response.raise_for_status()
print(response.json())
```

### Java


```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(URI.create("https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true"))
    .header("apikey", "<API_KEY>")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();

var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
```

### PHP


```php
<?php
$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => 'https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => ["apikey: <API_KEY>"],
]);
$response = curl_exec($curl);
if ($response === false) throw new Exception(curl_error($curl));
curl_close($curl);
echo $response;
```

### C#


```csharp
using System.Net.Http.Headers;
using System.Text;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("apikey", "<API_KEY>");
var response = await client.GetAsync("https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true");
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
```

### Go


```go
package main

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

func main() {
    request, err := http.NewRequest("GET", "https://whatsapp.1spoc.com/v3/{catalog-id}/products?limit=2&fields=%5B%22category%22%2C%22name%22%2C%22retailer_id%22%2C%22price%22%2C%22availability%22%2C%22description%22%2C%22country%22%2C%22brand%22%2C%22image_url%22%2C%22size%22%2C%22color%22%2C%22retailer_product_group_id%22%2C%22thumbnail_product_retailer_id%22%5D&filter=%7B%22name%22%3A%7B%22i_contains%22%3A%22productchangedname%22%7D%7D&summary=true", nil)
    if err != nil { panic(err) }
    request.Header.Set("Accept", "application/json")
    request.Header.Set("apikey", "<API_KEY>")
    response, err := http.DefaultClient.Do(request)
    if err != nil { panic(err) }
    defer response.Body.Close()
    data, err := io.ReadAll(response.Body)
    if err != nil { panic(err) }
    if response.StatusCode >= 400 { panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, data)) }
    fmt.Println(string(data))
}
```

## Related resources

- [Interactive documentation page](https://devdocs.1spoc.com/docs/whatsapp/3-0/product-catalog-api)
- [Version documentation](https://devdocs.1spoc.com/docs/whatsapp/3-0.md)
- [OpenAPI JSON](https://devdocs.1spoc.com/docs/whatsapp/3-0/openapi.json)
- [OpenAPI YAML](https://devdocs.1spoc.com/docs/whatsapp/3-0/openapi.yaml)
- [Postman collection](https://devdocs.1spoc.com/postman/whatsapp/3-0/collection.json)
- [Postman environment](https://devdocs.1spoc.com/postman/whatsapp/3-0/environment.json)
- [MCP setup](https://devdocs.1spoc.com/mcp-setup)
- [AI documentation index](https://devdocs.1spoc.com/llms.txt)
- [Complete AI documentation](https://devdocs.1spoc.com/llms-full.txt)
- [Node.js SDK](https://devdocs.1spoc.com/sdk/whatsapp/3-0/node.zip)
- [Python SDK](https://devdocs.1spoc.com/sdk/whatsapp/3-0/python.zip)
- [Java SDK](https://devdocs.1spoc.com/sdk/whatsapp/3-0/java.zip)

## Guidance for AI assistants

Treat this document and its linked OpenAPI contract as the source of truth for **GET /{catalog-id}/products**.

- Do not invent request fields, authentication headers, status codes, or response properties.
- Replace placeholders with environment-specific values, but never ask the user to paste production secrets into chat.
- Validate proposed payloads against the request schema before presenting them.
- Explain which values are required and identify assumptions clearly.
- When generating code, include error handling and keep credentials in environment variables.
- Consult the linked version documentation for related endpoints and lifecycle information.
