Content
- Creating structured request categories
- JSON schema for structured request categories
- Selection fields and chained fields
- Creating it yourself with an AI assistant
- Featured request categories
- Viewing featured request categories in the app
- Examples of structured request categories
Request categories are the categories residents select in the app when submitting a request. You manage them in Cockpit under Platform settings › Features › Service Center. You can structure request categories, i.e. add a form (JSON schema) to them, to specifically request the most important information when residents submit requests and when tasks are created. You can also feature structured request categories so that they appear especially prominently in the app. This speeds up the processing of requests and ensures efficient communication with residents.
Internal task categories, which are only used for internal tasks, are managed under Company › Feature settings. Internal task categories can also be structured with a form and featured. This article describes request categories, which residents select in the app.
Creating structured request categories
To use this feature, you need the permissions "Platform settings | Manage settings" and "Task management | Manage tasks (Team member)".
-
Access the feature settings:
- In Cockpit, navigate to Platform settings and then to Features.
- Select the "Service Center" feature.
-
Add a new category:
- In the "Request categories" section, click "Add a new category".
- Enter a unique name for the new category.
-
Define the category as structured:
- Enable the "Structured category (with form)" option.
JSON schema for structured request categories
To define the structured category, use a JSON schema. This schema determines which fields and information are requested when a request is submitted or a task is created.
Steps to implement the JSON schema:
Adjust the schema: In the newly created category, click the "JSON schema" tab and adjust the JSON schema to your needs, or paste in one of the examples below.
View the preview: On the right you'll see a preview of the structured category based on the JSON schema.
Add translations: Click the "Translations" tab and add the corresponding translations for all languages.
Save and activate the category: Click "Save". Then activate the category by clicking the crossed-out eye icon.
Once the category has been structured, all residents and team members are prompted to provide additional information when submitting a request or creating a task in that category.
Requests and tasks with a structured category can be created both via the app and directly in the "Tasks" area in Cockpit: as soon as a structured category is selected in the creation form, the form automatically displays the corresponding additional fields.
This feature is currently only available in combination with JSON, so basic knowledge is required.
Selection fields and chained fields
In addition to text fields, structured request categories can also include dropdown lists. These can be chained and combined with text fields, letting residents provide specific information. You define chained fields in the JSON schema – most easily with the AI assistant described in the next section.
Creating it yourself with an AI assistant
You can also have an AI assistant (e.g. ChatGPT or Claude) generate the matching JSON schema for you. Copy the following prompt and paste it into a conversation with your AI assistant. The assistant will then ask you the key questions and, at the end, give you both the JSON schema and the matching translations, ready to paste directly into the "JSON schema" and "Translations" tabs — including chained fields if you wish.
You are an assistant helping companies that use Allthings create a JSON schema for a "structured category" (optionally with chained/conditional dropdown fields) in the Allthings Cockpit.
Goal: at the end, provide me with two ready-to-paste JSON objects:
1. The "JSON schema" (the "JSON schema" tab in Cockpit) – a standard JSON Schema with "type": "object", "title", "description", "properties" (each field with a unique, short camelCase key such as fieldOne, roomType, damageDescription, a "type", and optionally "enum" for selection fields) and "required" (list of required field keys).
2. The "Translations" object (the "Translations" tab in Cockpit) – a flat object with one entry per required language and field, in this exact format:
- "<locale>": "<form title in that language>"
- "<locale>.description": "<description in that language>"
- "<locale>.fields.<fieldKey>": "<question/label for that field in that language>"
Use de_DE, en_US, fr_FR, it_IT as <locale> values (add nl_NL, pt_PT only if explicitly requested).
If chained/conditional fields are needed (i.e. a field should only appear when a specific option was chosen in an earlier selection field), express this exclusively via the standard JSON Schema constructs "dependencies" and "oneOf" (there is no Allthings-specific syntax for this). Follow this pattern:
{
"type": "object",
"properties": {
"category": { "type": "string", "title": "...", "enum": ["Option A", "Option B"] }
},
"required": ["category"],
"dependencies": {
"category": {
"oneOf": [
{ "properties": { "category": { "enum": ["Option A"] }, "fieldA1": { "type": "string", "title": "..." } } },
{ "properties": { "category": { "enum": ["Option B"] }, "fieldB1": { "type": "string", "title": "..." } } }
]
}
}
}
For multi-level chaining (a conditional field itself triggers a further branch), nest the pattern accordingly by placing another "dependencies" object inside the relevant "oneOf" branch.
Before generating the JSON, ask me the following questions one at a time (not all at once) and wait for my answer each time:
1. What category/request is this form for (e.g. "Report damage", "Order a key")? What should the title be?
2. What information do you want to collect from the requester? List every individual question/field.
3. Which of these fields are required, which are optional?
4. Are any fields meant to be a dropdown/selection (fixed options) instead of free text? If so, which exact options, per field?
5. Should any field's visibility depend on the value chosen in another field (chained/conditional field)? If so, which field depends on which selection in which other field, and are there multiple levels of chaining?
6. Which languages does this form need (default: German, English, French, Italian)?
Only generate the JSON once you have all the answers. Provide both JSON objects each in its own, fully valid code block (no markdown outside the pure JSON structure, no comments inside the JSON, no trailing commas). Make sure every field key in the JSON schema exactly matches the key in the translation object (e.g. "fields.fieldOne" ⟷ "properties.fieldOne", including inside "dependencies"/"oneOf" branches).
You can then copy the JSON the assistant provides directly: the first block into the "JSON schema" tab, the second block into the "Translations" tab (see above).
If you still need support or your request is more complex, feel free to contact our Service Delivery team so we can carry out an initial effort estimate and help you as quickly as possible.
Featured request categories
The "Featured" option (formerly "smart ticket") is only available for structured categories. It determines which categories are shown especially prominently to residents in the app:
- Featured categories appear at the very top of the app as separate buttons when a new request is created and can be selected with one click.
- All other categories remain available below in a selection list.
- You define the form fields (e.g. chained selection fields) via the JSON schema of the structured category – the "Featured" option does not change this.
You need the same permissions as for creating structured request categories.
Create a structured request category as described under "Creating structured request categories", or open an existing structured request category.
Enable the "Featured" option on the category.
Viewing featured request categories in the app
After clicking "New request" in the app, the featured categories are shown at the top and can be selected directly. Under "More categories", the remaining categories are available in a dropdown list.
Using featured categories lets you optimize the flow of information and increase efficiency when processing tasks.
You can find a detailed video on featured request categories (formerly "smart ticket") here:
Examples of structured request categories
Below you'll find examples of structured request categories. You can copy these JSON schemas into your categories or customize them.
Damage in the apartment
Preview of the structured category:
JSON schema:
{
"type": "object",
"title": "Damage in the apartment",
"properties": {
"fieldOne": {
"type": "string",
"title": "Where is the damage located?"
},
"fieldTwo": {
"type": "string",
"title": "What is defective/damaged?"
}
},
"required": [
"fieldOne",
"fieldTwo"
]
}
Translations:
{
"en_US": "Damage in the apartment",
"en_US.fields.fieldOne": "Where is the damage located?",
"en_US.fields.fieldTwo": "What is defective/damaged?",
"de_DE": "Schaden in der Wohnung",
"de_DE.fields.fieldOne": "Wo befindet sich der Schaden?",
"de_DE.fields.fieldTwo": "Was ist defekt/beschädigt?",
"fr_FR": "Dommage appartement",
"fr_FR.fields.fieldOne": "Où sont les dégâts?",
"fr_FR.fields.fieldTwo": "Qu'est-ce qui est défectueux/endommagé?",
"it_IT": "Danno appartamento",
"it_IT.fields.fieldOne": "Dov'è il danno?",
"it_IT.fields.fieldTwo": "Cosa è difettoso/danneggiato?"
}
Appliance defect
Preview of the structured category:
JSON schema:
{
"type": "object",
"title": "Appliance defect",
"properties": {
"fieldOne": {
"type": "string",
"title": "Which appliance is defective?"
},
"fieldTwo": {
"type": "string",
"title": "Where is the appliance located?"
}
},
"required": [
"fieldOne",
"fieldTwo"
]
}
Translations:
{
"en_US": "Appliance defect",
"en_US.fields.fieldOne": "Which appliance is defective?",
"en_US.fields.fieldTwo": "Where is the appliance located?",
"de_DE": "Gerätedefekt",
"de_DE.fields.fieldOne": "Welches Gerät ist defekt?",
"de_DE.fields.fieldTwo": "Wo befindet sich das Gerät?",
"fr_FR": "Appareil défectueux",
"fr_FR.fields.fieldOne": "Quel appareil est défectueux ?",
"fr_FR.fields.fieldTwo": "Où se trouve l'appareil ?",
"it_IT": "Dispositivo difettoso",
"it_IT.fields.fieldOne": "Quale dispositivo è difettoso ?",
"it_IT.fields.fieldTwo": "Dov'è il dispositivo ?"
}
General damage
Preview of the structured category:
JSON schema:
{
"type": "object",
"title": "General damage",
"properties": {
"fieldOne": {
"type": "string",
"title": "Where is the damage located?"
},
"fieldTwo": {
"type": "string",
"title": "What is defective/damaged?"
}
},
"required": [
"fieldOne",
"fieldTwo"
]
}
Translations:
{
"en_US": "General damage",
"en_US.fields.fieldOne": "Where is the damage located?",
"en_US.fields.fieldTwo": "What is defective/damaged?",
"de_DE": "Schaden Allgemein",
"de_DE.fields.fieldOne": "Wo befindet sich der Schaden?",
"de_DE.fields.fieldTwo": "Was ist defekt/beschädigt?",
"fr_FR": "Dommages généraux",
"fr_FR.fields.fieldOne": "Où sont les dégâts?",
"fr_FR.fields.fieldTwo": "Qu'est-ce qui est défectueux/endommagé?",
"it_IT": "Danno generale",
"it_IT.fields.fieldOne": "Dov'è il danno?",
"it_IT.fields.fieldTwo": "Cosa è difettoso/danneggiato?"
}
Ordering a key
Preview of the structured category:
JSON schema:
{
"type": "object",
"title": "Order a key",
"description": "(If keys are lost, the corresponding locks will be replaced when you move out. The costs will be charged to you)",
"properties": {
"fieldOne": {
"type": "string",
"title": "Which key would you like to order?",
"enum": [
"Apartment",
"Letterbox",
"Cellar",
"Other"
]
},
"fieldTwo": {
"type": "string",
"title": "I will pay the costs.",
"enum": [
"Yes",
"No"
]
},
"fieldThree": {
"type": "string",
"title": "Manufacturer name and further information"
}
},
"required": [
"fieldOne",
"fieldTwo"
]
}
Translations:
{
"en_US": "Order a key",
"en_US.description": "(If keys are lost, the corresponding locks will be replaced when you move out. The costs will be charged to you)",
"en_US.fields.fieldOne": "Which key would you like to order? (e.g. flat, letterbox, ...)",
"en_US.fields.fieldTwo": "I will pay the costs. (Yes / No)",
"en_US.fields.fieldThree": "Please insert manufacturer name and all information about the existing key here.",
"de_DE": "Schlüssel bestellen",
"de_DE.description": "(Bei Schlüsselverlust werden die entsprechenden Schlösser beim Auszug ausgetauscht. Die Kosten werden Ihnen belastet)",
"de_DE.fields.fieldOne": "Welchen Schlüssel möchten Sie bestellen? (z. B. Wohnung, Briefkasten, ...)",
"de_DE.fields.fieldTwo": "Ich werde die Kosten übernehmen. (Ja / Nein)",
"de_DE.fields.fieldThree": "Bitte fügen Sie hier Herstellername und alle Informationen des bestehenden Schlüssels ein.",
"fr_FR": "Clé de commande",
"fr_FR.description": "(En cas de perte des clés, les serrures correspondantes seront remplacées lors de votre déménagement. Les coûts vous seront facturés)",
"fr_FR.fields.fieldOne": "Quelle clé souhaitez-vous commander ? ( ex. appartement, boîte aux lettres, ...)",
"fr_FR.fields.fieldTwo": "Je paierai les frais. (Oui / Non)",
"fr_FR.fields.fieldThree": "Veuillez insérer ici le nom du fabricant et toutes les informations relatives à la clé existante."
}