StudioTraining / StudioTrainingPreset
Returns a list of StudioTrainingPreset objects
GET/api/crm/studio_training/preset
Query parameters
idstring | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
namestring | |
durationstring | |
exerciseTypestring | Category of the exercise, e.g. strength, cardio, mobility, rehab |
equipmentstring | Required equipment as free text, e.g. barbell, cable machine, bodyweight |
contentSourcestring | One of the CONTENT_SOURCE_* constants |
reviewStatusstring | One of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published |
importOriginIdstring | |
updatedstring | |
searchStringstring | text to search for in the list |
orderFieldNamestring | name of the order field |
orderFieldSortstring | sorting modeAllowed: DESCASC |
pageinteger | page of the list |
pageSizeinteger | number of entries for each page |
withMaxPageNumberstring | returns the number of pages available as a header if this is set |
Responses
200Returns a list of StudioTrainingPreset objectsarray<StudioTrainingPreset>
Show fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
videoAttachment10Video of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/studio_training/preset \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/crm/studio_training/preset', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/crm/studio_training/preset"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/crm/studio_training/preset', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/studio_training/preset"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/studio_training/preset")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/crm/studio_training/preset"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/studio_training_preset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StudioTrainingPresetController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"video": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"duration": 1,
"exercise_type": "string",
"equipment": "string"
}
]Create a single StudioTrainingPreset
POST/api/crm/studio_training/preset
Request body application/json
dataStudioTrainingPresetShow fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
videoAttachment10Video of the exercise.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200Create a single StudioTrainingPresetStudioTrainingPreset
Show fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
videoAttachment10Video of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request POST \
--url https://your-instance.iw-erp.de/api/crm/studio_training/preset \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
id: 42,
name: 'Beispiel',
description: 'Text',
content_source_name: 'Beispiel',
license_author_url: 'https://vynst.de',
image: {
id: 42,
ocr_from_name: 'Beispiel',
ocr_from_email: 'lena.hartmann@example.org',
ocr_from_phone: '+49 511 123456',
ocr_to_name: 'Beispiel',
ocr_to_email: 'lena.hartmann@example.org'
}
}
})
};
fetch('https://your-instance.iw-erp.de/api/crm/studio_training/preset', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/crm/studio_training/preset"
payload = { "data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/crm/studio_training/preset', [
'body' => '{"data":{"id":42,"name":"Beispiel","description":"Text","content_source_name":"Beispiel","license_author_url":"https://vynst.de","image":{"id":42,"ocr_from_name":"Beispiel","ocr_from_email":"lena.hartmann@example.org","ocr_from_phone":"+49 511 123456","ocr_to_name":"Beispiel","ocr_to_email":"lena.hartmann@example.org"}}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/studio_training/preset"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/studio_training/preset")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/crm/studio_training/preset"
payload := strings.NewReader("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/studio_training_preset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/studio_training_preset.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StudioTrainingPresetController.post(StudioTrainingPreset.fromJson({
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"video": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"duration": 1,
"muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
],
"secondary_muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
]
}Returns a single StudioTrainingPreset
GET/api/crm/studio_training/preset/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Returns a single StudioTrainingPresetStudioTrainingPreset
Show fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
videoAttachment10Video of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/studio_training/preset/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/studio_training_preset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StudioTrainingPresetController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"video": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"duration": 1,
"muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
],
"secondary_muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
]
}Update a single StudioTrainingPreset
PUT/api/crm/studio_training/preset/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataStudioTrainingPresetShow fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
videoAttachment10Video of the exercise.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200Update a single StudioTrainingPresetStudioTrainingPreset
Show fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
videoAttachment10Video of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request PUT \
--url https://your-instance.iw-erp.de/api/crm/studio_training/preset/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
id: 42,
name: 'Beispiel',
description: 'Text',
content_source_name: 'Beispiel',
license_author_url: 'https://vynst.de',
image: {
id: 42,
ocr_from_name: 'Beispiel',
ocr_from_email: 'lena.hartmann@example.org',
ocr_from_phone: '+49 511 123456',
ocr_to_name: 'Beispiel',
ocr_to_email: 'lena.hartmann@example.org'
}
}
})
};
fetch('https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
payload = { "data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', 'https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', [
'body' => '{"data":{"id":42,"name":"Beispiel","description":"Text","content_source_name":"Beispiel","license_author_url":"https://vynst.de","image":{"id":42,"ocr_from_name":"Beispiel","ocr_from_email":"lena.hartmann@example.org","ocr_from_phone":"+49 511 123456","ocr_to_name":"Beispiel","ocr_to_email":"lena.hartmann@example.org"}}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42")
.put(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
payload := strings.NewReader("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with package:http (no controller in the iw_erp_api package)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.put(
Uri.parse('https://your-instance.iw-erp.de/api/crm/studio_training/preset/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
}
}),
);
print(response.body);{
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"video": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"duration": 1,
"muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
],
"secondary_muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
]
}Update a single StudioTrainingPreset
PATCH/api/crm/studio_training/preset/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataStudioTrainingPresetShow fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
videoAttachment10Video of the exercise.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200Update a single StudioTrainingPresetStudioTrainingPreset
Show fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
videoAttachment10Video of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/crm/studio_training/preset/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
id: 42,
name: 'Beispiel',
description: 'Text',
content_source_name: 'Beispiel',
license_author_url: 'https://vynst.de',
image: {
id: 42,
ocr_from_name: 'Beispiel',
ocr_from_email: 'lena.hartmann@example.org',
ocr_from_phone: '+49 511 123456',
ocr_to_name: 'Beispiel',
ocr_to_email: 'lena.hartmann@example.org'
}
}
})
};
fetch('https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
payload = { "data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', [
'body' => '{"data":{"id":42,"name":"Beispiel","description":"Text","content_source_name":"Beispiel","license_author_url":"https://vynst.de","image":{"id":42,"ocr_from_name":"Beispiel","ocr_from_email":"lena.hartmann@example.org","ocr_from_phone":"+49 511 123456","ocr_to_name":"Beispiel","ocr_to_email":"lena.hartmann@example.org"}}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42")
.patch(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
payload := strings.NewReader("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"content_source_name\":\"Beispiel\",\"license_author_url\":\"https://vynst.de\",\"image\":{\"id\":42,\"ocr_from_name\":\"Beispiel\",\"ocr_from_email\":\"lena.hartmann@example.org\",\"ocr_from_phone\":\"+49 511 123456\",\"ocr_to_name\":\"Beispiel\",\"ocr_to_email\":\"lena.hartmann@example.org\"}}}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with package:http (no controller in the iw_erp_api package)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.patch(
Uri.parse('https://your-instance.iw-erp.de/api/crm/studio_training/preset/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org"
}
}
}),
);
print(response.body);{
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"video": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"duration": 1,
"muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
],
"secondary_muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
]
}Delete a single StudioTrainingPreset (soft delete)
DELETE/api/crm/studio_training/preset/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Delete a single StudioTrainingPresetStudioTrainingPreset
Show fields (25)
idintegerPrimary key of the training preset. Internal ID.
namestringName of the exercise.
descriptionstringDescription of the exercise.
imageAttachment10Image of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
videoAttachment10Video of the exercise.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
durationintegerTypical duration of the exercise in seconds.
muscle_groupsarray<StudioTrainingMuscleGroup>Primarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
secondary_muscle_groupsarray<StudioTrainingMuscleGroup>Secondarily trained muscle groups
Show fields (10)
idintegerPrimary key of the muscle group. Internal ID.
namestringName of the muscle group.
body_marker_keystringShort identifier used by clients to map the group to a body diagram area
descriptionstringDescription of the muscle group.
is_frontbooleanTrue if the muscle group is shown on the front side of the body diagram
imageAttachment10Image of the muscle group.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
orderintegerPosition of the entity in the order.
exercise_typestringCategory of the exercise, e.g. strength, cardio, mobility, rehab
equipmentstringRequired equipment as free text, e.g. barbell, cable machine, bodyweight
execution_notesstringExecution cues and safety notes for the member
default_setsintegerDefault prescription proposed when the preset is added to a plan
default_repetitionsintegerDefault number of repetitions.
default_rest_secondsintegerDefault rest time in seconds.
content_sourcestringOne of the CONTENT_SOURCE_* constants
content_source_namestringName of the catalogue the entry was seeded from, e.g. wger
licensestringLicence of the imported content, e.g. CC-BY-SA 4.0
license_authorstringAuthor that has to be named to fulfil the licence attribution
license_author_urlstringLink to the author of the image or video license.
review_statusstringOne of the REVIEW_STATUS_* constants, used to keep generated or imported exercise instructions under human control before they are published
reviewed_atstring (date-time)Time the exercise was reviewed.
reviewed_bystringName of the reviewer.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/crm/studio_training/preset/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'DELETE', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.delete(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://your-instance.iw-erp.de/api/crm/studio_training/preset/42', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Delete,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/studio_training/preset/42")
.delete(null)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/crm/studio_training/preset/42"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/studio_training_preset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StudioTrainingPresetController.delete('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"content_source_name": "Beispiel",
"license_author_url": "https://vynst.de",
"image": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"video": {
"id": 42,
"ocr_from_name": "Beispiel",
"ocr_from_email": "lena.hartmann@example.org",
"ocr_from_phone": "+49 511 123456",
"ocr_to_name": "Beispiel",
"ocr_to_email": "lena.hartmann@example.org",
"ocr_to_phone": "+49 511 123456",
"filename": "string",
"filesize": "string",
"mimetype": "string"
},
"duration": 1,
"muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
],
"secondary_muscle_groups": [
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
]
}