StudioTraining / StudioTrainingMuscleGroup
Returns a list of StudioTrainingMuscleGroup objects
GET/api/crm/studio_training/muscle_group
Query parameters
idstring | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
namestring | |
bodyMarkerKeystring | Short identifier used by clients to map the group to a body diagram area |
isFrontstring | True if the muscle group is shown on the front side of the body diagram |
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 StudioTrainingMuscleGroup objectsarray<StudioTrainingMuscleGroup>
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.
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.
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.
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/studio_training/muscle_group \
--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/muscle_group', 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/muscle_group"
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/muscle_group', [
'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/muscle_group"),
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/muscle_group")
.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/muscle_group"
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_muscle_group_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 StudioTrainingMuscleGroupController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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"
},
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}
]Create a single StudioTrainingMuscleGroup
POST/api/crm/studio_training/muscle_group
Request body application/json
dataStudioTrainingMuscleGroupShow 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.
Responses
200Create a single StudioTrainingMuscleGroupStudioTrainingMuscleGroup
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.
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.
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.
curl --request POST \
--url https://your-instance.iw-erp.de/api/crm/studio_training/muscle_group \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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',
body_marker_key: 'string',
is_front: true,
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/muscle_group', 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/muscle_group"
payload = { "data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": True,
"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/muscle_group', [
'body' => '{"data":{"id":42,"name":"Beispiel","description":"Text","body_marker_key":"string","is_front":true,"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/muscle_group"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"body_marker_key\":\"string\",\"is_front\":true,\"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\",\"body_marker_key\":\"string\",\"is_front\":true,\"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/muscle_group")
.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/muscle_group"
payload := strings.NewReader("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"body_marker_key\":\"string\",\"is_front\":true,\"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_muscle_group_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/studio_training_muscle_group.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StudioTrainingMuscleGroupController.post(StudioTrainingMuscleGroup.fromJson({
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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",
"body_marker_key": "string",
"is_front": true,
"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"
},
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}Returns a single StudioTrainingMuscleGroup
GET/api/crm/studio_training/muscle_group/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Returns a single StudioTrainingMuscleGroupStudioTrainingMuscleGroup
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.
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.
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.
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/studio_training/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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_muscle_group_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 StudioTrainingMuscleGroupController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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"
},
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}Update a single StudioTrainingMuscleGroup
PUT/api/crm/studio_training/muscle_group/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataStudioTrainingMuscleGroupShow 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.
Responses
200Update a single StudioTrainingMuscleGroupStudioTrainingMuscleGroup
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.
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.
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.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/crm/studio_training/muscle_group/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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',
body_marker_key: 'string',
is_front: true,
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/muscle_group/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/muscle_group/42"
payload = { "data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": True,
"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/muscle_group/42', [
'body' => '{"data":{"id":42,"name":"Beispiel","description":"Text","body_marker_key":"string","is_front":true,"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/muscle_group/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"body_marker_key\":\"string\",\"is_front\":true,\"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\",\"body_marker_key\":\"string\",\"is_front\":true,\"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/muscle_group/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/muscle_group/42"
payload := strings.NewReader("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"body_marker_key\":\"string\",\"is_front\":true,\"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/muscle_group/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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",
"body_marker_key": "string",
"is_front": true,
"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"
},
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}Update a single StudioTrainingMuscleGroup
PATCH/api/crm/studio_training/muscle_group/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataStudioTrainingMuscleGroupShow 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.
Responses
200Update a single StudioTrainingMuscleGroupStudioTrainingMuscleGroup
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.
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.
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.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/crm/studio_training/muscle_group/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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',
body_marker_key: 'string',
is_front: true,
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/muscle_group/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/muscle_group/42"
payload = { "data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": True,
"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/muscle_group/42', [
'body' => '{"data":{"id":42,"name":"Beispiel","description":"Text","body_marker_key":"string","is_front":true,"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/muscle_group/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"body_marker_key\":\"string\",\"is_front\":true,\"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\",\"body_marker_key\":\"string\",\"is_front\":true,\"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/muscle_group/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/muscle_group/42"
payload := strings.NewReader("{\"data\":{\"id\":42,\"name\":\"Beispiel\",\"description\":\"Text\",\"body_marker_key\":\"string\",\"is_front\":true,\"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/muscle_group/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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",
"body_marker_key": "string",
"is_front": true,
"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"
},
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}Delete a single StudioTrainingMuscleGroup (soft delete)
DELETE/api/crm/studio_training/muscle_group/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Delete a single StudioTrainingMuscleGroupStudioTrainingMuscleGroup
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.
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.
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.
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/crm/studio_training/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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/muscle_group/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_muscle_group_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 StudioTrainingMuscleGroupController.delete('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"body_marker_key": "string",
"is_front": true,
"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"
},
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00",
"deleted": true,
"order": 1
}