Skip to main content

Extensions

The following schema describes the allowed and the required values. For more information about the individual attributes, see which information an Extension consists of‍.

  • idstring (uuid)
    required

    Globally unique identifier of the Extension

  • contributorIdstring (uuid)
    required

    Identifier of the contributor. Identical to the identifier of the customer/organization in the mStudio

  • namestring
    required

    Name of the Extension

  • subTitleobject
    required

    A few words to promote your Extension.

    • destring (≤ 40 characters)
      required
    • enstring (≤ 40 characters)
  • descriptionstring
    required

    Short description of the Extension. It should explain the Extension concisely.

  • detailedDescriptionsobject

    Detailed description of the Extension in different languages

    • deobject
      required

      Detailed description of the Extension in german

      • markdownstring (≥ 1 characters)
        required

        A markdown text description

      • plainstring (≥ 1 characters)

        A plain text description

    • enobject

      Detailed description of the Extension in english

      • markdownstring (≥ 1 characters)
        required

        A markdown text description

      • plainstring (≥ 1 characters)

        A plain text description

  • contextstring (one of: project, customer)
    required

    Defines, whether the Extension may be added to a project or an organization

  • scopesarray of string
    required

    Permissions, the Extension requires

    • Array[
      • *string
      ]
  • webhookUrlsobject
    • backendobject
      required
      • extensionAddedToContextobject
        required
        • urlstring (≥ 1 characters, uri)
          required

          The URL that the mStudio calls when the Extension is added to an Extension context. May contain placeholders

      • extensionInstanceUpdatedobject
        required
        • urlstring (≥ 1 characters, uri)
          required

          The URL that the mStudio calls when the Extension Instance is updated. May contain placeholders

      • extensionInstanceSecretRotatedobject
        required
        • urlstring (≥ 1 characters, uri)
          required

          The URL that the mStudio calls when the Extension Instance secret is rotated. May contain placeholders

      • extensionInstanceRemovedFromContextobject
        required
        • urlstring (≥ 1 characters, uri)
          required

          The URL that the mStudio calls when the Extension Instance is removed from a context. May contain placeholders

  • externalFrontendsarray of object
    • Array[
      • *object
        • indexobject
          • namestring

            The name the frontend will have in the list of Extension Frontends

          • urlstring (uri)
            required

            The URL that the user is directed to when they open the Extension in the mStudio. May contain placeholders

      ]
  • supportobject
    required
    • emailstring (email)
      required

      Email address that may be used for support requests

    • phonestring (phone)

      Phone number that may be used for support requests

    • inheritedboolean

      Weather the provided support information was inherited from the conrtributor

  • tagsarray of string
    required

    Tags that describe the Extension

    • Array[
      • *string
      ]
  • publishedboolean
    required

    Weather this Extension has been published

  • verificationRequestedboolean

    Weather verification of the Extension has been requested

  • verifiedboolean

    Weather the Extension has been verified

  • logoRefIdstring (uuid)
    required

    The fileId of the the Logo

  • functionalboolean

    weather the extension is functional

  • assetsarray of object
    required
    • Array[
      • *object
        • idstring (uuid)
          required

          The fileId of the asset

        • indexinteger
          required

          The index of the asset. Does not have to be successive. Can be used to order the assets.

        • assetTypestring (one of: image, video)
          required
      ]
  • secretsarray of object
    • Array[
      • *object
        • secretIdstring (uuid)
        • usableUntilstring (date-time)
      ]
  • frontendFragmentsobject

    This is a map of anchros to urls. The key of the map is the anchor of a frontend fragment.

    • *object

      The URL of the frontend fragment and additional properties for display in the mStudio.

      • additionalPropertiesobject
        • *string

          Some Information needed for the mStudio like the icon.

      • urlstring (uri)
  • extensionStatisticsobject
    • amountOfInstancesinteger

      The amount of instances for this extension. Accurate for the Contributor. Publicly rounded to the next lower hundred.

  • pricingarray of object
    • Array[
      • *object
        • priceInCentsinteger
          required

          Price of the extension in Cents.

        • variantKeystring
          required

          Identifier of the pricing variant.

        • namestring (≤ 80 characters)

          Name of the pricing variant.

        • descriptionstring (≤ 300 characters)

          description of the provided services

        • isBookingStoppedboolean

          Weather the Variant can be installed

      ]
  • pricingDetailsobject

    The details section of the price plan. It informs if choosing different variants as a upgrade or downgrade is possible.

    • isUpgradeAllowedboolean
      required

      Weather upgrading to a different variant is allowed

    • isDowngradeAllowedboolean
      required

      Weather downgrading to a different variant is allowed

  • requestedChangesobject

    Requested Changes which have to be revied by a Mittwald Employee.

    • contextstring (one of: project, customer)
    • scopesarray of string
      • Array[
        • *string
        ]
    • webhookUrlsobject
      • backendobject
        required
        • extensionAddedToContextobject
          required
          • urlstring (≥ 1 characters, uri)
            required

            The URL that the mStudio calls when the Extension is added to an Extension context. May contain placeholders

        • extensionInstanceUpdatedobject
          required
          • urlstring (≥ 1 characters, uri)
            required

            The URL that the mStudio calls when the Extension Instance is updated. May contain placeholders

        • extensionInstanceSecretRotatedobject
          required
          • urlstring (≥ 1 characters, uri)
            required

            The URL that the mStudio calls when the Extension Instance secret is rotated. May contain placeholders

        • extensionInstanceRemovedFromContextobject
          required
          • urlstring (≥ 1 characters, uri)
            required

            The URL that the mStudio calls when the Extension Instance is removed from a context. May contain placeholders

id: f0f86186-0a5a-45b2-aa33-502777496347
contributorId: f0f86186-0a5a-45b2-aa33-502777496347
name: Example Extension
subTitle:
de: Erweitere das mStudio
en: Extend the mStudio
description: An example Extension to show which information is needed to create an Extension
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: string
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: Example
url: https://example.org/:extensionInstanceId
support:
email: email@mittwald.example
phone: +49 170 123456
inherited: true
tags:
- mail
published: true
verificationRequested: true
verified: true
logoRefId: 9b2af58a-2625-41eb-adc6-bb6f7be9b90a
functional: true
assets:
- id: 709049e1-f283-4ef8-a35b-1b2f672852b0
index: 1
assetType: image
secrets:
- secretId: 6b87abc1-f0fd-4518-a21e-7c8bca3c7c25
usableUntil: 1985-10-26T01:21:00.000Z
frontendFragments:
string:
additionalProperties:
string: string
url: The URL of the frontend fragment.
extensionStatistics:
amountOfInstances: "42"
pricing:
- priceInCents: "5000"
variantKey: string
name: string
description: string
isBookingStopped: true
pricingDetails:
isUpgradeAllowed: true
isDowngradeAllowed: true
requestedChanges:
context: project
scopes:
- string
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": "Globally unique identifier of the Extension"
},
"contributorId": {
"type": "string",
"format": "uuid",
"description": "Identifier of the contributor. Identical to the identifier of the customer/organization in the mStudio"
},
"name": {
"type": "string",
"description": "Name of the Extension",
"example": "Example Extension"
},
"subTitle": {
"type": "object",
"description": "A few words to promote your Extension.",
"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": "Short description of the Extension. It should explain the Extension concisely.",
"example": "An example Extension to show which information is needed to create an Extension"
},
"detailedDescriptions": {
"type": "object",
"description": "Detailed description of the Extension in different languages",
"required": [
"de"
],
"properties": {
"de": {
"type": "object",
"description": "Detailed description of the Extension in german",
"required": [
"markdown"
],
"properties": {
"markdown": {
"type": "string",
"description": "A markdown text description",
"minLength": 1,
"example": "# Ein Beispiel\nDies ist eine Beispiel Extension-Beschreibung.\n## Weitere Informationen\nHier könnten **weitere** Informationen stehen."
},
"plain": {
"type": "string",
"description": "A plain text description",
"minLength": 1,
"example": "Eine ausführliche Beispiel Extension-Beschreibung. Diese enthält keine Formatierungen."
}
}
},
"en": {
"type": "object",
"description": "Detailed description of the Extension in english",
"required": [
"markdown"
],
"properties": {
"markdown": {
"type": "string",
"description": "A markdown text description",
"minLength": 1,
"example": "# An example\nThis is an example Extension description.\n## Further information\nHere could be **further** information."
},
"plain": {
"type": "string",
"description": "A plain text description",
"minLength": 1,
"exmple": "A detailed example Extension description. This does not contain any formatting."
}
}
}
}
},
"context": {
"type": "string",
"enum": [
"project",
"customer"
],
"description": "Defines, whether the Extension may be added to a project or an organization"
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"example": "project:read"
},
"description": "Permissions, the Extension requires"
},
"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": "The URL that the mStudio calls when the Extension is added to an Extension context. May contain placeholders",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/added"
}
}
},
"extensionInstanceUpdated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "The URL that the mStudio calls when the Extension Instance is updated. May contain placeholders",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/updated"
}
}
},
"extensionInstanceSecretRotated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "The URL that the mStudio calls when the Extension Instance secret is rotated. May contain placeholders",
"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": "The URL that the mStudio calls when the Extension Instance is removed from a context. May contain placeholders",
"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": "The name the frontend will have in the list of Extension Frontends",
"example": "Example"
},
"url": {
"type": "string",
"format": "uri",
"description": "The URL that the user is directed to when they open the Extension in the mStudio. May contain placeholders",
"example": "https://example.org/:extensionInstanceId"
}
}
}
}
}
},
"support": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Email address that may be used for support requests"
},
"phone": {
"type": "string",
"format": "phone",
"description": "Phone number that may be used for support requests",
"example": "+49 170 123456"
},
"inherited": {
"type": "boolean",
"description": "Weather the provided support information was inherited from the conrtributor",
"example": false
}
}
},
"tags": {
"type": "array",
"items": {
"type": "string",
"example": "mail"
},
"description": "Tags that describe the Extension"
},
"published": {
"type": "boolean",
"description": "Weather this Extension has been published"
},
"verificationRequested": {
"type": "boolean",
"description": "Weather verification of the Extension has been requested"
},
"verified": {
"type": "boolean",
"description": "Weather the Extension has been verified"
},
"logoRefId": {
"type": "string",
"format": "uuid",
"description": "The fileId of the the Logo",
"example": "9b2af58a-2625-41eb-adc6-bb6f7be9b90a"
},
"functional": {
"type": "boolean",
"description": "weather the extension is functional"
},
"assets": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"index",
"assetType"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "The fileId of the asset",
"example": "709049e1-f283-4ef8-a35b-1b2f672852b0"
},
"index": {
"type": "integer",
"description": "The index of the asset. Does not have to be successive. Can be used to order the assets.",
"example": 1
},
"assetType": {
"type": "string",
"enum": [
"image",
"video"
],
"example": "image"
}
}
}
},
"secrets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"secretId": {
"type": "string",
"format": "uuid",
"example": "6b87abc1-f0fd-4518-a21e-7c8bca3c7c25"
},
"usableUntil": {
"type": "string",
"format": "date-time"
}
}
}
},
"frontendFragments": {
"type": "object",
"description": "This is a map of anchros to urls. The key of the map is the anchor of a frontend fragment.",
"additionalProperties": {
"description": "The URL of the frontend fragment and additional properties for display in the mStudio.",
"type": "object",
"properties": {
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "string",
"description": "Some Information needed for the mStudio like the icon."
}
},
"url": {
"type": "string",
"format": "uri",
"example": "The URL of the frontend fragment."
}
}
}
},
"extensionStatistics": {
"type": "object",
"properties": {
"amountOfInstances": {
"type": "integer",
"example": "42",
"description": "The amount of instances for this extension. Accurate for the Contributor. Publicly rounded to the next lower hundred."
}
}
},
"pricing": {
"type": "array",
"items": {
"type": "object",
"required": [
"priceInCents",
"variantKey"
],
"properties": {
"priceInCents": {
"type": "integer",
"example": "5000",
"description": "Price of the extension in Cents.",
"maximum": 1000000
},
"variantKey": {
"type": "string",
"description": "Identifier of the pricing variant."
},
"name": {
"type": "string",
"description": "Name of the pricing variant.",
"maxLength": 80
},
"description": {
"type": "string",
"description": "description of the provided services",
"maxLength": 300
},
"isBookingStopped": {
"type": "boolean",
"description": "Weather the Variant can be installed",
"example": false
}
}
}
},
"pricingDetails": {
"type": "object",
"description": "The details section of the price plan. It informs if choosing different variants as a upgrade or downgrade is possible.",
"required": [
"isUpgradeAllowed",
"isDowngradeAllowed"
],
"properties": {
"isUpgradeAllowed": {
"type": "boolean",
"description": "Weather upgrading to a different variant is allowed"
},
"isDowngradeAllowed": {
"type": "boolean",
"description": "Weather downgrading to a different variant is allowed"
}
}
},
"requestedChanges": {
"type": "object",
"properties": {
"context": {
"type": "string",
"enum": [
"project",
"customer"
]
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"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": "The URL that the mStudio calls when the Extension is added to an Extension context. May contain placeholders",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/added"
}
}
},
"extensionInstanceUpdated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "The URL that the mStudio calls when the Extension Instance is updated. May contain placeholders",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/updated"
}
}
},
"extensionInstanceSecretRotated": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"minLength": 1,
"description": "The URL that the mStudio calls when the Extension Instance secret is rotated. May contain placeholders",
"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": "The URL that the mStudio calls when the Extension Instance is removed from a context. May contain placeholders",
"example": "https://example.org/api/v1/extensions/:contextId/:extensionInstanceId/removed"
}
}
}
}
}
}
}
},
"description": "Requested Changes which have to be revied by a Mittwald Employee."
}
}
}