Zum Hauptinhalt springen

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?‍

  • idstring (uuid)required

    Global 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 Zeichen)required
    • enstring (≤ 40 Zeichen)
  • 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 Zeichen)required

        Ein Beschreibungstext mit Markdown‑Formatierungen

      • plainstring (≥ 1 Zeichen)

        Ein Beschreibungstext ohne Formatierungen

    • enobject

      Ausführliche Beschreibung der Extension auf Englisch

      • markdownstring (≥ 1 Zeichen)required

        Ein Beschreibungstext mit Markdown‑Formatierungen

      • plainstring (≥ 1 Zeichen)

        Ein Beschreibungstext ohne Formatierungen

  • contextstring (einer von: project, customer)required

    Definiert, ob die Extension zu einem Projekt oder einer Organisation hinzugefügt werden kann

  • scopesArray von stringrequired

    Berechtigungen, die die Extension benötigt

    • Array[
      • *string
      ]
  • webhookUrlsobject
    • backendobjectrequired
      • extensionAddedToContextobjectrequired
        • urlstring (≥ 1 Zeichen, uri)required

          Die URL, die von mStudio aufgerufen wird, wenn die Extension zu einem Kontext hinzugefügt wird. Kann Platzhalter enthalten

      • extensionInstanceUpdatedobjectrequired
        • urlstring (≥ 1 Zeichen, uri)required

          Die URL, die von mStudio aufgerufen wird, wenn eine Extension‑Instanz aktualisiert wird. Kann Platzhalter enthalten

      • extensionInstanceSecretRotatedobjectrequired
        • urlstring (≥ 1 Zeichen, uri)required

          Die URL, die von mStudio aufgerufen wird, wenn das Secret einer Extension‑Instanz rotiert wird. Kann Platzhalter enthalten

      • extensionInstanceRemovedFromContextobjectrequired
        • urlstring (≥ 1 Zeichen, uri)required

          Die URL, die von mStudio aufgerufen wird, wenn eine Extension‑Instanz aus einem Kontext entfernt wird. Kann Platzhalter enthalten

  • externalFrontendsArray von object
    • 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 von 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 (einer von: image, video)required
      ]
  • disabledboolean

    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 von 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

  • verificationRequestedboolean

    Gibt an, ob die Verifizierung der Extension angefordert wurde

  • verifiedboolean

    Gibt an, ob die Extension verifiziert wurde

  • functionalboolean

    Gibt an, ob die Extension funktionsfähig ist

  • frontendFragmentsobject
    • *object

      Der Anker, an dem das Frontend‑Fragment eingebettet werden soll

      • additionalPropertiesobject
        • *string
      • urlstring (uri)
  • extensionStatisticsobject
    • amountOfInstancesinteger

      Anzahl der Instanzen dieser Extension. Genau für den Contributor. Öffentlich gerundet auf die nächstgrößere hundert.

  • pricingArray von object
    • Array[
      • *object
        • priceInCentsintegerrequired

          Preis der Extension in Cent

        • variantKeystringrequired

          Identifikator des Preisvarianten‑Schlüssels

        • namestring (≤ 80 Zeichen)

          Bezeichnung der Variante (nur in der UI sichtbar)

        • descriptionstring (≤ 300 Zeichen)

          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

  • requestedChangesobject

    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 von 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",
"logoRefId",
"published",
"statistics",
"subTitle",
"support",
"tags"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Global 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"
}
}
}
}
}
}
}
}
}
}
}