# query products

`GET https://api.suger.cloud/org/{orgId}/product/query`

Query products with filtering, sorting, and pagination using CRUD query language. Supports complex filters, sorting by multiple fields, and pagination.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `orgId` | path | string | yes | Organization ID |
| `page_size` | query | integer | no | Number of items per page (default 100, max 200) |
| `page_number` | query | integer | no | Page number (default 1) |
| `fields` | query | string | no | Comma-separated fields to return (e.g., 'id,name,status'). Dot notation supported. Ignored when forCreateOffer=true. |
| `q` | query | string | no | LISP-style filter expression (e.g., '(= partner \ |
| `s` | query | string | no | Sort fields: 'field:asc,field2:desc' or '-field,field2' format |
| `forCreateOffer` | query | boolean | no | When true, runs the per-org JS filter (FilterProductsForCreateOffer) on the page. fields= is ignored at the DB-SELECT level so the JS sandbox sees complete records. |
| `salesforceOpportunityId` | query | string | no | Forwarded to the JS sandbox as $salesforceOpportunityId. Only used when forCreateOffer=true. |
| `salesforceQuoteId` | query | string | no | Forwarded to the JS sandbox as $salesforceQuoteId. Only used when forCreateOffer=true. |
| `hubspotDealId` | query | string | no | Forwarded to the JS sandbox as $hubspotDealId. Only used when forCreateOffer=true. |
| `dynamics365OpportunityId` | query | string | no | Forwarded to the JS sandbox as $dynamics365OpportunityId (Dataverse opportunity GUID). Only used when forCreateOffer=true. |

## Responses

### 200 — OK

Content-Type: `application/json` · Schema: `crud.ListBaseResponse-orm_Product`

### 400 — Bad request error

Content-Type: `application/json`

### 500 — Internal server error

Content-Type: `application/json`

---

Interactive API reference: https://doc.suger.io/api/
