API / API reference / Knowledge base articles
Save a draft of an article
Save a draft of an article
PUT /api/v1/articles/{itemId}/draft
Saves title and sections as the draft of the article without publishing it; a person publishes it in Lunedo, or a caller that may publish. Type, category and lead change at once for readers, so they need permission to publish once the article is published. Requires the permission item.editDraft on the item in itemId.
curl -X PUT -H "Authorization: Bearer ld_..." \ -H "Content-Type: application/json" --data @request.json \ "https://wiki.example.org/api/v1/articles/{itemId}/draft"Saves title and sections as the draft of the article without publishing it; a person publishes it in Lunedo, or a caller that may publish. Type, category and lead change at once for readers, so they need permission to publish once the article is published.
Requires the permission item.editDraft on the item in itemId.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”ID of the article.
Request Bodyrequired
Section titled “Request Bodyrequired”Changes saved as the draft of the article.
object
Title of the article.
Short introduction below the title.
Sections in order. They replace the whole content of the draft.
A section of the article.
object
Key of the section, such as steps or cause.
Heading of the section.
Content as Markdown. Images uploaded to the article are referenced by their file name, for example .
Note shown in the history, for example who checked the content. Stored with the draft and used when it is published.
Example
{ "sections": [ { "key": "steps", "title": "Steps", "markdown": "1. Open the VPN client.\n2. Sign in with the new code." } ], "versionNote": "Checked by Anna Huber in the help assistant"}Responses
Section titled “Responses”The draft.
An article with its sections, readable by programs.
object
ID of the article.
ID of the knowledge base.
Title of the article.
Short form of the title for addresses. The address of an article is <number>-<slug>.
Folders above the article from the top level down, as far as the caller can see them. Empty at the top level.
A category.
object
ID of the category.
Title of the category.
Name of the owner, or null when the caller may not see it.
Whether the article was published. Only editors see unpublished articles.
When the content last changed. ISO 8601 timestamp in UTC.
Language of the article.
Translations of an original article the caller can read. Empty for translations.
A translation of the article.
object
Language as a two-letter code such as de or en.
ID of the translation.
original: the article in the default language. current: published after its original. outdated: the original was published after it. unpublished: never published. missing: no translation yet.
Key of the knowledge base.
Short introduction below the title.
Template the article was created from, or null.
Semantic sections of the article in document order. Empty for an article written without sections.
A section of the article.
object
Key of the section, such as steps or cause. It keeps its meaning in every language.
Heading of the section.
Name of a Lucide icon, or null.
Plain text of the section.
Content of the section as HTML. Images point to their display version in the API, links to other articles to the portal.
object
Images in the content, in document order.
An image of the article.
object
ID of the image file.
File name.
Alternative text, empty when the author gave none.
Address of the display version in the API; send the same token to fetch it.
Whether this is the current draft instead of the published version.
Address of the article in the portal, in its language, or null when it is not published.
Example
{ "id": "01929b1e-7c3a-7d2e-9f4b-3c2d1e0f5a61", "spaceId": "01929b1e-7c3a-7d2e-9f4b-3c2d1e0f5a10", "title": "Set up the VPN connection", "type": "howTo", "number": 1123, "slug": "set-up-the-vpn-connection", "categoryPath": [ { "id": "01929b1e-7c3a-7d2e-9f4b-3c2d1e0f5a60", "title": "IT" } ], "ownerId": "01929b1e-7c3a-7d2e-9f4b-3c2d1e0f5a20", "ownerName": "Anna Weber", "published": true, "contentUpdatedAt": "2026-10-05T08:00:00.000Z", "language": "de", "translationOf": null, "translations": [ { "language": "en", "itemId": "01929b1e-7c3a-7d2e-9f4b-3c2d1e0f5a62", "state": "outdated" } ], "spaceKey": "HELP", "lead": "Work from home with the company network.", "templateId": "builtin:article-how-to", "version": 3, "sections": [ { "key": "steps", "title": "Steps", "icon": "list-ordered", "text": "Open the VPN client.", "html": "<p>Open the VPN client.</p>", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "Open the VPN client." } ] } ] } ], "document": null, "images": [], "draft": false, "publishedAt": "2026-09-01T08:00:00.000Z", "versionPublishedAt": "2026-10-05T08:00:00.000Z", "lastReviewedAt": null, "portalUrl": "https://wiki.example.org/help/help/1123-set-up-the-vpn-connection"}ambiguousCredentials: The request carries both a session and an API token. invalidDocument: The document does not match the editor schema. invalidInput: The request is not valid. invalidNote: The note is too long.
Error response following RFC 9457 Problem Details.
object
Stable identifier of the error kind. Clients branch on this value.
Short summary of the error kind. It does not change between occurrences.
HTTP status code of the response.
Explanation of this occurrence, for people.
The last part of type, for clients that prefer a short key.
Invalid fields, for invalidInput, invalidStorageSettings, invalidBackupSettings and the codes about the address of a chat channel.
Why the request was not allowed, for forbidden.
Seconds to wait before retrying, for rateLimited, locked and busy.
Which password rule failed, for passwordPolicy; why the address of a chat channel was refused, for invalidChatAddress; which storage setting was refused (invalidThresholds, invalidS3Limit, invalidContacts or invalidTeamsWebhook), for invalidStorageSettings; which backup setting was refused, for invalidBackupSettings; whether a backup or a testRestore is running, for backupRunning; why the backup target could not be used (a failure of Test connection, such as notFound or credentials, or missingSecret), for backupTargetFailed.
What Lunedo was doing with the backup target when it failed, for backupTargetFailed.
What the full storage refuses, for storageFull: an upload, or a large write such as an import.
Minimum password length, for passwordPolicy.
Level that locked the setting, for settingLocked.
Lowest allowed value, for settingBelowMinimum.
Maximum lifetime of API tokens in days, for expiryRequired and expiryTooLate.
Domains that belong to another identity provider, for domainInUse.
The current address of the instance, for instanceMoved.
ID of the identity provider that manages the account, for managedAccount and managedDomain.
Name of the identity provider that manages the account, for managedAccount and managedDomain.
Number of accounts still linked to the identity provider, for providerHasAccounts.
Largest allowed file size in bytes, for fileTooLarge and uploadTooLarge; storage limit of the organization’s imports, for organizationImportLimit.
Bytes the organization’s imports use already, for organizationImportLimit.
Number of parts still missing, for uploadIncomplete.
Number of pages below that your own role does not cover, for shareBeyondOwnAccess.
Longest allowed lifetime of a link for anyone in days, for expiryTooLate.
Number of pages that give access to groups or through broad links, for confidentialSharing; number of pages that would lose the status, for statusInUse; number of pages the caller cannot open, for hiddenContent.
Required sections that are empty or missing, for requiredSectionsEmpty.
A required section.
object
Key of the section.
Heading of the section.
Number of articles more people could read, for audienceWidening and categoryVisibilityWidening.
Number of translations into the language, for defaultLanguageTranslated.
The existing translation, for translationExists.
Check of the light mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Check of the dark mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Who gains and who loses access, with the confirmation to send, for moveChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the content leaves a confidential space and loses its protection.
Send this with the move to confirm exactly this change, or null when access does not change. Valid for one hour.
Who could read the copy but not the source, with the confirmation to send, for copyChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the copy leaves a confidential space and is not protected by it.
True when people can read the copy who cannot read the source; the copy then needs the confirmation.
Send this with the copy to confirm exactly this access, or null when nobody gains access. Valid for one hour.
Number of items the copy creates.
Number of items below that are left out because the caller cannot read them.
Number of items below that are left out because they cannot be copied.
True when the copy is large and runs in the background.
Number of trash entries of former parent pages the caller can restore together with the content, for restrictedParentInTrash; 0 when the caller cannot restore all of them.
Format or editor schema version of the file, for newerTemplateFormat.
Highest format or editor schema version this Lunedo reads, for newerTemplateFormat.
Position of the template in the file, counted from 0, for templateNameTaken.
What is wrong with the templates of the file, for invalidTemplatesInFile.
A problem in a template of the file.
object
Where in the template, such as field 3 or content.
Explanation for people, naming the template and the place.
The message of the instance administrators about the maintenance, for maintenanceMode and signInPaused. Empty when they wrote none.
What is wrong with the document, for invalidDocument and invalidComment.
A problem in the document.
object
Position in the document, such as .content[2].content[0].
Kind of problem, such as unknownNode or invalidAttribute.
Explanation for people.
Examples
{ "type": "urn:lunedo:problem:ambiguousCredentials", "title": "The request carries both a session and an API token", "status": 400, "code": "ambiguousCredentials"}{ "type": "urn:lunedo:problem:invalidDocument", "title": "The document does not match the editor schema", "status": 400, "code": "invalidDocument"}{ "type": "urn:lunedo:problem:invalidInput", "title": "The request is not valid", "status": 400, "code": "invalidInput"}{ "type": "urn:lunedo:problem:invalidNote", "title": "The note is too long", "status": 400, "code": "invalidNote"}invalidApiToken: The API token is not valid. notSignedIn: Sign in or send an API token.
Error response following RFC 9457 Problem Details.
object
Stable identifier of the error kind. Clients branch on this value.
Short summary of the error kind. It does not change between occurrences.
HTTP status code of the response.
Explanation of this occurrence, for people.
The last part of type, for clients that prefer a short key.
Invalid fields, for invalidInput, invalidStorageSettings, invalidBackupSettings and the codes about the address of a chat channel.
Why the request was not allowed, for forbidden.
Seconds to wait before retrying, for rateLimited, locked and busy.
Which password rule failed, for passwordPolicy; why the address of a chat channel was refused, for invalidChatAddress; which storage setting was refused (invalidThresholds, invalidS3Limit, invalidContacts or invalidTeamsWebhook), for invalidStorageSettings; which backup setting was refused, for invalidBackupSettings; whether a backup or a testRestore is running, for backupRunning; why the backup target could not be used (a failure of Test connection, such as notFound or credentials, or missingSecret), for backupTargetFailed.
What Lunedo was doing with the backup target when it failed, for backupTargetFailed.
What the full storage refuses, for storageFull: an upload, or a large write such as an import.
Minimum password length, for passwordPolicy.
Level that locked the setting, for settingLocked.
Lowest allowed value, for settingBelowMinimum.
Maximum lifetime of API tokens in days, for expiryRequired and expiryTooLate.
Domains that belong to another identity provider, for domainInUse.
The current address of the instance, for instanceMoved.
ID of the identity provider that manages the account, for managedAccount and managedDomain.
Name of the identity provider that manages the account, for managedAccount and managedDomain.
Number of accounts still linked to the identity provider, for providerHasAccounts.
Largest allowed file size in bytes, for fileTooLarge and uploadTooLarge; storage limit of the organization’s imports, for organizationImportLimit.
Bytes the organization’s imports use already, for organizationImportLimit.
Number of parts still missing, for uploadIncomplete.
Number of pages below that your own role does not cover, for shareBeyondOwnAccess.
Longest allowed lifetime of a link for anyone in days, for expiryTooLate.
Number of pages that give access to groups or through broad links, for confidentialSharing; number of pages that would lose the status, for statusInUse; number of pages the caller cannot open, for hiddenContent.
Required sections that are empty or missing, for requiredSectionsEmpty.
A required section.
object
Key of the section.
Heading of the section.
Number of articles more people could read, for audienceWidening and categoryVisibilityWidening.
Number of translations into the language, for defaultLanguageTranslated.
The existing translation, for translationExists.
Check of the light mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Check of the dark mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Who gains and who loses access, with the confirmation to send, for moveChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the content leaves a confidential space and loses its protection.
Send this with the move to confirm exactly this change, or null when access does not change. Valid for one hour.
Who could read the copy but not the source, with the confirmation to send, for copyChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the copy leaves a confidential space and is not protected by it.
True when people can read the copy who cannot read the source; the copy then needs the confirmation.
Send this with the copy to confirm exactly this access, or null when nobody gains access. Valid for one hour.
Number of items the copy creates.
Number of items below that are left out because the caller cannot read them.
Number of items below that are left out because they cannot be copied.
True when the copy is large and runs in the background.
Number of trash entries of former parent pages the caller can restore together with the content, for restrictedParentInTrash; 0 when the caller cannot restore all of them.
Format or editor schema version of the file, for newerTemplateFormat.
Highest format or editor schema version this Lunedo reads, for newerTemplateFormat.
Position of the template in the file, counted from 0, for templateNameTaken.
What is wrong with the templates of the file, for invalidTemplatesInFile.
A problem in a template of the file.
object
Where in the template, such as field 3 or content.
Explanation for people, naming the template and the place.
The message of the instance administrators about the maintenance, for maintenanceMode and signInPaused. Empty when they wrote none.
What is wrong with the document, for invalidDocument and invalidComment.
A problem in the document.
object
Position in the document, such as .content[2].content[0].
Kind of problem, such as unknownNode or invalidAttribute.
Explanation for people.
Examples
{ "type": "urn:lunedo:problem:invalidApiToken", "title": "The API token is not valid", "status": 401, "code": "invalidApiToken"}{ "type": "urn:lunedo:problem:notSignedIn", "title": "Sign in or send an API token", "status": 401, "code": "notSignedIn"}csrfRejected: The request failed the cross-site request check. forbidden: Not allowed. publishNotAllowed: Publishing is not allowed.
Error response following RFC 9457 Problem Details.
object
Stable identifier of the error kind. Clients branch on this value.
Short summary of the error kind. It does not change between occurrences.
HTTP status code of the response.
Explanation of this occurrence, for people.
The last part of type, for clients that prefer a short key.
Invalid fields, for invalidInput, invalidStorageSettings, invalidBackupSettings and the codes about the address of a chat channel.
Why the request was not allowed, for forbidden.
Seconds to wait before retrying, for rateLimited, locked and busy.
Which password rule failed, for passwordPolicy; why the address of a chat channel was refused, for invalidChatAddress; which storage setting was refused (invalidThresholds, invalidS3Limit, invalidContacts or invalidTeamsWebhook), for invalidStorageSettings; which backup setting was refused, for invalidBackupSettings; whether a backup or a testRestore is running, for backupRunning; why the backup target could not be used (a failure of Test connection, such as notFound or credentials, or missingSecret), for backupTargetFailed.
What Lunedo was doing with the backup target when it failed, for backupTargetFailed.
What the full storage refuses, for storageFull: an upload, or a large write such as an import.
Minimum password length, for passwordPolicy.
Level that locked the setting, for settingLocked.
Lowest allowed value, for settingBelowMinimum.
Maximum lifetime of API tokens in days, for expiryRequired and expiryTooLate.
Domains that belong to another identity provider, for domainInUse.
The current address of the instance, for instanceMoved.
ID of the identity provider that manages the account, for managedAccount and managedDomain.
Name of the identity provider that manages the account, for managedAccount and managedDomain.
Number of accounts still linked to the identity provider, for providerHasAccounts.
Largest allowed file size in bytes, for fileTooLarge and uploadTooLarge; storage limit of the organization’s imports, for organizationImportLimit.
Bytes the organization’s imports use already, for organizationImportLimit.
Number of parts still missing, for uploadIncomplete.
Number of pages below that your own role does not cover, for shareBeyondOwnAccess.
Longest allowed lifetime of a link for anyone in days, for expiryTooLate.
Number of pages that give access to groups or through broad links, for confidentialSharing; number of pages that would lose the status, for statusInUse; number of pages the caller cannot open, for hiddenContent.
Required sections that are empty or missing, for requiredSectionsEmpty.
A required section.
object
Key of the section.
Heading of the section.
Number of articles more people could read, for audienceWidening and categoryVisibilityWidening.
Number of translations into the language, for defaultLanguageTranslated.
The existing translation, for translationExists.
Check of the light mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Check of the dark mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Who gains and who loses access, with the confirmation to send, for moveChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the content leaves a confidential space and loses its protection.
Send this with the move to confirm exactly this change, or null when access does not change. Valid for one hour.
Who could read the copy but not the source, with the confirmation to send, for copyChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the copy leaves a confidential space and is not protected by it.
True when people can read the copy who cannot read the source; the copy then needs the confirmation.
Send this with the copy to confirm exactly this access, or null when nobody gains access. Valid for one hour.
Number of items the copy creates.
Number of items below that are left out because the caller cannot read them.
Number of items below that are left out because they cannot be copied.
True when the copy is large and runs in the background.
Number of trash entries of former parent pages the caller can restore together with the content, for restrictedParentInTrash; 0 when the caller cannot restore all of them.
Format or editor schema version of the file, for newerTemplateFormat.
Highest format or editor schema version this Lunedo reads, for newerTemplateFormat.
Position of the template in the file, counted from 0, for templateNameTaken.
What is wrong with the templates of the file, for invalidTemplatesInFile.
A problem in a template of the file.
object
Where in the template, such as field 3 or content.
Explanation for people, naming the template and the place.
The message of the instance administrators about the maintenance, for maintenanceMode and signInPaused. Empty when they wrote none.
What is wrong with the document, for invalidDocument and invalidComment.
A problem in the document.
object
Position in the document, such as .content[2].content[0].
Kind of problem, such as unknownNode or invalidAttribute.
Explanation for people.
Examples
{ "type": "urn:lunedo:problem:csrfRejected", "title": "The request failed the cross-site request check", "status": 403, "code": "csrfRejected"}{ "type": "urn:lunedo:problem:forbidden", "title": "Not allowed", "status": 403, "code": "forbidden"}{ "type": "urn:lunedo:problem:publishNotAllowed", "title": "Publishing is not allowed", "status": 403, "code": "publishNotAllowed"}notFound: Not found.
Error response following RFC 9457 Problem Details.
object
Stable identifier of the error kind. Clients branch on this value.
Short summary of the error kind. It does not change between occurrences.
HTTP status code of the response.
Explanation of this occurrence, for people.
The last part of type, for clients that prefer a short key.
Invalid fields, for invalidInput, invalidStorageSettings, invalidBackupSettings and the codes about the address of a chat channel.
Why the request was not allowed, for forbidden.
Seconds to wait before retrying, for rateLimited, locked and busy.
Which password rule failed, for passwordPolicy; why the address of a chat channel was refused, for invalidChatAddress; which storage setting was refused (invalidThresholds, invalidS3Limit, invalidContacts or invalidTeamsWebhook), for invalidStorageSettings; which backup setting was refused, for invalidBackupSettings; whether a backup or a testRestore is running, for backupRunning; why the backup target could not be used (a failure of Test connection, such as notFound or credentials, or missingSecret), for backupTargetFailed.
What Lunedo was doing with the backup target when it failed, for backupTargetFailed.
What the full storage refuses, for storageFull: an upload, or a large write such as an import.
Minimum password length, for passwordPolicy.
Level that locked the setting, for settingLocked.
Lowest allowed value, for settingBelowMinimum.
Maximum lifetime of API tokens in days, for expiryRequired and expiryTooLate.
Domains that belong to another identity provider, for domainInUse.
The current address of the instance, for instanceMoved.
ID of the identity provider that manages the account, for managedAccount and managedDomain.
Name of the identity provider that manages the account, for managedAccount and managedDomain.
Number of accounts still linked to the identity provider, for providerHasAccounts.
Largest allowed file size in bytes, for fileTooLarge and uploadTooLarge; storage limit of the organization’s imports, for organizationImportLimit.
Bytes the organization’s imports use already, for organizationImportLimit.
Number of parts still missing, for uploadIncomplete.
Number of pages below that your own role does not cover, for shareBeyondOwnAccess.
Longest allowed lifetime of a link for anyone in days, for expiryTooLate.
Number of pages that give access to groups or through broad links, for confidentialSharing; number of pages that would lose the status, for statusInUse; number of pages the caller cannot open, for hiddenContent.
Required sections that are empty or missing, for requiredSectionsEmpty.
A required section.
object
Key of the section.
Heading of the section.
Number of articles more people could read, for audienceWidening and categoryVisibilityWidening.
Number of translations into the language, for defaultLanguageTranslated.
The existing translation, for translationExists.
Check of the light mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Check of the dark mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Who gains and who loses access, with the confirmation to send, for moveChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the content leaves a confidential space and loses its protection.
Send this with the move to confirm exactly this change, or null when access does not change. Valid for one hour.
Who could read the copy but not the source, with the confirmation to send, for copyChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the copy leaves a confidential space and is not protected by it.
True when people can read the copy who cannot read the source; the copy then needs the confirmation.
Send this with the copy to confirm exactly this access, or null when nobody gains access. Valid for one hour.
Number of items the copy creates.
Number of items below that are left out because the caller cannot read them.
Number of items below that are left out because they cannot be copied.
True when the copy is large and runs in the background.
Number of trash entries of former parent pages the caller can restore together with the content, for restrictedParentInTrash; 0 when the caller cannot restore all of them.
Format or editor schema version of the file, for newerTemplateFormat.
Highest format or editor schema version this Lunedo reads, for newerTemplateFormat.
Position of the template in the file, counted from 0, for templateNameTaken.
What is wrong with the templates of the file, for invalidTemplatesInFile.
A problem in a template of the file.
object
Where in the template, such as field 3 or content.
Explanation for people, naming the template and the place.
The message of the instance administrators about the maintenance, for maintenanceMode and signInPaused. Empty when they wrote none.
What is wrong with the document, for invalidDocument and invalidComment.
A problem in the document.
object
Position in the document, such as .content[2].content[0].
Kind of problem, such as unknownNode or invalidAttribute.
Explanation for people.
Examples
{ "type": "urn:lunedo:problem:notFound", "title": "Not found", "status": 404, "code": "notFound"}moveChangesAccess: The move changes who can access the content. notArticle: The item is not an article of a knowledge base.
Error response following RFC 9457 Problem Details.
object
Stable identifier of the error kind. Clients branch on this value.
Short summary of the error kind. It does not change between occurrences.
HTTP status code of the response.
Explanation of this occurrence, for people.
The last part of type, for clients that prefer a short key.
Invalid fields, for invalidInput, invalidStorageSettings, invalidBackupSettings and the codes about the address of a chat channel.
Why the request was not allowed, for forbidden.
Seconds to wait before retrying, for rateLimited, locked and busy.
Which password rule failed, for passwordPolicy; why the address of a chat channel was refused, for invalidChatAddress; which storage setting was refused (invalidThresholds, invalidS3Limit, invalidContacts or invalidTeamsWebhook), for invalidStorageSettings; which backup setting was refused, for invalidBackupSettings; whether a backup or a testRestore is running, for backupRunning; why the backup target could not be used (a failure of Test connection, such as notFound or credentials, or missingSecret), for backupTargetFailed.
What Lunedo was doing with the backup target when it failed, for backupTargetFailed.
What the full storage refuses, for storageFull: an upload, or a large write such as an import.
Minimum password length, for passwordPolicy.
Level that locked the setting, for settingLocked.
Lowest allowed value, for settingBelowMinimum.
Maximum lifetime of API tokens in days, for expiryRequired and expiryTooLate.
Domains that belong to another identity provider, for domainInUse.
The current address of the instance, for instanceMoved.
ID of the identity provider that manages the account, for managedAccount and managedDomain.
Name of the identity provider that manages the account, for managedAccount and managedDomain.
Number of accounts still linked to the identity provider, for providerHasAccounts.
Largest allowed file size in bytes, for fileTooLarge and uploadTooLarge; storage limit of the organization’s imports, for organizationImportLimit.
Bytes the organization’s imports use already, for organizationImportLimit.
Number of parts still missing, for uploadIncomplete.
Number of pages below that your own role does not cover, for shareBeyondOwnAccess.
Longest allowed lifetime of a link for anyone in days, for expiryTooLate.
Number of pages that give access to groups or through broad links, for confidentialSharing; number of pages that would lose the status, for statusInUse; number of pages the caller cannot open, for hiddenContent.
Required sections that are empty or missing, for requiredSectionsEmpty.
A required section.
object
Key of the section.
Heading of the section.
Number of articles more people could read, for audienceWidening and categoryVisibilityWidening.
Number of translations into the language, for defaultLanguageTranslated.
The existing translation, for translationExists.
Check of the light mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Check of the dark mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Who gains and who loses access, with the confirmation to send, for moveChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the content leaves a confidential space and loses its protection.
Send this with the move to confirm exactly this change, or null when access does not change. Valid for one hour.
Who could read the copy but not the source, with the confirmation to send, for copyChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the copy leaves a confidential space and is not protected by it.
True when people can read the copy who cannot read the source; the copy then needs the confirmation.
Send this with the copy to confirm exactly this access, or null when nobody gains access. Valid for one hour.
Number of items the copy creates.
Number of items below that are left out because the caller cannot read them.
Number of items below that are left out because they cannot be copied.
True when the copy is large and runs in the background.
Number of trash entries of former parent pages the caller can restore together with the content, for restrictedParentInTrash; 0 when the caller cannot restore all of them.
Format or editor schema version of the file, for newerTemplateFormat.
Highest format or editor schema version this Lunedo reads, for newerTemplateFormat.
Position of the template in the file, counted from 0, for templateNameTaken.
What is wrong with the templates of the file, for invalidTemplatesInFile.
A problem in a template of the file.
object
Where in the template, such as field 3 or content.
Explanation for people, naming the template and the place.
The message of the instance administrators about the maintenance, for maintenanceMode and signInPaused. Empty when they wrote none.
What is wrong with the document, for invalidDocument and invalidComment.
A problem in the document.
object
Position in the document, such as .content[2].content[0].
Kind of problem, such as unknownNode or invalidAttribute.
Explanation for people.
Examples
{ "type": "urn:lunedo:problem:moveChangesAccess", "title": "The move changes who can access the content", "status": 409, "code": "moveChangesAccess"}{ "type": "urn:lunedo:problem:notArticle", "title": "The item is not an article of a knowledge base", "status": 409, "code": "notArticle"}rateLimited: Too many requests.
Error response following RFC 9457 Problem Details.
object
Stable identifier of the error kind. Clients branch on this value.
Short summary of the error kind. It does not change between occurrences.
HTTP status code of the response.
Explanation of this occurrence, for people.
The last part of type, for clients that prefer a short key.
Invalid fields, for invalidInput, invalidStorageSettings, invalidBackupSettings and the codes about the address of a chat channel.
Why the request was not allowed, for forbidden.
Seconds to wait before retrying, for rateLimited, locked and busy.
Which password rule failed, for passwordPolicy; why the address of a chat channel was refused, for invalidChatAddress; which storage setting was refused (invalidThresholds, invalidS3Limit, invalidContacts or invalidTeamsWebhook), for invalidStorageSettings; which backup setting was refused, for invalidBackupSettings; whether a backup or a testRestore is running, for backupRunning; why the backup target could not be used (a failure of Test connection, such as notFound or credentials, or missingSecret), for backupTargetFailed.
What Lunedo was doing with the backup target when it failed, for backupTargetFailed.
What the full storage refuses, for storageFull: an upload, or a large write such as an import.
Minimum password length, for passwordPolicy.
Level that locked the setting, for settingLocked.
Lowest allowed value, for settingBelowMinimum.
Maximum lifetime of API tokens in days, for expiryRequired and expiryTooLate.
Domains that belong to another identity provider, for domainInUse.
The current address of the instance, for instanceMoved.
ID of the identity provider that manages the account, for managedAccount and managedDomain.
Name of the identity provider that manages the account, for managedAccount and managedDomain.
Number of accounts still linked to the identity provider, for providerHasAccounts.
Largest allowed file size in bytes, for fileTooLarge and uploadTooLarge; storage limit of the organization’s imports, for organizationImportLimit.
Bytes the organization’s imports use already, for organizationImportLimit.
Number of parts still missing, for uploadIncomplete.
Number of pages below that your own role does not cover, for shareBeyondOwnAccess.
Longest allowed lifetime of a link for anyone in days, for expiryTooLate.
Number of pages that give access to groups or through broad links, for confidentialSharing; number of pages that would lose the status, for statusInUse; number of pages the caller cannot open, for hiddenContent.
Required sections that are empty or missing, for requiredSectionsEmpty.
A required section.
object
Key of the section.
Heading of the section.
Number of articles more people could read, for audienceWidening and categoryVisibilityWidening.
Number of translations into the language, for defaultLanguageTranslated.
The existing translation, for translationExists.
Check of the light mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Check of the dark mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Who gains and who loses access, with the confirmation to send, for moveChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the content leaves a confidential space and loses its protection.
Send this with the move to confirm exactly this change, or null when access does not change. Valid for one hour.
Who could read the copy but not the source, with the confirmation to send, for copyChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the copy leaves a confidential space and is not protected by it.
True when people can read the copy who cannot read the source; the copy then needs the confirmation.
Send this with the copy to confirm exactly this access, or null when nobody gains access. Valid for one hour.
Number of items the copy creates.
Number of items below that are left out because the caller cannot read them.
Number of items below that are left out because they cannot be copied.
True when the copy is large and runs in the background.
Number of trash entries of former parent pages the caller can restore together with the content, for restrictedParentInTrash; 0 when the caller cannot restore all of them.
Format or editor schema version of the file, for newerTemplateFormat.
Highest format or editor schema version this Lunedo reads, for newerTemplateFormat.
Position of the template in the file, counted from 0, for templateNameTaken.
What is wrong with the templates of the file, for invalidTemplatesInFile.
A problem in a template of the file.
object
Where in the template, such as field 3 or content.
Explanation for people, naming the template and the place.
The message of the instance administrators about the maintenance, for maintenanceMode and signInPaused. Empty when they wrote none.
What is wrong with the document, for invalidDocument and invalidComment.
A problem in the document.
object
Position in the document, such as .content[2].content[0].
Kind of problem, such as unknownNode or invalidAttribute.
Explanation for people.
Examples
{ "type": "urn:lunedo:problem:rateLimited", "title": "Too many requests", "status": 429, "code": "rateLimited"}maintenanceMode: The instance is in maintenance mode.
Error response following RFC 9457 Problem Details.
object
Stable identifier of the error kind. Clients branch on this value.
Short summary of the error kind. It does not change between occurrences.
HTTP status code of the response.
Explanation of this occurrence, for people.
The last part of type, for clients that prefer a short key.
Invalid fields, for invalidInput, invalidStorageSettings, invalidBackupSettings and the codes about the address of a chat channel.
Why the request was not allowed, for forbidden.
Seconds to wait before retrying, for rateLimited, locked and busy.
Which password rule failed, for passwordPolicy; why the address of a chat channel was refused, for invalidChatAddress; which storage setting was refused (invalidThresholds, invalidS3Limit, invalidContacts or invalidTeamsWebhook), for invalidStorageSettings; which backup setting was refused, for invalidBackupSettings; whether a backup or a testRestore is running, for backupRunning; why the backup target could not be used (a failure of Test connection, such as notFound or credentials, or missingSecret), for backupTargetFailed.
What Lunedo was doing with the backup target when it failed, for backupTargetFailed.
What the full storage refuses, for storageFull: an upload, or a large write such as an import.
Minimum password length, for passwordPolicy.
Level that locked the setting, for settingLocked.
Lowest allowed value, for settingBelowMinimum.
Maximum lifetime of API tokens in days, for expiryRequired and expiryTooLate.
Domains that belong to another identity provider, for domainInUse.
The current address of the instance, for instanceMoved.
ID of the identity provider that manages the account, for managedAccount and managedDomain.
Name of the identity provider that manages the account, for managedAccount and managedDomain.
Number of accounts still linked to the identity provider, for providerHasAccounts.
Largest allowed file size in bytes, for fileTooLarge and uploadTooLarge; storage limit of the organization’s imports, for organizationImportLimit.
Bytes the organization’s imports use already, for organizationImportLimit.
Number of parts still missing, for uploadIncomplete.
Number of pages below that your own role does not cover, for shareBeyondOwnAccess.
Longest allowed lifetime of a link for anyone in days, for expiryTooLate.
Number of pages that give access to groups or through broad links, for confidentialSharing; number of pages that would lose the status, for statusInUse; number of pages the caller cannot open, for hiddenContent.
Required sections that are empty or missing, for requiredSectionsEmpty.
A required section.
object
Key of the section.
Heading of the section.
Number of articles more people could read, for audienceWidening and categoryVisibilityWidening.
Number of translations into the language, for defaultLanguageTranslated.
The existing translation, for translationExists.
Check of the light mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Check of the dark mode color, for brandContrast.
object
The checked color.
Whether it reaches the contrast WCAG AA asks for.
Contrast of the color as text on the background.
Contrast of text on the color.
The nearest shade that passes, or null when none exists.
Who gains and who loses access, with the confirmation to send, for moveChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the content leaves a confidential space and loses its protection.
Send this with the move to confirm exactly this change, or null when access does not change. Valid for one hour.
Who could read the copy but not the source, with the confirmation to send, for copyChangesAccess.
object
Number of people who get access.
Number of people who lose access.
Number of people whose role rises.
Number of people whose role drops.
Number of affected people the caller may not see; they are counted but not listed.
Whether changes lists only the first 100 people.
People whose access changes, ordered by name.
How the access of one person changes.
object
ID of the account.
Name of the person.
True when the copy leaves a confidential space and is not protected by it.
True when people can read the copy who cannot read the source; the copy then needs the confirmation.
Send this with the copy to confirm exactly this access, or null when nobody gains access. Valid for one hour.
Number of items the copy creates.
Number of items below that are left out because the caller cannot read them.
Number of items below that are left out because they cannot be copied.
True when the copy is large and runs in the background.
Number of trash entries of former parent pages the caller can restore together with the content, for restrictedParentInTrash; 0 when the caller cannot restore all of them.
Format or editor schema version of the file, for newerTemplateFormat.
Highest format or editor schema version this Lunedo reads, for newerTemplateFormat.
Position of the template in the file, counted from 0, for templateNameTaken.
What is wrong with the templates of the file, for invalidTemplatesInFile.
A problem in a template of the file.
object
Where in the template, such as field 3 or content.
Explanation for people, naming the template and the place.
The message of the instance administrators about the maintenance, for maintenanceMode and signInPaused. Empty when they wrote none.
What is wrong with the document, for invalidDocument and invalidComment.
A problem in the document.
object
Position in the document, such as .content[2].content[0].
Kind of problem, such as unknownNode or invalidAttribute.
Explanation for people.
Examples
{ "type": "urn:lunedo:problem:maintenanceMode", "title": "The instance is in maintenance mode", "status": 503, "code": "maintenanceMode"}