/v2/membershipplanMitgliedschaftsplan aktualisieren
Aktualisiert die angegebenen Plandaten unter optimistischer Sperre (version aus letzter Antwort). Fehlende Werte bleiben erhalten; übergebene texts/scopes ersetzen ihren ganzen Bereich. Änderungen erhöhen version, bestehende Kaufsnapshots bleiben erhalten. Für veröffentlichte Pläne wird die Publikationsreife erneut geprüft. data.action kann alternativ publish, unpublish oder internal auslösen. Auf der Collection-Route ist id als oberstes Feld des JSON-Envelopes erforderlich; PUT übernimmt keine Querydaten.
Operation-ID put_v2_membershipplan
Vertrag & Verhalten
- Dokumentationsstand
- reviewed
- Ändert Zustand
- Ja
- Als readOnly markiert
- Nein
- Für Automation markiert
- Nein
Authentifizierung
Eine der folgenden Alternativen muss erfüllt sein (ODER). Innerhalb jeder Alternative werden alle angegebenen Schemas gemeinsam benötigt (UND).
Alternative 1
bearerAuthhttp · bearerExisting edoobox v2 access token. Never substitute API key/secret headers.
Format: JWT
Security-Schema als JSON
{
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT",
"description": "Existing edoobox v2 access token. Never substitute API key/secret headers."
}accountContextapiKeySelected login/account context from the JWT, not a database primary key. Required even for a JWT with one account.
header: edid
Security-Schema als JSON
{
"type": "apiKey",
"in": "header",
"name": "edid",
"description": "Selected login/account context from the JWT, not a database primary key. Required even for a JWT with one account."
}Alternative 2
sessionCookieapiKeyExisting browser login session, with the same permission checks as Bearer authentication.
cookie: _edlogin
Security-Schema als JSON
{
"type": "apiKey",
"in": "cookie",
"name": "_edlogin",
"description": "Existing browser login session, with the same permission checks as Bearer authentication."
}accountContextapiKeySelected login/account context from the JWT, not a database primary key. Required even for a JWT with one account.
header: edid
Security-Schema als JSON
{
"type": "apiKey",
"in": "header",
"name": "edid",
"description": "Selected login/account context from the JWT, not a database primary key. Required even for a JWT with one account."
}Parameter
Header
X-Edoobox-If-RevisionoptionalOptional account mutation revision from a preceding authenticated auth-context snapshot. The dispatcher compares it while holding the account lock; mismatch409 requires a new review.
- pattern
"^[a-f0-9]{32}$"
Schema-Beispiel
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"Vollständiges Schema als JSON
{
"type": "string",
"pattern": "^[a-f0-9]{32}$",
"examples": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
]
}Request Body
erforderlichapplication/json
data object erforderlich validity object type string Standardwert: "relative_duration"
"fixed_range""relative_duration""usage_count"from integer | number | string | null Unix-Sekunden oder strtotime-lesbarer Datumsstring; feste Gültigkeit benötigt from < until.
until integer | number | string | null value integer | number | string | boolean Positive Dauer für relative_duration; Standard 1.
unit string | null Standardwert: "year"
"day""month""year"nulluses integer | number | string | boolean Positive Anzahl für usage_count.
promo_code_redemption boolean | integer | string Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und "true"/"false".
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
discount object type string Standardwert: "percent"
"percent""fixed"value string | number Nichtnegativer Betrag, Punkt oder Komma; maximal vier Eingabenachkommastellen, auf zwei gerundet. Bei percent höchstens 100.
currency string Dreistelliger ISO-Code für fixed; bei percent verworfen.
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
sale object amount string | number Nichtnegativ, Punkt oder Komma, maximal vier Nachkommastellen, auf zwei gerundet; Standard 0.
currency string Dreistelliger Währungscode, auf Großbuchstaben normalisiert; Standard Kontowährung.
vat string | null Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID.
- pattern
"^vat_[a-f0-9]{12}_-?[0-9]+$"
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
publication object design string | null Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID.
- pattern
"^design_[a-f0-9]{12}_-?[0-9]+$"
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
renewal object allowed boolean | integer | string Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und "true"/"false".
default boolean | integer | string Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und "true"/"false".
reminder_days integer | number | string | boolean Wird auf 0–365 begrenzt, Standard 30.
duration_value integer | number | string | boolean Positive Verlängerungsdauer, insbesondere für fixed_range.
duration_unit string | null "day""month""year"nullZusätzliche, hier nicht aufgeführte Felder sind erlaubt.
texts object Sprachcode → Textobjekt. Codes werden klein geschrieben; Name der Kontostandardsprache ist erst für internal/published erforderlich.
Schema für zusätzliche Felder
name string - maxLength
150
description_html string Wird HTML-bereinigt.
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
scopes array | object Array-Elemente
type string erforderlich "root""category""offer"resource string | null v2 category-/offer-ID; bei root null.
id string Eingabealias für resource.
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
Schema für zusätzliche Felder
type string erforderlich "root""category""offer"resource string | null v2 category-/offer-ID; bei root null.
id string Eingabealias für resource.
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
allow_parallel_instances boolean | integer | string Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und "true"/"false".
sort_order integer | number | string | boolean Wird serverseitig nach Integer konvertiert; für neue Clients eine ganze Zahl senden.
internal_reference string Gekürzt auf 100 Zeichen.
request_id string Optionale Audit-Korrelation; für Pläne keine Idempotenzgarantie.
validity_type string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
Standardwert: "relative_duration"
"fixed_range""relative_duration""usage_count"fixed_valid_from integer | number | string | null Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
fixed_valid_until integer | number | string | null Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
duration_value integer | number | string | boolean Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
duration_unit string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
included_uses integer | number | string | boolean Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
promo_code_redemption_enabled boolean | integer | string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
discount_type string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
Standardwert: "percent"
"percent""fixed"discount_value string | number Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
discount_currency_iso string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
sale_price string | number Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
sale_currency_iso string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
vat string | null Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
- pattern
"^vat_[a-f0-9]{12}_-?[0-9]+$"
design string | null Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
- pattern
"^design_[a-f0-9]{12}_-?[0-9]+$"
auto_renew_allowed boolean | integer | string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
auto_renew_default boolean | integer | string Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
reminder_days integer | number | string | boolean Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
renewal_duration_value integer | number | string | boolean Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
renewal_duration_unit string | null Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang.
version integer | number | string | boolean erforderlich Wird serverseitig nach Integer konvertiert; für neue Clients eine ganze Zahl senden.
action string publish/unpublish/internal führen einen Statuswechsel aus; sonst normale Aktualisierung.
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
id string erforderlich Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID.
- pattern
"^membershipplan_[a-f0-9]{12}_-?[0-9]+$"
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
Vollständiges Schema als JSON
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"validity": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"fixed_range",
"relative_duration",
"usage_count"
],
"default": "relative_duration"
},
"from": {
"type": [
"integer",
"number",
"string",
"null"
],
"description": "Unix-Sekunden oder strtotime-lesbarer Datumsstring; feste Gültigkeit benötigt from < until."
},
"until": {
"type": [
"integer",
"number",
"string",
"null"
]
},
"value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Positive Dauer für relative_duration; Standard 1."
},
"unit": {
"type": [
"string",
"null"
],
"enum": [
"day",
"month",
"year",
null
],
"default": "year"
},
"uses": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Positive Anzahl für usage_count."
},
"promo_code_redemption": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
}
},
"additionalProperties": true
},
"discount": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"percent",
"fixed"
],
"default": "percent"
},
"value": {
"type": [
"string",
"number"
],
"description": "Nichtnegativer Betrag, Punkt oder Komma; maximal vier Eingabenachkommastellen, auf zwei gerundet. Bei percent höchstens 100."
},
"currency": {
"type": "string",
"description": "Dreistelliger ISO-Code für fixed; bei percent verworfen."
}
},
"additionalProperties": true
},
"sale": {
"type": "object",
"properties": {
"amount": {
"type": [
"string",
"number"
],
"description": "Nichtnegativ, Punkt oder Komma, maximal vier Nachkommastellen, auf zwei gerundet; Standard 0."
},
"currency": {
"type": "string",
"description": "Dreistelliger Währungscode, auf Großbuchstaben normalisiert; Standard Kontowährung."
},
"vat": {
"type": [
"string",
"null"
],
"pattern": "^vat_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"publication": {
"type": "object",
"properties": {
"design": {
"type": [
"string",
"null"
],
"pattern": "^design_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"renewal": {
"type": "object",
"properties": {
"allowed": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
},
"default": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
},
"reminder_days": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Wird auf 0–365 begrenzt, Standard 30."
},
"duration_value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Positive Verlängerungsdauer, insbesondere für fixed_range."
},
"duration_unit": {
"type": [
"string",
"null"
],
"enum": [
"day",
"month",
"year",
null
]
}
},
"additionalProperties": true
},
"texts": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 150
},
"description_html": {
"type": "string",
"description": "Wird HTML-bereinigt."
}
},
"additionalProperties": true
},
"description": "Sprachcode → Textobjekt. Codes werden klein geschrieben; Name der Kontostandardsprache ist erst für internal/published erforderlich."
},
"scopes": {
"type": [
"array",
"object"
],
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"root",
"category",
"offer"
]
},
"resource": {
"type": [
"string",
"null"
],
"description": "v2 category-/offer-ID; bei root null."
},
"id": {
"type": "string",
"description": "Eingabealias für resource."
}
},
"additionalProperties": true,
"required": [
"type"
]
},
"additionalProperties": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"root",
"category",
"offer"
]
},
"resource": {
"type": [
"string",
"null"
],
"description": "v2 category-/offer-ID; bei root null."
},
"id": {
"type": "string",
"description": "Eingabealias für resource."
}
},
"additionalProperties": true,
"required": [
"type"
]
}
},
"allow_parallel_instances": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
},
"sort_order": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Wird serverseitig nach Integer konvertiert; für neue Clients eine ganze Zahl senden."
},
"internal_reference": {
"type": "string",
"description": "Gekürzt auf 100 Zeichen."
},
"request_id": {
"type": "string",
"description": "Optionale Audit-Korrelation; für Pläne keine Idempotenzgarantie."
},
"validity_type": {
"type": "string",
"enum": [
"fixed_range",
"relative_duration",
"usage_count"
],
"default": "relative_duration",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"fixed_valid_from": {
"type": [
"integer",
"number",
"string",
"null"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"fixed_valid_until": {
"type": [
"integer",
"number",
"string",
"null"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"duration_value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"duration_unit": {
"type": "string",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"included_uses": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"promo_code_redemption_enabled": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"discount_type": {
"type": "string",
"enum": [
"percent",
"fixed"
],
"default": "percent",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"discount_value": {
"type": [
"string",
"number"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"discount_currency_iso": {
"type": "string",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"sale_price": {
"type": [
"string",
"number"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"sale_currency_iso": {
"type": "string",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"vat": {
"type": [
"string",
"null"
],
"pattern": "^vat_[a-f0-9]{12}_-?[0-9]+$",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"design": {
"type": [
"string",
"null"
],
"pattern": "^design_[a-f0-9]{12}_-?[0-9]+$",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"auto_renew_allowed": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"auto_renew_default": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"reminder_days": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"renewal_duration_value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"renewal_duration_unit": {
"type": [
"string",
"null"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"version": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Wird serverseitig nach Integer konvertiert; für neue Clients eine ganze Zahl senden."
},
"action": {
"type": "string",
"description": "publish/unpublish/internal führen einen Statuswechsel aus; sonst normale Aktualisierung."
}
},
"additionalProperties": true,
"required": [
"version"
]
},
"id": {
"type": "string",
"pattern": "^membershipplan_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true,
"required": [
"data",
"id"
]
}Mitgliedschaftsplan aktualisieren
{
"data": {
"version": 1,
"texts": {
"de": {
"name": "Jahresmitgliedschaft Plus"
}
}
},
"id": "membershipplan_012345abcdef_123456"
}Antworten
11HTTP-Status und Antwortinhalt gemeinsam auswerten. In dieser API können auch Antworten mit HTTP 200 einen Fehler enthalten.
200application/json
data enthält das dokumentierte Ergebnisobjekt; error=false und success=true.
Response Header
X-Edoobox-Revision
Rotated account revision supplied for the next action in one reviewed sequence.
- pattern
"^[a-f0-9]{32}$"
Vollständiges Schema als JSON
{
"type": "string",
"pattern": "^[a-f0-9]{32}$"
}application/json
success boolean error boolean | string error_code string data object id string erforderlich Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID.
- pattern
"^membershipplan_[a-f0-9]{12}_-?[0-9]+$"
version integer erforderlich status string erforderlich "draft""internal""published""archived"name string erforderlich description_html string erforderlich language string erforderlich validity object erforderlich type string "fixed_range""relative_duration""usage_count"from integer | null until integer | null value integer | null unit string | null uses integer | null promo_code_redemption boolean Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
discount object erforderlich type string "percent""fixed"value string Dezimalbetrag als String mit zwei Nachkommastellen.
- pattern
"^-?[0-9]+\\.[0-9]{2}$"
currency string | null Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
sale object erforderlich amount string Dezimalbetrag als String mit zwei Nachkommastellen.
- pattern
"^-?[0-9]+\\.[0-9]{2}$"
currency string vat string | null Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID.
- pattern
"^vat_[a-f0-9]{12}_-?[0-9]+$"
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
publication object erforderlich design string | null Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID.
- pattern
"^design_[a-f0-9]{12}_-?[0-9]+$"
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
renewal object erforderlich allowed boolean default boolean reminder_days integer duration_value integer | null duration_unit string | null Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
allow_parallel_instances boolean erforderlich active_customer_count integer erforderlich sort_order integer erforderlich internal_reference string erforderlich scopes array erforderlich Array-Elemente
type string erforderlich "root""category""offer"resource string | null v2 category-/offer-ID; bei root null.
id string Eingabealias für resource.
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
published_at integer | null erforderlich archived_at integer | null erforderlich created_at integer erforderlich updated_at integer erforderlich texts object | array erforderlich Sprachcode → Textobjekt; ohne Übersetzungen kann PHP [] liefern.
Array-Elemente
Schema für zusätzliche Felder
name string description_html string content_hash string Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
type string Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
Vollständiges Schema als JSON
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": [
"boolean",
"string"
]
},
"error_code": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^membershipplan_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
},
"version": {
"type": "integer"
},
"status": {
"type": "string",
"enum": [
"draft",
"internal",
"published",
"archived"
]
},
"name": {
"type": "string"
},
"description_html": {
"type": "string"
},
"language": {
"type": "string"
},
"validity": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"fixed_range",
"relative_duration",
"usage_count"
]
},
"from": {
"type": [
"integer",
"null"
]
},
"until": {
"type": [
"integer",
"null"
]
},
"value": {
"type": [
"integer",
"null"
]
},
"unit": {
"type": [
"string",
"null"
]
},
"uses": {
"type": [
"integer",
"null"
]
},
"promo_code_redemption": {
"type": "boolean"
}
},
"additionalProperties": true
},
"discount": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"percent",
"fixed"
]
},
"value": {
"type": "string",
"pattern": "^-?[0-9]+\\.[0-9]{2}$",
"description": "Dezimalbetrag als String mit zwei Nachkommastellen."
},
"currency": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
},
"sale": {
"type": "object",
"properties": {
"amount": {
"type": "string",
"pattern": "^-?[0-9]+\\.[0-9]{2}$",
"description": "Dezimalbetrag als String mit zwei Nachkommastellen."
},
"currency": {
"type": "string"
},
"vat": {
"type": [
"string",
"null"
],
"pattern": "^vat_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"publication": {
"type": "object",
"properties": {
"design": {
"type": [
"string",
"null"
],
"pattern": "^design_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"renewal": {
"type": "object",
"properties": {
"allowed": {
"type": "boolean"
},
"default": {
"type": "boolean"
},
"reminder_days": {
"type": "integer"
},
"duration_value": {
"type": [
"integer",
"null"
]
},
"duration_unit": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
},
"allow_parallel_instances": {
"type": "boolean"
},
"active_customer_count": {
"type": "integer"
},
"sort_order": {
"type": "integer"
},
"internal_reference": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"root",
"category",
"offer"
]
},
"resource": {
"type": [
"string",
"null"
],
"description": "v2 category-/offer-ID; bei root null."
},
"id": {
"type": "string",
"description": "Eingabealias für resource."
}
},
"additionalProperties": true,
"required": [
"type"
]
}
},
"published_at": {
"type": [
"integer",
"null"
]
},
"archived_at": {
"type": [
"integer",
"null"
]
},
"created_at": {
"type": "integer"
},
"updated_at": {
"type": "integer"
},
"texts": {
"type": [
"object",
"array"
],
"additionalProperties": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description_html": {
"type": "string"
},
"content_hash": {
"type": "string"
}
},
"additionalProperties": true
},
"items": {},
"description": "Sprachcode → Textobjekt; ohne Übersetzungen kann PHP [] liefern."
}
},
"additionalProperties": true,
"required": [
"id",
"version",
"status",
"name",
"description_html",
"language",
"validity",
"discount",
"sale",
"publication",
"renewal",
"allow_parallel_instances",
"active_customer_count",
"sort_order",
"internal_reference",
"scopes",
"published_at",
"archived_at",
"created_at",
"updated_at",
"texts"
]
},
"type": {
"type": "string"
}
},
"additionalProperties": true
}Beispiel
{
"success": true,
"error": false,
"data": {
"id": "membershipplan_012345abcdef_123456",
"version": 2,
"status": "draft",
"name": "Jahresmitgliedschaft",
"description_html": "<p>Vorteile für ein Jahr</p>",
"language": "de",
"validity": {
"type": "relative_duration",
"from": null,
"until": null,
"value": 1,
"unit": "year",
"uses": null,
"promo_code_redemption": false
},
"discount": {
"type": "percent",
"value": "10.00",
"currency": null
},
"sale": {
"amount": "120.00",
"currency": "CHF",
"vat": null
},
"publication": {
"design": null
},
"renewal": {
"allowed": false,
"default": false,
"reminder_days": 30,
"duration_value": null,
"duration_unit": null
},
"allow_parallel_instances": false,
"active_customer_count": 0,
"sort_order": 0,
"internal_reference": "Mitgliedschaft 2027",
"scopes": [
{
"type": "root",
"resource": null
}
],
"published_at": null,
"archived_at": null,
"created_at": 1790000000,
"updated_at": 1790000000,
"texts": {
"de": {
"name": "Jahresmitgliedschaft",
"description_html": "<p>Vorteile für ein Jahr</p>",
"content_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}
}
}400application/json
Invalid request.
application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED40006"
}401application/json
Missing/expired token, missing account context, account paused or model-specific authorization failure.
application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED40103"
}402application/json
Missing/invalid action data or subscription/operation restriction.
application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED80100"
}403application/json
Permission denied. Browser CORS rejection may have an empty body.
application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED40340"
}404application/json
Unknown resource/action or unsupported method.
application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED80019"
}409application/json
The account changed after the reviewed read. No domain operation is dispatched; obtain fresh state and review again.
application/json
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
Vollständiges Schema als JSON
{
"type": "object",
"additionalProperties": true
}Beispiel
{
"error": "ED40901",
"error_code": "mutation_revision_conflict"
}422application/json
Validation failed.
application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED80020"
}429application/json
Request/login rate limit exceeded. Honor Retry-After when supplied; legacy rate-limit paths may omit it. Retry only proven reads within a bounded deadline; a mutation is never automatically replayed after an ambiguous response.
Response Header
Retry-After
Optional server delay in whole seconds or an HTTP date. Absence is not permission for an immediate retry.
Schema-Beispiel
"30"Vollständiges Schema als JSON
{
"type": "string",
"examples": [
"30"
]
}application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED42902"
}502application/json
Server-side operation failed.
application/json
Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.
Beispiel
{
"success": false,
"error": "ED50201"
}503application/json
The account mutation lock or revision store is unavailable. No unprotected fallback is executed.
Response Header
Retry-After
Fester Wert: 1
Vollständiges Schema als JSON
{
"type": "integer",
"const": 1
}application/json
Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.
Vollständiges Schema als JSON
{
"type": "object",
"additionalProperties": true
}Beispiel
{
"error": "ED50301",
"error_code": "mutation_revision_busy"
}Quelle & Metadaten
application/models/v2/Membershipplan.php:74updateMembershipplan()Diese Angaben stammen unverändert aus der gelieferten OpenAPI-Datei. Zusätzliche Freigaben, Vorbedingungen, sensible Felder und Hinweise stehen in den Erweiterungen.
x-edoobox-mutates-state
truex-edoobox-runtimeMutationGuard
truex-edoobox-documentationReview
{
"file": "docs/openapi/operation-contracts/01-membership.json",
"notes": []
}x-edoobox-source
{
"file": "application/models/v2/Membershipplan.php",
"method": "updateMembershipplan",
"line": 74
}x-edoobox-documentationStatus
"reviewed"x-edoobox-readOnly
falsex-edoobox-safeForAutomation
falsex-edoobox-permission
{
"resource": "membershipplan",
"short": "mepl",
"checkedByDispatcher": true,
"levels": [
3,
4
],
"description": "Resource permission mapping from APIPermissions(), Authfunc::_getCheckJWT. Additional model/admin/plugin checks may apply; resources absent from api_permission do not acquire a fictitious scope."
}Vollständige Operation als JSON
{
"operationId": "put_v2_membershipplan",
"summary": "Mitgliedschaftsplan aktualisieren",
"description": "Aktualisiert die angegebenen Plandaten unter optimistischer Sperre (version aus letzter Antwort). Fehlende Werte bleiben erhalten; übergebene texts/scopes ersetzen ihren ganzen Bereich. Änderungen erhöhen version, bestehende Kaufsnapshots bleiben erhalten. Für veröffentlichte Pläne wird die Publikationsreife erneut geprüft. data.action kann alternativ publish, unpublish oder internal auslösen. Auf der Collection-Route ist id als oberstes Feld des JSON-Envelopes erforderlich; PUT übernimmt keine Querydaten.",
"tags": [
"membershipplan"
],
"security": [
{
"bearerAuth": [],
"accountContext": []
},
{
"sessionCookie": [],
"accountContext": []
}
],
"parameters": [
{
"name": "X-Edoobox-If-Revision",
"in": "header",
"required": false,
"schema": {
"type": "string",
"pattern": "^[a-f0-9]{32}$",
"examples": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
]
},
"description": "Optional account mutation revision from a preceding authenticated auth-context snapshot. The dispatcher compares it while holding the account lock; mismatch409 requires a new review."
}
],
"responses": {
"200": {
"description": "data enthält das dokumentierte Ergebnisobjekt; error=false und success=true.",
"content": {
"application/json": {
"example": {
"success": true,
"error": false,
"data": {
"id": "membershipplan_012345abcdef_123456",
"version": 2,
"status": "draft",
"name": "Jahresmitgliedschaft",
"description_html": "<p>Vorteile für ein Jahr</p>",
"language": "de",
"validity": {
"type": "relative_duration",
"from": null,
"until": null,
"value": 1,
"unit": "year",
"uses": null,
"promo_code_redemption": false
},
"discount": {
"type": "percent",
"value": "10.00",
"currency": null
},
"sale": {
"amount": "120.00",
"currency": "CHF",
"vat": null
},
"publication": {
"design": null
},
"renewal": {
"allowed": false,
"default": false,
"reminder_days": 30,
"duration_value": null,
"duration_unit": null
},
"allow_parallel_instances": false,
"active_customer_count": 0,
"sort_order": 0,
"internal_reference": "Mitgliedschaft 2027",
"scopes": [
{
"type": "root",
"resource": null
}
],
"published_at": null,
"archived_at": null,
"created_at": 1790000000,
"updated_at": 1790000000,
"texts": {
"de": {
"name": "Jahresmitgliedschaft",
"description_html": "<p>Vorteile für ein Jahr</p>",
"content_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}
}
},
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"error": {
"type": [
"boolean",
"string"
]
},
"error_code": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^membershipplan_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
},
"version": {
"type": "integer"
},
"status": {
"type": "string",
"enum": [
"draft",
"internal",
"published",
"archived"
]
},
"name": {
"type": "string"
},
"description_html": {
"type": "string"
},
"language": {
"type": "string"
},
"validity": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"fixed_range",
"relative_duration",
"usage_count"
]
},
"from": {
"type": [
"integer",
"null"
]
},
"until": {
"type": [
"integer",
"null"
]
},
"value": {
"type": [
"integer",
"null"
]
},
"unit": {
"type": [
"string",
"null"
]
},
"uses": {
"type": [
"integer",
"null"
]
},
"promo_code_redemption": {
"type": "boolean"
}
},
"additionalProperties": true
},
"discount": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"percent",
"fixed"
]
},
"value": {
"type": "string",
"pattern": "^-?[0-9]+\\.[0-9]{2}$",
"description": "Dezimalbetrag als String mit zwei Nachkommastellen."
},
"currency": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
},
"sale": {
"type": "object",
"properties": {
"amount": {
"type": "string",
"pattern": "^-?[0-9]+\\.[0-9]{2}$",
"description": "Dezimalbetrag als String mit zwei Nachkommastellen."
},
"currency": {
"type": "string"
},
"vat": {
"type": [
"string",
"null"
],
"pattern": "^vat_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"publication": {
"type": "object",
"properties": {
"design": {
"type": [
"string",
"null"
],
"pattern": "^design_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"renewal": {
"type": "object",
"properties": {
"allowed": {
"type": "boolean"
},
"default": {
"type": "boolean"
},
"reminder_days": {
"type": "integer"
},
"duration_value": {
"type": [
"integer",
"null"
]
},
"duration_unit": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
},
"allow_parallel_instances": {
"type": "boolean"
},
"active_customer_count": {
"type": "integer"
},
"sort_order": {
"type": "integer"
},
"internal_reference": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"root",
"category",
"offer"
]
},
"resource": {
"type": [
"string",
"null"
],
"description": "v2 category-/offer-ID; bei root null."
},
"id": {
"type": "string",
"description": "Eingabealias für resource."
}
},
"additionalProperties": true,
"required": [
"type"
]
}
},
"published_at": {
"type": [
"integer",
"null"
]
},
"archived_at": {
"type": [
"integer",
"null"
]
},
"created_at": {
"type": "integer"
},
"updated_at": {
"type": "integer"
},
"texts": {
"type": [
"object",
"array"
],
"additionalProperties": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description_html": {
"type": "string"
},
"content_hash": {
"type": "string"
}
},
"additionalProperties": true
},
"items": {},
"description": "Sprachcode → Textobjekt; ohne Übersetzungen kann PHP [] liefern."
}
},
"additionalProperties": true,
"required": [
"id",
"version",
"status",
"name",
"description_html",
"language",
"validity",
"discount",
"sale",
"publication",
"renewal",
"allow_parallel_instances",
"active_customer_count",
"sort_order",
"internal_reference",
"scopes",
"published_at",
"archived_at",
"created_at",
"updated_at",
"texts"
]
},
"type": {
"type": "string"
}
},
"additionalProperties": true
}
}
},
"headers": {
"X-Edoobox-Revision": {
"schema": {
"type": "string",
"pattern": "^[a-f0-9]{32}$"
},
"description": "Rotated account revision supplied for the next action in one reviewed sequence."
}
}
},
"400": {
"description": "Invalid request.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED40006"
}
}
}
},
"401": {
"description": "Missing/expired token, missing account context, account paused or model-specific authorization failure.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED40103"
}
}
}
},
"402": {
"description": "Missing/invalid action data or subscription/operation restriction.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED80100"
}
}
}
},
"403": {
"description": "Permission denied. Browser CORS rejection may have an empty body.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED40340"
}
}
}
},
"404": {
"description": "Unknown resource/action or unsupported method.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED80019"
}
}
}
},
"409": {
"description": "The account changed after the reviewed read. No domain operation is dispatched; obtain fresh state and review again.",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": true
},
"example": {
"error": "ED40901",
"error_code": "mutation_revision_conflict"
}
}
}
},
"422": {
"description": "Validation failed.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED80020"
}
}
}
},
"429": {
"description": "Request/login rate limit exceeded. Honor Retry-After when supplied; legacy rate-limit paths may omit it. Retry only proven reads within a bounded deadline; a mutation is never automatically replayed after an ambiguous response.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED42902"
}
}
},
"headers": {
"Retry-After": {
"description": "Optional server delay in whole seconds or an HTTP date. Absence is not permission for an immediate retry.",
"schema": {
"type": "string",
"examples": [
"30"
]
}
}
}
},
"502": {
"description": "Server-side operation failed.",
"content": {
"application/json": {
"example": {
"success": false,
"error": "ED50201"
}
}
}
},
"503": {
"description": "The account mutation lock or revision store is unavailable. No unprotected fallback is executed.",
"headers": {
"Retry-After": {
"schema": {
"type": "integer",
"const": 1
}
}
},
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": true
},
"example": {
"error": "ED50301",
"error_code": "mutation_revision_busy"
}
}
}
}
},
"x-edoobox-mutates-state": true,
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"validity": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"fixed_range",
"relative_duration",
"usage_count"
],
"default": "relative_duration"
},
"from": {
"type": [
"integer",
"number",
"string",
"null"
],
"description": "Unix-Sekunden oder strtotime-lesbarer Datumsstring; feste Gültigkeit benötigt from < until."
},
"until": {
"type": [
"integer",
"number",
"string",
"null"
]
},
"value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Positive Dauer für relative_duration; Standard 1."
},
"unit": {
"type": [
"string",
"null"
],
"enum": [
"day",
"month",
"year",
null
],
"default": "year"
},
"uses": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Positive Anzahl für usage_count."
},
"promo_code_redemption": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
}
},
"additionalProperties": true
},
"discount": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"percent",
"fixed"
],
"default": "percent"
},
"value": {
"type": [
"string",
"number"
],
"description": "Nichtnegativer Betrag, Punkt oder Komma; maximal vier Eingabenachkommastellen, auf zwei gerundet. Bei percent höchstens 100."
},
"currency": {
"type": "string",
"description": "Dreistelliger ISO-Code für fixed; bei percent verworfen."
}
},
"additionalProperties": true
},
"sale": {
"type": "object",
"properties": {
"amount": {
"type": [
"string",
"number"
],
"description": "Nichtnegativ, Punkt oder Komma, maximal vier Nachkommastellen, auf zwei gerundet; Standard 0."
},
"currency": {
"type": "string",
"description": "Dreistelliger Währungscode, auf Großbuchstaben normalisiert; Standard Kontowährung."
},
"vat": {
"type": [
"string",
"null"
],
"pattern": "^vat_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"publication": {
"type": "object",
"properties": {
"design": {
"type": [
"string",
"null"
],
"pattern": "^design_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true
},
"renewal": {
"type": "object",
"properties": {
"allowed": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
},
"default": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
},
"reminder_days": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Wird auf 0–365 begrenzt, Standard 30."
},
"duration_value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Positive Verlängerungsdauer, insbesondere für fixed_range."
},
"duration_unit": {
"type": [
"string",
"null"
],
"enum": [
"day",
"month",
"year",
null
]
}
},
"additionalProperties": true
},
"texts": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 150
},
"description_html": {
"type": "string",
"description": "Wird HTML-bereinigt."
}
},
"additionalProperties": true
},
"description": "Sprachcode → Textobjekt. Codes werden klein geschrieben; Name der Kontostandardsprache ist erst für internal/published erforderlich."
},
"scopes": {
"type": [
"array",
"object"
],
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"root",
"category",
"offer"
]
},
"resource": {
"type": [
"string",
"null"
],
"description": "v2 category-/offer-ID; bei root null."
},
"id": {
"type": "string",
"description": "Eingabealias für resource."
}
},
"additionalProperties": true,
"required": [
"type"
]
},
"additionalProperties": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"root",
"category",
"offer"
]
},
"resource": {
"type": [
"string",
"null"
],
"description": "v2 category-/offer-ID; bei root null."
},
"id": {
"type": "string",
"description": "Eingabealias für resource."
}
},
"additionalProperties": true,
"required": [
"type"
]
}
},
"allow_parallel_instances": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Normalisierung mit FILTER_VALIDATE_BOOL; z.B. true/false, 1/0 und \"true\"/\"false\"."
},
"sort_order": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Wird serverseitig nach Integer konvertiert; für neue Clients eine ganze Zahl senden."
},
"internal_reference": {
"type": "string",
"description": "Gekürzt auf 100 Zeichen."
},
"request_id": {
"type": "string",
"description": "Optionale Audit-Korrelation; für Pläne keine Idempotenzgarantie."
},
"validity_type": {
"type": "string",
"enum": [
"fixed_range",
"relative_duration",
"usage_count"
],
"default": "relative_duration",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"fixed_valid_from": {
"type": [
"integer",
"number",
"string",
"null"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"fixed_valid_until": {
"type": [
"integer",
"number",
"string",
"null"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"duration_value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"duration_unit": {
"type": "string",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"included_uses": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"promo_code_redemption_enabled": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"discount_type": {
"type": "string",
"enum": [
"percent",
"fixed"
],
"default": "percent",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"discount_value": {
"type": [
"string",
"number"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"discount_currency_iso": {
"type": "string",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"sale_price": {
"type": [
"string",
"number"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"sale_currency_iso": {
"type": "string",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"vat": {
"type": [
"string",
"null"
],
"pattern": "^vat_[a-f0-9]{12}_-?[0-9]+$",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"design": {
"type": [
"string",
"null"
],
"pattern": "^design_[a-f0-9]{12}_-?[0-9]+$",
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"auto_renew_allowed": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"auto_renew_default": {
"type": [
"boolean",
"integer",
"string"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"reminder_days": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"renewal_duration_value": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"renewal_duration_unit": {
"type": [
"string",
"null"
],
"description": "Flacher Eingabealias; die entsprechende verschachtelte Eigenschaft hat Vorrang."
},
"version": {
"type": [
"integer",
"number",
"string",
"boolean"
],
"description": "Wird serverseitig nach Integer konvertiert; für neue Clients eine ganze Zahl senden."
},
"action": {
"type": "string",
"description": "publish/unpublish/internal führen einen Statuswechsel aus; sonst normale Aktualisierung."
}
},
"additionalProperties": true,
"required": [
"version"
]
},
"id": {
"type": "string",
"pattern": "^membershipplan_[a-f0-9]{12}_-?[0-9]+$",
"description": "Öffentliche v2-ID aus diesem Konto; keine rohe Datenbank-ID."
}
},
"additionalProperties": true,
"required": [
"data",
"id"
]
},
"examples": {
"request": {
"summary": "Mitgliedschaftsplan aktualisieren",
"value": {
"data": {
"version": 1,
"texts": {
"de": {
"name": "Jahresmitgliedschaft Plus"
}
}
},
"id": "membershipplan_012345abcdef_123456"
}
}
}
}
}
},
"x-edoobox-runtimeMutationGuard": true,
"x-edoobox-documentationReview": {
"file": "docs/openapi/operation-contracts/01-membership.json",
"notes": []
},
"x-edoobox-source": {
"file": "application/models/v2/Membershipplan.php",
"method": "updateMembershipplan",
"line": 74
},
"x-edoobox-documentationStatus": "reviewed",
"x-edoobox-readOnly": false,
"x-edoobox-safeForAutomation": false,
"x-edoobox-permission": {
"resource": "membershipplan",
"short": "mepl",
"checkedByDispatcher": true,
"levels": [
3,
4
],
"description": "Resource permission mapping from APIPermissions(), Authfunc::_getCheckJWT. Additional model/admin/plugin checks may apply; resources absent from api_permission do not acquire a fictitious scope."
}
}