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.
- Schema documentation
- Example
- JSON Schema
- 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
- namestringrequired
Name of the Extension
- subTitleobjectrequired
A few words to promote your Extension.
- destring (≤ 40 characters)required
- enstring (≤ 40 characters)
- descriptionstringrequired
Short description of the Extension. It should explain the Extension concisely.
- detailedDescriptionsobject
Detailed description of the Extension in different languages
- deobjectrequired
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 stringrequired
Permissions, the Extension requires
- Array[
- *string
]
- webhookUrlsobject
- backendobjectrequired
- extensionAddedToContextobjectrequired
- urlstring (≥ 1 characters, uri)required
The URL that the mStudio calls when the Extension is added to an Extension context. May contain placeholders
- extensionInstanceUpdatedobjectrequired
- urlstring (≥ 1 characters, uri)required
The URL that the mStudio calls when the Extension Instance is updated. May contain placeholders
- extensionInstanceSecretRotatedobjectrequired
- urlstring (≥ 1 characters, uri)required
The URL that the mStudio calls when the Extension Instance secret is rotated. May contain placeholders
- extensionInstanceRemovedFromContextobjectrequired
- 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
]
- supportobjectrequired
- 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 stringrequired
Tags that describe the Extension
- Array[
- *string
]
- publishedbooleanrequired
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 objectrequired
- Array[
- *object
- idstring (uuid)required
The fileId of the asset
- indexintegerrequired
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
- priceInCentsintegerrequired
Price of the extension in Cents.
- variantKeystringrequired
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.
- isUpgradeAllowedbooleanrequired
Weather upgrading to a different variant is allowed
- isDowngradeAllowedbooleanrequired
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
- backendobjectrequired
- extensionAddedToContextobjectrequired
- urlstring (≥ 1 characters, uri)required
The URL that the mStudio calls when the Extension is added to an Extension context. May contain placeholders
- extensionInstanceUpdatedobjectrequired
- urlstring (≥ 1 characters, uri)required
The URL that the mStudio calls when the Extension Instance is updated. May contain placeholders
- extensionInstanceSecretRotatedobjectrequired
- urlstring (≥ 1 characters, uri)required
The URL that the mStudio calls when the Extension Instance secret is rotated. May contain placeholders
- extensionInstanceRemovedFromContextobjectrequired
- 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."
}
}
}