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
]
- 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
- 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
- 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
Gibt an, ob die Extension deaktiviert ist
Die Datei‑ID des Logos
Gibt an, ob diese Extension veröffentlicht wurde
- amountOfInstancesinteger
Anzahl der Instanzen dieser Extension. Genau für den Contributor. Öffentlich gerundet auf die nächstgrößere hundert.
Tags, die die Extension beschreiben
- Array[
- *string
- 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
Gibt an, ob die Verifizierung der Extension angefordert wurde
Gibt an, ob die Extension verifiziert wurde
Gibt an, ob die Extension funktionsfähig ist
- *object
Der Anker, an dem das Frontend‑Fragment eingebettet werden soll
- additionalPropertiesobject
- *string
- urlstring (uri)
- amountOfInstancesinteger
Anzahl der Instanzen dieser Extension. Genau für den Contributor. Öffentlich gerundet auf die nächstgrößere hundert.
- Array[
- *object
- priceInCentsintegerrequired
Preis der Extension in Cent
- variantKeystringrequired
Identifikator des Preisvarianten‑Schlüssels
- namestring
Bezeichnung der Variante (nur in der UI sichtbar)
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
]
- 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
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"
},
"variantKey": {
"type": "string",
"description": "Identifikator des Preisvarianten‑Schlüssels"
},
"name": {
"type": "string",
"description": "Bezeichnung der Variante (nur in der UI sichtbar)",
"example": "Standard"
}
}
}
},
"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"
}
}
}
}
}
}
}
}
}
}
}