curl -X PATCH "https://api.fitsociety.io/public/v1/finance/membership-products/{productId}" \
-H "Authorization: Bearer <access_token>" \
-H "Idempotency-Key: <stable_request_key>" \
-H "Content-Type: application/json" \
-d '{}'const options = {
method: 'PATCH',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://api.fitsociety.io/public/v1/finance/membership-products/{productId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.fitsociety.io/public/v1/finance/membership-products/{productId}"
payload = {}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"data": {
"product": {
"productId": "66f7b8b1e13c8d25f4d3d90a",
"productType": "string",
"name": {},
"defaultLanguage": "string",
"description": {},
"price": 1,
"currency": "EUR",
"vatPercentage": 1,
"visibility": "string",
"isArchived": true,
"storeType": "string",
"trial": true,
"period": "string",
"credits": 1,
"creditCalendar": "string",
"creditValidity": {
"value": 1,
"unit": "string"
},
"contractPeriod": {
"value": 1,
"unit": "string"
},
"autoRenew": true,
"cancellationNoticePeriod": "string",
"assignCredits": true,
"allowNegativeCredits": true,
"maxNegativeCredits": 1,
"creditPools": [
{
"key": "string",
"name": "Example name",
"credits": 1,
"scheduleInterval": 1,
"scheduleUnit": "string",
"mode": "string"
}
],
"daysUsable": 1,
"validityAfterPurchase": {
"value": 1,
"unit": "string"
},
"createdAt": "2026-07-14T10:00:00.000Z",
"updatedAt": "2026-07-14T10:00:00.000Z"
},
"links": {
"totalLinkedClients": 1,
"activeLinkedClients": 1
}
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
},
"idempotency": {
"replayed": false
}
}
}Update membership products
Requires finance_products:write. Partially updates public catalog fields only. Supplied name/description maps replace all translations for that field. Omitted fields are retained. The first update of a legacy product requires defaultLanguage. Changing the default requires that language in every retained non-empty map.
curl -X PATCH "https://api.fitsociety.io/public/v1/finance/membership-products/{productId}" \
-H "Authorization: Bearer <access_token>" \
-H "Idempotency-Key: <stable_request_key>" \
-H "Content-Type: application/json" \
-d '{}'const options = {
method: 'PATCH',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://api.fitsociety.io/public/v1/finance/membership-products/{productId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.fitsociety.io/public/v1/finance/membership-products/{productId}"
payload = {}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"data": {
"product": {
"productId": "66f7b8b1e13c8d25f4d3d90a",
"productType": "string",
"name": {},
"defaultLanguage": "string",
"description": {},
"price": 1,
"currency": "EUR",
"vatPercentage": 1,
"visibility": "string",
"isArchived": true,
"storeType": "string",
"trial": true,
"period": "string",
"credits": 1,
"creditCalendar": "string",
"creditValidity": {
"value": 1,
"unit": "string"
},
"contractPeriod": {
"value": 1,
"unit": "string"
},
"autoRenew": true,
"cancellationNoticePeriod": "string",
"assignCredits": true,
"allowNegativeCredits": true,
"maxNegativeCredits": 1,
"creditPools": [
{
"key": "string",
"name": "Example name",
"credits": 1,
"scheduleInterval": 1,
"scheduleUnit": "string",
"mode": "string"
}
],
"daysUsable": 1,
"validityAfterPurchase": {
"value": 1,
"unit": "string"
},
"createdAt": "2026-07-14T10:00:00.000Z",
"updatedAt": "2026-07-14T10:00:00.000Z"
},
"links": {
"totalLinkedClients": 1,
"activeLinkedClients": 1
}
},
"meta": {
"requestId": "4f849d7d-f4f1-45cc-b4b7-3984a3d17f83",
"rateLimit": {
"limit": 10,
"remaining": 9,
"resetSeconds": 1
},
"idempotency": {
"replayed": false
}
}
}Authorizations
Public API access token issued by /public/v1/oauth/token. Example: Authorization: Bearer fspt_.... Each resource request rechecks the token company's current provider access. Disabling access blocks existing tokens with 403 auth.provider_unavailable.
Headers
Required for Public API write requests. Reusing the same key with the same method, path, and body replays the stored successful response; reusing it with a different request returns 409 idempotency.conflict.
1 - 200"booking-create-20260714-001"
Path Parameters
"66f7b8b1e13c8d25f4d3d90a"
Body
Up to 25 languages per field. Valid BCP 47 keys are canonicalized; duplicate canonical keys and und are rejected. Every non-empty map must contain defaultLanguage. Required text cannot be empty. A supplied map replaces all languages for that field; {} clears an optional field. Null maps, null values and plain strings are rejected.
Show child attributes
Show child attributes
Up to 25 languages per field. Valid BCP 47 keys are canonicalized; duplicate canonical keys and und are rejected. Every non-empty map must contain defaultLanguage. Required text cannot be empty. A supplied map replaces all languages for that field; {} clears an optional field. Null maps, null values and plain strings are rejected.
Show child attributes
Show child attributes
Required on create and on the first public text update of an unlocalized resource. Omit on later PATCH requests to preserve it. Changing it requires the new language in all retained non-empty text maps. Declaring a legacy source language does not translate the source text.
80Price including VAT.
x >= 0EUR, USD, GBP 0 <= x <= 100Visible, VisibleInStore, VisibleInStoreAndApp, VisibleInApp, HideProduct Payment per month, Payment per week, Payment per 2 weeks, Payment per 4 weeks, Payment per 8 weeks, Payment per 2 months, Payment per 3 months, Payment per 6 months, Payment per year x >= 0, unlimited, per week, per 2 weeks, per 4 weeks, per month, custom Show child attributes
Show child attributes
x >= 0Days, Weeks, Months, Years No Notification, 1 Month, 2 Month, 3 Month x >= 0