Get a product
GET/api/public/products/{productId}
Get a product by id.
Authentication
Requires an API key, sent as Authorization: Bearer cp_live_....
API keys carry scopes. Get the catalog of scopes and webhook events lists every scope.
Path parameters
| Name | Type | Description |
|---|---|---|
productIdrequired | string |
Request examples
curl --request GET \
--url 'https://api.coach-platform.com/api/public/products/<productId>' \
--header 'Authorization: Bearer cp_live_...'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();Responses
200 OK
Successful response
{
"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>"
}
}Response fields (28)
| Name | Type | Description |
|---|---|---|
data | object | |
data.id | string | |
data.coachId | string | |
data.name | string | |
data.description | string | |
data.price | number | |
data.currency | string | |
data.productType | string | |
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 | |
data.membershipDetails.recurrence | string | |
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> |
Error responses
400Bad Request401Unauthorized403Forbidden404Not Found409Conflict429Too Many Requests500Internal Server Error
These statuses share the same response body.
{
"error": {
"code": "<string>",
"message": "<string>",
"fix": "<string>",
"details": {},
"retryAfterMs": 123
}
}Error fields (6)
| Name | Type | Description |
|---|---|---|
error | object | |
error.code | string | |
error.message | string | |
error.fix | string | null | |
error.details | object | null | |
error.retryAfterMs | number | null |
More Products endpoints
This page is also available as Markdown. Browse it in the interactive explorer or download the OpenAPI spec.