Extensions
Die benötigten und erlaubten Attribute sind in folgendem Schema beschrieben. Für weitere Informationen zu den einzelnen Attributen siehe Aus welchen Informationen besteht eine Extension?
- Schema-Dokumentation
- Beispiel
- JSON Schema
- idstring (uuid)required
Globally eindeutig identifizierender Bezeichner der Extension
- contributorIdstring (uuid)required
Bezeichner des Contributors. Entspricht dem Identifier des Kunden/der Organisation im mStudio
- namestringrequired
Name der Extension
- subTitleobjectrequired
Ein paar Worte, um die Extension zu bewerben.
- destring (≤ 40 characters)required
- enstring (≤ 40 characters)
- descriptionstringrequired
Kurze Beschreibung der Extension. Sie soll die Extension knapp, prägnant erklären
- detailedDescriptionsobject
Ausführliche Beschreibungen der Extension in verschiedenen Sprachen
- deobjectrequired
Ausführliche Beschreibung der Extension auf Deutsch
- markdownstring (≥ 1 characters)required
Ein Beschreibungstext mit Markdown‑Formatierungen
- plainstring (≥ 1 characters)
Ein Beschreibungstext ohne Formatierungen
- enobject
Ausführliche Beschreibung der Extension auf Englisch
- markdownstring (≥ 1 characters)required
Ein Beschreibungstext mit Markdown‑Formatierungen
- plainstring (≥ 1 characters)
Ein Beschreibungstext ohne Formatierungen
- contextstring (one of: project, customer)required
Definiert, ob die Extension zu einem Projekt oder einer Organisation hinzugefügt werden kann
- scopesarray of stringrequired
Berechtigungen, die die Extension benötigt
- Array[
- *string
]
- webhookUrlsobjectrequired
- backendobjectrequired
- extensionAddedToContextobjectrequired
- urlstring (≥ 1 characters, uri)required
Die URL, die von mStudio aufgerufen wird, wenn die Extension zu einem Kontext hinzugefügt wird. Kann Platzhalter enthalten
- extensionInstanceUpdatedobjectrequired
- urlstring (≥ 1 characters, uri)required
Die URL, die von mStudio aufgerufen wird, wenn eine Extension‑Instanz aktualisiert wird. Kann Platzhalter enthalten
- extensionInstanceSecretRotatedobjectrequired
- urlstring (≥ 1 characters, uri)required
Die URL, die von mStudio aufgerufen wird, wenn das Secret einer Extension‑Instanz rotiert wird. Kann Platzhalter enthalten
- extensionInstanceRemovedFromContextobjectrequired
- urlstring (≥ 1 characters, uri)required
Die URL, die von mStudio aufgerufen wird, wenn eine Extension‑Instanz aus einem Kontext entfernt wird. Kann Platzhalter enthalten
- externalFrontendsarray of objectrequired
- Array[
- *object
- indexobject
- namestring
Der Name, den das Frontend in der Liste der Extension Frontends haben wird
- urlstring (uri)required
Die URL, zu der der Benutzer weitergeleitet wird, wenn er die Extension im mStudio öffnet. Kann Platzhalter enthalten
]
- assetsarray of objectrequired
- Array[
- *object
- idstring (uuid)required
Die Datei‑ID des Assets
- indexintegerrequired
Der Index des Assets. Muss nicht fortlaufend sein. Kann zur Reihenfolge der Assets benutzt werden.
- assetTypestring (one of: image, video)required
]
- disabledbooleanrequired
Gibt an, ob die Extension deaktiviert ist
- logoRefIdstring (uuid)required
Die Datei‑ID des Logos
- publishedbooleanrequired
Gibt an, ob diese Extension veröffentlicht wurde
- statisticsobjectrequired
- amountOfInstancesinteger
Anzahl der Instanzen dieser Extension. Genau für den Contributor. Öffentlich gerundet auf die nächstgrößere hundert.
- tagsarray of stringrequired
Tags, die die Extension beschreiben
- Array[
- *string
]
- supportobjectrequired
- emailstring (email)required
E‑Mail‑Adresse, die für Supportanfragen genutzt werden kann
- phonestring (phone)
Telefonnummer, die für Supportanfragen genutzt werden kann
- inheritedboolean
Gibt an, ob die angegebene Unterstützung von dem Contributor übernommen wurde
- verificationRequestedbooleanrequired
Gibt an, ob die Verifizierung der Extension angefordert wurde
- verifiedbooleanrequired
Gibt an, ob die Extension verifiziert wurde
- functionalbooleanrequired
Gibt an, ob die Extension funktionsfähig ist
- frontendFragmentsobjectrequired
- *object
Der Anker, an dem das Frontend‑Fragment eingebettet werden soll
- additionalPropertiesobject
- *string
- urlstring (uri)
- extensionStatisticsobjectrequired
- amountOfInstancesinteger
Anzahl der Instanzen dieser Extension. Genau für den Contributor. Öffentlich gerundet auf die nächstgrößere hundert.
- pricingarray of objectrequired
- Array[
- *object
- priceInCentsintegerrequired
Preis der Extension in Cent
- variantKeystringrequired
Identifikator des Preisvarianten‑Schlüssels
- namestring (≤ 80 characters)
Bezeichnung der Variante (nur in der UI sichtbar)
- descriptionstring (≤ 300 characters)
Beschreibung des Leistungsumfangs der Variante
- isBookingStoppedboolean
Gibt an, ob die Variante nicht mehr gebucht werden kann
]
- pricingDetailsobject
Die Detailansicht des Preisplans. Gibt an, ob ein Upgrade oder Downgrade zu verschiedenen Varianten möglich ist.
- isUpgradeAllowedbooleanrequired
Gibt an, ob ein Upgrade auf eine andere Variante erlaubt ist
- isDowngradeAllowedbooleanrequired
Gibt an, ob ein Downgrade auf eine andere Variante erlaubt ist
- requestedChangesobjectrequired
Ein Vorschlag für die Änderungen, die ein Contributor vorschlagen kann
- contextobject
- hiddenboolean
Gibt an, ob die Extension im mStudio sichtbar ist
- blockedboolean
Gibt an, ob die Extension zu einem Kontext hinzugefügt werden kann
- disabledboolean
Gibt an, ob Extension‑Instanzen für diese Extension existieren dürfen
- scopesarray of string
Berechtigungen, die die Extension benötigt
- Array[
- *string
]
- webhookUrlsobject
- backendobjectrequired
- extensionAddedToContextobjectrequired
- urlstring (uri)required
URL, die aufgerufen wird, wenn die Extension zu einem Extension Context hinzugefügt wird. Kann Platzhalter enthalten
- extensionInstanceUpdatedobjectrequired
- urlstring (uri)required
URL, die aufgerufen wird, wenn eine Extension Instance aktualisiert wird. Kann Platzhalter enthalten
- extensionInstanceSecretRotatedobjectrequired
- urlstring (uri)required
URL, die aufgerufen wird, wenn das Secret einer Extension Instance rotiert wird. Kann Platzhalter enthalten
- extensionInstanceRemovedFromContextobjectrequired
- urlstring (uri)required
URL, die aufgerufen wird, wenn die Extension aus einem Extension Context entfernt wird. Kann Platzhalter enthalten
id: f0f86186-0a5a-45b2-aa33-502777496347
contributorId: f0f86186-0a5a-45b2-aa33-502777496347
name: Beispiel Extension
subTitle:
de: Erweitere das mStudio
en: Extend the mStudio
description: Eine Beispiel‑Extension, die zeigt, welche Informationen benötigt
werden, um eine Extension einzureichen
detailedDescriptions:
de:
markdown: |-
# Ein Beispiel
Dies ist eine Beispiel Extension‑Beschreibung.
## Weitere Informationen
Hier könnten **weitere** Informationen stehen.
plain: Eine ausführliche Beispiel‑Extension‑Beschreibung. Diese enthält keine
Formatierungen.
en:
markdown: |-
# An example
This is an example Extension description.
## Further information
Here could be **further** information.
plain: A detailed example Extension description. This does not contain any
formatting.
context: project
scopes:
- project:read
webhookUrls:
backend:
extensionAddedToContext:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/added
extensionInstanceUpdated:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/updated
extensionInstanceSecretRotated:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/secret-rotated
extensionInstanceRemovedFromContext:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/removed
externalFrontends:
- index:
name: Beispiel
url: https://example.org/:extensionInstanceId
assets:
- id: 709049e1-f283-4ef8-a35b-1b2f672852b0
index: 1
assetType: image
disabled: true
logoRefId: 9b2af58a-2625-41eb-adc6-bb6f7be9b90a
published: true
statistics:
amountOfInstances: "42"
tags:
- mail
support:
email: email@mittwald.example
phone: +49 170 123456
inherited: true
verificationRequested: true
verified: true
functional: true
frontendFragments:
string:
additionalProperties:
string: string
url: URL des Frontend‑Fragments
extensionStatistics:
amountOfInstances: "42"
pricing:
- priceInCents: "5000"
variantKey: string
name: Standard
description: string
isBookingStopped: true
pricingDetails:
isUpgradeAllowed: true
isDowngradeAllowed: true
requestedChanges:
context:
hidden: true
blocked: true
disabled: true
scopes:
- project:read
webhookUrls:
backend:
extensionAddedToContext:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/added
extensionInstanceUpdated:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/updated
extensionInstanceSecretRotated:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/secret-rotated
extensionInstanceRemovedFromContext:
url: https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/removed
{
"type": "object",
"required": [
"id",
"name",
"contributorId",
"context",
"createdAt",
"description",
"scopes",
"assets",
"disabled",
"logoRefId",
"published",
"statistics",
"subTitle",
"support",
"tags",
"verificationRequested",
"verified",
"functional",
"webhookUrls",
"externalFrontends",
"frontendFragments",
"extensionStatistics",
"pricing",
"requestedChanges"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Globally eindeutig identifizierender Bezeichner der Extension"
},
"contributorId": {
"type": "string",
"format": "uuid",
"description": "Bezeichner des Contributors. Entspricht dem Identifier des Kunden/der Organisation im mStudio"
},
"name": {
"type": "string",
"description": "Name der Extension",
"example": "Beispiel Extension"
},
"subTitle": {
"type": "object",
"description": "Ein paar Worte, um die Extension zu bewerben.",
"required": [
"de"
],
"properties": {
"de": {
"type": "string",
"maxLength": 40,
"example": "Erweitere das mStudio"
},
"en": {
"type": "string",
"maxLength": 40,
"example": "Extend the mStudio"
}
}
},
"description": {
"type": "string",
"description": "Kurze Beschreibung der Extension. Sie soll die Extension knapp, prägnant erklären",
"example": "Eine Beispiel‑Extension, die zeigt, welche Informationen benötigt werden, um eine Extension einzureichen"
},
"detailedDescriptions": {
"type": "object",
"description": "Ausführliche Beschreibungen der Extension in verschiedenen Sprachen",
"required": [
"de"
],
"properties": {
"de": {
"type": "object",
"description": "Ausführliche Beschreibung der Extension auf Deutsch",
"required": [
"markdown"
],
"properties": {
"markdown": {
"type": "string",
"description": "Ein Beschreibungstext mit Markdown‑Formatierungen",
"minLength": 1,
"example": "# Ein Beispiel\nDies ist eine Beispiel Extension‑Beschreibung.\n## Weitere Informationen\nHier könnten **weitere** Informationen stehen."
},
"plain": {
"type": "string",
"description": "Ein Beschreibungstext ohne Formatierungen",
"minLength": 1,
"example": "Eine ausführliche Beispiel‑Extension‑Beschreibung. Diese enthält keine Formatierungen."
}
}
},
"en": {
"type": "object",
"description": "Ausführliche Beschreibung der Extension auf Englisch",
"required": [
"markdown"
],
"properties": {
"markdown": {
"type": "string",
"description": "Ein Beschreibungstext mit Markdown‑Formatierungen",
"minLength": 1,
"example": "# An example\nThis is an example Extension description.\n## Further information\nHere could be **further** information."
},
"plain": {
"type": "string",
"description": "Ein Beschreibungstext ohne Formatierungen",
"minLength": 1,
"example": "A detailed example Extension description. This does not contain any formatting."
}
}
}
}
},
"context": {
"type": "string",
"enum": [
"project",
"customer"
],
"description": "Definiert, ob die Extension zu einem Projekt oder einer Organisation hinzugefügt werden kann"
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"example": "project:read"
},
"description": "Berechtigungen, die die Extension benötigt"
},
"webhookUrls": {
"type": "object",
"required": [
"backend"
],
"properties": {
"backend": {
"type": "object",
"required": [
"extensionAddedToContext",
"extensionInstanceRemovedFromContext",
"extensionInstanceSecretRotated",
"extensionInstanceUpdated"
],
"properties": {
"extensionAddedToContext": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "Die URL, die von mStudio aufgerufen wird, wenn die Extension zu einem Kontext hinzugefügt wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/added"
}
}
},
"extensionInstanceUpdated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "Die URL, die von mStudio aufgerufen wird, wenn eine Extension‑Instanz aktualisiert wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/updated"
}
}
},
"extensionInstanceSecretRotated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "Die URL, die von mStudio aufgerufen wird, wenn das Secret einer Extension‑Instanz rotiert wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/secret-rotated"
}
}
},
"extensionInstanceRemovedFromContext": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "Die URL, die von mStudio aufgerufen wird, wenn eine Extension‑Instanz aus einem Kontext entfernt wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/removed"
}
}
}
}
}
}
},
"externalFrontends": {
"type": "array",
"items": {
"type": "object",
"properties": {
"index": {
"type": "object",
"required": [
"url"
],
"properties": {
"name": {
"type": "string",
"description": "Der Name, den das Frontend in der Liste der Extension Frontends haben wird",
"example": "Beispiel"
},
"url": {
"type": "string",
"format": "uri",
"description": "Die URL, zu der der Benutzer weitergeleitet wird, wenn er die Extension im mStudio öffnet. Kann Platzhalter enthalten",
"example": "https://example.org/:extensionInstanceId"
}
}
}
}
}
},
"assets": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"index",
"assetType"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Die Datei‑ID des Assets",
"example": "709049e1-f283-4ef8-a35b-1b2f672852b0"
},
"index": {
"type": "integer",
"description": "Der Index des Assets. Muss nicht fortlaufend sein. Kann zur Reihenfolge der Assets benutzt werden.",
"example": 1
},
"assetType": {
"type": "string",
"enum": [
"image",
"video"
],
"example": "image"
}
}
}
},
"disabled": {
"type": "boolean",
"description": "Gibt an, ob die Extension deaktiviert ist"
},
"logoRefId": {
"type": "string",
"format": "uuid",
"description": "Die Datei‑ID des Logos",
"example": "9b2af58a-2625-41eb-adc6-bb6f7be9b90a"
},
"published": {
"type": "boolean",
"description": "Gibt an, ob diese Extension veröffentlicht wurde"
},
"statistics": {
"type": "object",
"properties": {
"amountOfInstances": {
"type": "integer",
"example": "42",
"description": "Anzahl der Instanzen dieser Extension. Genau für den Contributor. Öffentlich gerundet auf die nächstgrößere hundert."
}
}
},
"tags": {
"type": "array",
"items": {
"type": "string",
"example": "mail"
},
"description": "Tags, die die Extension beschreiben"
},
"support": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "E‑Mail‑Adresse, die für Supportanfragen genutzt werden kann"
},
"phone": {
"type": "string",
"format": "phone",
"description": "Telefonnummer, die für Supportanfragen genutzt werden kann",
"example": "+49 170 123456"
},
"inherited": {
"type": "boolean",
"description": "Gibt an, ob die angegebene Unterstützung von dem Contributor übernommen wurde",
"example": false
}
}
},
"verificationRequested": {
"type": "boolean",
"description": "Gibt an, ob die Verifizierung der Extension angefordert wurde"
},
"verified": {
"type": "boolean",
"description": "Gibt an, ob die Extension verifiziert wurde"
},
"functional": {
"type": "boolean",
"description": "Gibt an, ob die Extension funktionsfähig ist"
},
"frontendFragments": {
"type": "object",
"additionalProperties": {
"description": "Der Anker, an dem das Frontend‑Fragment eingebettet werden soll",
"type": "object",
"properties": {
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"url": {
"type": "string",
"format": "uri",
"example": "URL des Frontend‑Fragments"
}
}
}
},
"extensionStatistics": {
"type": "object",
"properties": {
"amountOfInstances": {
"type": "integer",
"example": "42",
"description": "Anzahl der Instanzen dieser Extension. Genau für den Contributor. Öffentlich gerundet auf die nächstgrößere hundert."
}
}
},
"pricing": {
"type": "array",
"items": {
"type": "object",
"required": [
"priceInCents",
"variantKey"
],
"properties": {
"priceInCents": {
"type": "integer",
"example": "5000",
"description": "Preis der Extension in Cent",
"maximum": 1000000
},
"variantKey": {
"type": "string",
"description": "Identifikator des Preisvarianten‑Schlüssels"
},
"name": {
"type": "string",
"description": "Bezeichnung der Variante (nur in der UI sichtbar)",
"example": "Standard",
"maxLength": 80
},
"description": {
"type": "string",
"description": "Beschreibung des Leistungsumfangs der Variante",
"maxLength": 300
},
"isBookingStopped": {
"type": "boolean",
"description": "Gibt an, ob die Variante nicht mehr gebucht werden kann",
"example": false
}
}
}
},
"pricingDetails": {
"type": "object",
"description": "Die Detailansicht des Preisplans. Gibt an, ob ein Upgrade oder Downgrade zu verschiedenen Varianten möglich ist.",
"required": [
"isUpgradeAllowed",
"isDowngradeAllowed"
],
"properties": {
"isUpgradeAllowed": {
"type": "boolean",
"description": "Gibt an, ob ein Upgrade auf eine andere Variante erlaubt ist"
},
"isDowngradeAllowed": {
"type": "boolean",
"description": "Gibt an, ob ein Downgrade auf eine andere Variante erlaubt ist"
}
}
},
"requestedChanges": {
"type": "object",
"description": "Ein Vorschlag für die Änderungen, die ein Contributor vorschlagen kann",
"properties": {
"context": {
"type": "object",
"properties": {
"hidden": {
"type": "boolean",
"description": "Gibt an, ob die Extension im mStudio sichtbar ist"
},
"blocked": {
"type": "boolean",
"description": "Gibt an, ob die Extension zu einem Kontext hinzugefügt werden kann"
},
"disabled": {
"type": "boolean",
"description": "Gibt an, ob Extension‑Instanzen für diese Extension existieren dürfen"
}
}
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"example": "project:read"
},
"description": "Berechtigungen, die die Extension benötigt"
},
"webhookUrls": {
"type": "object",
"required": [
"backend"
],
"properties": {
"backend": {
"type": "object",
"required": [
"extensionAddedToContext",
"extensionInstanceRemovedFromContext",
"extensionInstanceSecretRotated",
"extensionInstanceUpdated"
],
"properties": {
"extensionAddedToContext": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL, die aufgerufen wird, wenn die Extension zu einem Extension Context hinzugefügt wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/added"
}
}
},
"extensionInstanceUpdated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL, die aufgerufen wird, wenn eine Extension Instance aktualisiert wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/updated"
}
}
},
"extensionInstanceSecretRotated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL, die aufgerufen wird, wenn das Secret einer Extension Instance rotiert wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/secret-rotated"
}
}
},
"extensionInstanceRemovedFromContext": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL, die aufgerufen wird, wenn die Extension aus einem Extension Context entfernt wird. Kann Platzhalter enthalten",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/removed"
}
}
}
}
}
}
}
}
}
}
}