# Get a product

`GET https://api.coach-platform.com/api/public/products/{productId}`

Get a product by id.

- Resource: Products
- Authentication: API key in the `Authorization: Bearer cp_live_...` header
- HTML version: https://www.coach-platform.com/docs/api/reference/get-products-product-id
- OpenAPI spec: https://www.coach-platform.com/openapi.json

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `productId` | string | Yes |   |

## Responses

| Status | Description |
|---|---|
| `200` OK | Successful response |
| `400` Bad Request |  |
| `401` Unauthorized |  |
| `403` Forbidden |  |
| `404` Not Found |  |
| `409` Conflict |  |
| `429` Too Many Requests |  |
| `500` Internal Server Error |  |

### 200 OK

Content type: `application/json`

| Field | Type | Description |
|---|---|---|
| `data` | object |   |
| `data.id` | string |   |
| `data.coachId` | string |   |
| `data.name` | string |   |
| `data.description` | string |   |
| `data.price` | number |   |
| `data.currency` | string | Allowed values: `ILS`, `USD`, `EUR`, `GBP`. |
| `data.productType` | string | Allowed values: `SINGLE`, `PUNCH_CARD`, `MEMBERSHIP`. |
| `data.productCategory` | string |   |
| `data.credits` | number \| null |   |
| `data.isActive` | boolean |   |
| `data.hidePriceInApp` | boolean |   |
| `data.membershipDetails` | object \| null |   |
| `data.membershipDetails.duration` | object |   |
| `data.membershipDetails.duration.value` | number |   |
| `data.membershipDetails.duration.unit` | string | Allowed values: `DAY`, `WEEK`, `MONTH`, `YEAR`. |
| `data.membershipDetails.recurrence` | string | Allowed values: `DAILY`, `WEEKLY`, `MONTHLY`, `YEARLY`, `ONE_TIME`. |
| `data.membershipDetails.limitations` | object |   |
| `data.membershipDetails.limitations.isUnlimited` | boolean |   |
| `data.membershipDetails.limitations.periodicalUsage` | object |   |
| `data.membershipDetails.limitations.periodicalUsage.usagesPerPeriod` | number |   |
| `data.membershipDetails.limitations.periodicalUsage.periodType` | string |   |
| `data.membershipDetails.limitations.allowedHours` | object |   |
| `data.membershipDetails.limitations.allowedHours.from` | string |   |
| `data.membershipDetails.limitations.allowedHours.to` | string |   |
| `data.membershipDetails.limitations.allowedDays` | string[] |   |
| `data.createdAt` | string<date-time> |   |
| `data.updatedAt` | string<date-time> |   |

Example:

```json
{
  "data": {
    "id": "<string>",
    "coachId": "<string>",
    "name": "<string>",
    "description": "<string>",
    "price": 123,
    "currency": "ILS",
    "productType": "SINGLE",
    "productCategory": "<string>",
    "credits": 123,
    "isActive": true,
    "hidePriceInApp": true,
    "membershipDetails": {
      "duration": {
        "value": 123,
        "unit": "DAY"
      },
      "recurrence": "DAILY",
      "limitations": {
        "isUnlimited": true,
        "periodicalUsage": {
          "usagesPerPeriod": 123,
          "periodType": "<string>"
        },
        "allowedHours": {
          "from": "<string>",
          "to": "<string>"
        },
        "allowedDays": [
          "<string>"
        ]
      }
    },
    "createdAt": "<date-time>",
    "updatedAt": "<date-time>"
  }
}
```

### Error responses 400, 401, 403, 404, 409, 429, 500

Content type: `application/json`

| Field | Type | Description |
|---|---|---|
| `error` | object |   |
| `error.code` | string |   |
| `error.message` | string |   |
| `error.fix` | string \| null |   |
| `error.details` | object \| null |   |
| `error.retryAfterMs` | number \| null |   |

Example:

```json
{
  "error": {
    "code": "<string>",
    "message": "<string>",
    "fix": "<string>",
    "details": {},
    "retryAfterMs": 123
  }
}
```

## Examples

### cURL

```bash
curl --request GET \
  --url 'https://api.coach-platform.com/api/public/products/<productId>' \
  --header 'Authorization: Bearer cp_live_...'
```

### JavaScript (fetch)

```js
const response = await fetch('https://api.coach-platform.com/api/public/products/<productId>', {
  method: 'GET',
  headers: {
    Authorization: 'Bearer cp_live_...',
  },
});

const data = await response.json();
```

## Related endpoints

- [List products](https://www.coach-platform.com/docs/api/reference/get-products/index.md): `GET /api/public/products`. List the current key's coach products.
- Previous: [List products](https://www.coach-platform.com/docs/api/reference/get-products/index.md): `GET /api/public/products`. List the current key's coach products.
- Next: [List purchases](https://www.coach-platform.com/docs/api/reference/get-purchases/index.md): `GET /api/public/purchases`. List customer purchases.
