Creates a shortcut at the given slug, or updates the existing one. Returns 201 when a new shortcut is created and 200 when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with GET/PATCH/DELETE the segment is named {handle}, but PUT does not resolve UUID-shaped handles to a row’s ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut’s id returns 400 validation_error (use PATCH /v1/shortcuts/{handle} to update by ID); UUID-shaped slugs that don’t collide are accepted as slugs.
Workspace API key (lora_sk_…) sent as Authorization: Bearer <api_key>. Each scoped operation names the scope it requires in its security requirement, for example shortcuts.write; a key without it receives 403 with code: insufficient_scope. GET /v1/qr also accepts anonymous requests and requires no scope.
The desired state of the shortcut at this slug. tagIds, aliases, and similar associations aren't accepted here — use POST /v1/shortcuts or PATCH /v1/shortcuts/{handle} for those.
Ordered routing rules, evaluated top to bottom — the first rule whose conditions all match wins. Conditions within a rule are ANDed; values within a condition are ORed. Visitors matching no rule get the shortcut's default destination. At most 10 rules. Pass [] or null to remove all rules.
Ordered routing rules, evaluated top to bottom — the first rule whose conditions all match wins. Conditions within a rule are ANDed; values within a condition are ORed. Visitors matching no rule get the shortcut's default destination.
The shortcut ID in your system. If set, it can identify the shortcut in future API requests. The ext_ prefix is recommended on query parameters for visual disambiguation, but the server accepts prefixed and bare values. This key is unique across your workspace.
Whether title and description are still kept in sync with the destination automatically, or have been overridden by hand. The screenshot's own sync state is previewSettings.source.
Resolved URL of the light preview image, or null when there is none. Usually the image described by previewSettings. It can also be set while previewSettings is null: a destination on a service Lora has brand art for falls back to a brand card, which is what a destination behind a login wall gets instead of a screenshot. Gate rendering on this field, not on previewSettings.assetId.
Short IDs of ADDITIONAL folders this shortcut appears in, excluding its primary folder (folderId). Empty array when it only lives in its primary folder. Settable at create; curate afterwards via the folder items endpoints. Folders you cannot see are omitted.
Stored destination screenshot for the hover preview. null when none has been resolved yet; source: "none" when the owner declined one. Use the resolved previewUrl / previewDarkUrl to render it — assetId, blobHost and format describe where and how the file is stored. format is jpeg for every preview stored today, and webp or png for older ones; blobHost is not accepted on a write.
Saved QR code design for this shortcut. null when the default design is used. Customization requires a paid plan.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Lora Developers","description":"Developer documentation for the Lora API — build on top of your team's shortcuts.","colors":{"primary":"#000000","light":"#FDFCFC","dark":"#0A0D0D"},"logo":{"light":"https://mintcdn.com/lora-5b5199e2/ryYQakwxVJhAxQjJ/logo/logo_light.svg?fit=max\u0026auto=format\u0026n=ryYQakwxVJhAxQjJ\u0026q=85\u0026s=a15e432f45994371977fd6392f2d6c77","dark":"https://mintcdn.com/lora-5b5199e2/ryYQakwxVJhAxQjJ/logo/logo_dark.svg?fit=max\u0026auto=format\u0026n=ryYQakwxVJhAxQjJ\u0026q=85\u0026s=fee365ef76905e13dfeb30ffcce0ec3b","href":"https://uselora.dev"},"favicon":"https://mintcdn.com/lora-5b5199e2/ryYQakwxVJhAxQjJ/favicon.svg?fit=max\u0026auto=format\u0026n=ryYQakwxVJhAxQjJ\u0026q=85\u0026s=fcbbf88d22a959468c499026c22b32d4","navbar":{"links":[{"href":"mailto:feedback@uselora.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.uselora.com"}},"footer":{"socials":{"website":"https://www.uselora.com"}},"fonts":{"family":"Inter"},"icons":{"library":"lucide"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lora-5b5199e2","hasAudioNarration":false,"actualSubdomain":"lora-5b5199e2","customDomains":["uselora.dev"],"gitSource":{"type":"github","owner":"jan10","repo":"lora","deployBranch":"main","contentDirectory":"apps/developers","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adb0d4979b24b77d1b955ff","collectionId":"11f6dbdf-fa2f-4f53-a3ff-f14ebba2e771","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adb0d4979b24b77d1b955ff"},"feedback":{"agentFeedback":true,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6adb0d4979b24b77d1b955ff","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"API Reference","count":22},{"language":"default","tag":"Folders","count":7},{"language":"default","tag":"Shortcuts","count":6},{"language":"default","tag":"Tags","count":5},{"language":"default","tag":"Lora API","count":3},{"language":"default","tag":"QR Codes","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/shortcuts/upsert-shortcut","slug":"/api-reference/shortcuts/upsert-shortcut","pageMetadata":{"title":"Upsert shortcut","description":"Creates a shortcut at the given slug, or updates the existing one. Returns `201` when a new shortcut is created and `200` when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with `GET`/`PATCH`/`DELETE` the segment is named `{handle}`, but PUT does not resolve UUID-shaped handles to a row's ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut's `id` returns `400 validation_error` (use `PATCH /v1/shortcuts/{handle}` to update by ID); UUID-shaped slugs that don't collide are accepted as slugs.","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/shortcuts/{handle}","href":"/api-reference/shortcuts/upsert-shortcut","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Creates a shortcut at the given slug, or updates the existing one. Returns \", _jsx(_components.code, {\n children: \"201\"\n }), \" when a new shortcut is created and \", _jsx(_components.code, {\n children: \"200\"\n }), \" when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with \", _jsx(_components.code, {\n children: \"GET\"\n }), \"/\", _jsx(_components.code, {\n children: \"PATCH\"\n }), \"/\", _jsx(_components.code, {\n children: \"DELETE\"\n }), \" the segment is named \", _jsx(_components.code, {\n children: \"{handle}\"\n }), \", but PUT does not resolve UUID-shaped handles to a row’s ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut’s \", _jsx(_components.code, {\n children: \"id\"\n }), \" returns \", _jsx(_components.code, {\n children: \"400 validation_error\"\n }), \" (use \", _jsx(_components.code, {\n children: \"PATCH /v1/shortcuts/{handle}\"\n }), \" to update by ID); UUID-shaped slugs that don’t collide are accepted as slugs.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Upsert shortcut","description":"Creates a shortcut at the given slug, or updates the existing one. Returns `201` when a new shortcut is created and `200` when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with `GET`/`PATCH`/`DELETE` the segment is named `{handle}`, but PUT does not resolve UUID-shaped handles to a row's ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut's `id` returns `400 validation_error` (use `PATCH /v1/shortcuts/{handle}` to update by ID); UUID-shaped slugs that don't collide are accepted as slugs.","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/shortcuts/{handle}","href":"/api-reference/shortcuts/upsert-shortcut","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"upsertShortcut","tags":["Shortcuts"],"summary":"Upsert shortcut","description":"Creates a shortcut at the given slug, or updates the existing one. Returns `201` when a new shortcut is created and `200` when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with `GET`/`PATCH`/`DELETE` the segment is named `{handle}`, but PUT does not resolve UUID-shaped handles to a row's ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut's `id` returns `400 validation_error` (use `PATCH /v1/shortcuts/{handle}` to update by ID); UUID-shaped slugs that don't collide are accepted as slugs.","parameters":["45233a15-0425-4721-ad09-a7166d6c3dd7"],"requestBody":"dad960d6-1244-4013-9097-3f175ab2959f","responses":{"200":"8f18b8ef-fb4e-4281-9fc1-04e9daa6df3c","201":"416f3b56-6497-4248-abea-a077d09ad13e","400":"e07877b3-e586-4b1b-bc43-b4f413cbcbe7","401":"0f822c2c-0f03-4915-bd15-f3fd368967a1","402":"39645adb-e4ee-4ada-b1e4-a4be417c893d","403":"18a10390-5934-45fa-b41f-ce79718573ad","404":"cd89e67e-7866-4a38-b10d-525022badd75","409":"a547a0e2-a95f-403f-9c41-b1b05d1605c9","413":"2e36d92e-e0c4-466c-8e11-db316efd3aca","429":"e4064a28-f435-4ea7-9719-3e2d9f2a9491","500":"5a6bc228-40d9-401c-8d41-263ae8a11449"},"security":["6cd256d3-d1d1-402e-b1c4-2169fe930093"],"method":"put","type":"path","servers":["e04fe8d2-b9b4-4716-96fe-7218328cbf2a"],"path":"/v1/shortcuts/{handle}","baseUrlOptions":["https://api.uselora.com"],"title":"Upsert shortcut","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"45233a15-0425-4721-ad09-a7166d6c3dd7":{"name":"handle","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"The shortcut's slug.","uniqueKey":"","typeLabel":"string"},"description":"The shortcut's slug."}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"destination":{"type":"string","minLength":1,"maxLength":32000,"description":"The shortcut's destination URL.","examples":["https://google.com","mailto:hello@example.com","tel:+1234567890","notion://workspace/page"],"isRequired":true,"uniqueKey":"destination","typeLabel":"string"},"title":{"oneOf":[{"description":"Optional title for the shortcut","type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"description":"Optional title for the shortcut","type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"description":{"oneOf":[{"description":"Optional description for the shortcut","type":"string","uniqueKey":"description.oneOf.0","typeLabel":"string"},{"description":"Optional description for the shortcut","type":"null","uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"visibility":{"description":"Visibility level. Omit to keep the current value when updating an existing shortcut, or to default to `WORKSPACE` when creating a new one.","type":"string","enum":["PRIVATE","WORKSPACE","UNLISTED"],"uniqueKey":"visibility","typeLabel":"enum\u003cstring>"},"masked":{"description":"Whether to mask the destination URL","default":false,"type":"boolean","uniqueKey":"masked","typeLabel":"boolean"},"password":{"oneOf":[{"type":"string","description":"The password required to access the destination URL of the shortcut.","format":"password","maxLength":256,"minLength":1,"uniqueKey":"password.oneOf.0","typeLabel":"string\u003cpassword>"},{"type":"string","description":"The password required to access the destination URL of the shortcut.","format":"password","const":"","uniqueKey":"password.oneOf.1","typeLabel":"string\u003cpassword>"}],"uniqueKey":"password","typeLabel":"string\u003cpassword>"},"expiresAt":{"oneOf":[{"description":"The date and time when the shortcut expires.","format":"date-time","type":"string","uniqueKey":"expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"description":"The date and time when the shortcut expires.","format":"date-time","type":"null","uniqueKey":"expiresAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"expiresAt","typeLabel":"string\u003cdate-time> | null"},"dynamicRouting":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"conditions":{"minItems":1,"maxItems":2,"type":"array","items":{"oneOf":[{"type":"object","title":"DynamicRoutingCondition","description":"One test against a visitor attribute. Values inside a condition are ORed.","required":["attribute","operator","values"],"properties":{"attribute":{"type":"string","const":"country","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.attribute","typeLabel":"string"},"operator":{"type":"string","enum":["is","is_not"],"description":"`is` matches when the visitor attribute is one of `values`; `is_not` matches when it is not. A visitor attribute we cannot determine (no geo signal, or a non-phone / unclassifiable user agent) never satisfies `is` and always satisfies `is_not`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.operator","typeLabel":"enum\u003cstring>"},"values":{"minItems":1,"maxItems":250,"type":"array","items":{"type":"string","pattern":"^[A-Za-z]{2}$","uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.values.items.[INDEX]","typeLabel":"string"},"description":"ISO-3166-1 alpha-2 country codes. Matched case-insensitively and stored uppercase.","examples":[["DE","AT","CH"]],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.values","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0","typeLabel":"DynamicRoutingCondition · object"},{"type":"object","title":"DynamicRoutingCondition","description":"One test against a visitor attribute. Values inside a condition are ORed.","required":["attribute","operator","values"],"properties":{"attribute":{"type":"string","const":"platform","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.attribute","typeLabel":"string"},"operator":{"type":"string","enum":["is","is_not"],"description":"`is` matches when the visitor attribute is one of `values`; `is_not` matches when it is not. A visitor attribute we cannot determine (no geo signal, or a non-phone / unclassifiable user agent) never satisfies `is` and always satisfies `is_not`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.operator","typeLabel":"enum\u003cstring>"},"values":{"minItems":1,"maxItems":2,"type":"array","items":{"type":"string","enum":["ios","android"],"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.values.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Phone platforms. Tablets, desktops and unclassifiable clients are not any of these — they fall through to `destination` unless an `is_not` condition catches them.","examples":[["ios"]],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.values","typeLabel":"enum\u003cstring>[]"}},"additionalProperties":false,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1","typeLabel":"DynamicRoutingCondition · object"}],"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX]","typeLabel":"DynamicRoutingCondition · object"},"description":"Conditions to satisfy, ANDed together. At most 2 — one per attribute.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions","typeLabel":"DynamicRoutingCondition · object[]"},"destination":{"type":"string","minLength":1,"maxLength":32000,"description":"Where to send visitors matching this rule. Same scheme rules as the shortcut's default `destination`, and dynamic placeholders work here too.","examples":["https://apps.apple.com/de/app/id123456789"],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].destination","typeLabel":"string"}},"required":["conditions","destination"],"additionalProperties":false,"title":"DynamicRoutingRule","description":"A set of ANDed conditions and the destination they select.","uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX]","typeLabel":"DynamicRoutingRule · object"},"title":"DynamicRouting","description":"Ordered routing rules, evaluated top to bottom — the first rule whose conditions all match wins. Conditions within a rule are ANDed; values within a condition are ORed. Visitors matching no rule get the shortcut's default `destination`. At most 10 rules. Pass `[]` or `null` to remove all rules.","maxItems":10,"uniqueKey":"dynamicRouting.oneOf.0","typeLabel":"DynamicRoutingRule · object[]"},{"type":"null","uniqueKey":"dynamicRouting.oneOf.1","typeLabel":"null"}],"uniqueKey":"dynamicRouting","typeLabel":"DynamicRoutingRule · object[] | null"},"folderId":{"description":"The 8-character ID of an existing folder to assign the shortcut to. Defaults to the workspace's default folder when omitted.","examples":["a1b2c3d4"],"type":"string","pattern":"^[0-9abcdefghjkmnpqrstvwxyz]{8}$","uniqueKey":"folderId","typeLabel":"string"}},"required":["destination"],"additionalProperties":false,"title":"UpsertShortcutRequest","description":"The desired state of the shortcut at this slug. `tagIds`, `aliases`, and similar associations aren't accepted here — use `POST /v1/shortcuts` or `PATCH /v1/shortcuts/{handle}` for those.","uniqueKey":"","typeLabel":"UpsertShortcutRequest · object"},"examples":{"Example":{"title":"Example","value":{"destination":"https://google.com","title":"\u003cstring>","description":"\u003cstring>","masked":false,"password":"\u003cstring>","expiresAt":"2023-11-07T05:31:56Z","dynamicRouting":[{"conditions":[{"attribute":"country","values":["DE","AT","CH"]}],"destination":"https://apps.apple.com/de/app/id123456789"}],"folderId":"a1b2c3d4"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"8f18b8ef-fb4e-4281-9fc1-04e9daa6df3c":{"description":"The existing shortcut at this slug was updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The shortcut's unique ID.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"slug":{"type":"string","description":"The shortcut slug.","isRequired":true,"uniqueKey":"slug","typeLabel":"string"},"url":{"type":"string","description":"Workspace-scoped shortcut URL. Open it to record a click and redirect to the destination.","examples":["https://app.uselora.com/acme/short/handbook"],"isRequired":true,"uniqueKey":"url","typeLabel":"string"},"destination":{"type":"string","description":"The shortcut's destination URL.","isRequired":true,"uniqueKey":"destination","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"title","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"icon":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"icon.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"icon.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"icon","typeLabel":"string | null"},"image":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"image.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"image.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"image","typeLabel":"string | null"},"video":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"video.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"video.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"video","typeLabel":"string | null"},"visibility":{"type":"string","enum":["PRIVATE","WORKSPACE","UNLISTED"],"isRequired":true,"uniqueKey":"visibility","typeLabel":"enum\u003cstring>"},"archived":{"type":"boolean","description":"Whether the shortcut is archived. Defaults to false if not provided.","isRequired":true,"uniqueKey":"archived","typeLabel":"boolean"},"masked":{"type":"boolean","isRequired":true,"uniqueKey":"masked","typeLabel":"boolean"},"passwordProtected":{"type":"boolean","description":"Whether this shortcut requires a password before redirecting. The password hash is never returned.","isRequired":true,"uniqueKey":"passwordProtected","typeLabel":"boolean"},"expiresAt":{"oneOf":[{"type":"string","description":"The date and time when the shortcut expires.","isRequired":true,"uniqueKey":"expiresAt.oneOf.0","typeLabel":"string"},{"type":"null","description":"The date and time when the shortcut expires.","isRequired":true,"uniqueKey":"expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expiresAt","typeLabel":"string | null"},"dynamicRouting":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"conditions":{"minItems":1,"maxItems":2,"type":"array","items":{"oneOf":[{"type":"object","title":"DynamicRoutingCondition","description":"One test against a visitor attribute. Values inside a condition are ORed.","required":["attribute","operator","values"],"properties":{"attribute":{"type":"string","const":"country","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.attribute","typeLabel":"string"},"operator":{"type":"string","enum":["is","is_not"],"description":"`is` matches when the visitor attribute is one of `values`; `is_not` matches when it is not. A visitor attribute we cannot determine (no geo signal, or a non-phone / unclassifiable user agent) never satisfies `is` and always satisfies `is_not`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.operator","typeLabel":"enum\u003cstring>"},"values":{"minItems":1,"maxItems":250,"type":"array","items":{"type":"string","pattern":"^[A-Za-z]{2}$","uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.values.items.[INDEX]","typeLabel":"string"},"description":"ISO-3166-1 alpha-2 country codes. Matched case-insensitively and stored uppercase.","examples":[["DE","AT","CH"]],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.values","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0","typeLabel":"DynamicRoutingCondition · object"},{"type":"object","title":"DynamicRoutingCondition","description":"One test against a visitor attribute. Values inside a condition are ORed.","required":["attribute","operator","values"],"properties":{"attribute":{"type":"string","const":"platform","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.attribute","typeLabel":"string"},"operator":{"type":"string","enum":["is","is_not"],"description":"`is` matches when the visitor attribute is one of `values`; `is_not` matches when it is not. A visitor attribute we cannot determine (no geo signal, or a non-phone / unclassifiable user agent) never satisfies `is` and always satisfies `is_not`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.operator","typeLabel":"enum\u003cstring>"},"values":{"minItems":1,"maxItems":2,"type":"array","items":{"type":"string","enum":["ios","android"],"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.values.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Phone platforms. Tablets, desktops and unclassifiable clients are not any of these — they fall through to `destination` unless an `is_not` condition catches them.","examples":[["ios"]],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.values","typeLabel":"enum\u003cstring>[]"}},"additionalProperties":false,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1","typeLabel":"DynamicRoutingCondition · object"}],"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX]","typeLabel":"DynamicRoutingCondition · object"},"description":"Conditions to satisfy, ANDed together. At most 2 — one per attribute.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions","typeLabel":"DynamicRoutingCondition · object[]"},"destination":{"type":"string","minLength":1,"maxLength":32000,"description":"Where to send visitors matching this rule. Same scheme rules as the shortcut's default `destination`, and dynamic placeholders work here too.","examples":["https://apps.apple.com/de/app/id123456789"],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].destination","typeLabel":"string"}},"required":["conditions","destination"],"additionalProperties":false,"title":"DynamicRoutingRule","description":"A set of ANDed conditions and the destination they select.","uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX]","typeLabel":"DynamicRoutingRule · object"},"title":"DynamicRouting","description":"Ordered routing rules, evaluated top to bottom — the first rule whose conditions all match wins. Conditions within a rule are ANDed; values within a condition are ORed. Visitors matching no rule get the shortcut's default `destination`.","maxItems":10,"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0","typeLabel":"DynamicRoutingRule · object[]"},{"type":"null","description":"Ordered routing rules, evaluated top to bottom — the first rule whose conditions all match wins. Conditions within a rule are ANDed; values within a condition are ORed. Visitors matching no rule get the shortcut's default `destination`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dynamicRouting","typeLabel":"DynamicRoutingRule · object[] | null"},"placeholders":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Placeholder name (between curly braces).","isRequired":true,"uniqueKey":"placeholders.items.[INDEX].name","typeLabel":"string"},"default":{"oneOf":[{"description":"Default value substituted when no value is captured at click time.","type":"string","isRequired":true,"uniqueKey":"placeholders.items.[INDEX].default.oneOf.0","typeLabel":"string"},{"description":"Default value substituted when no value is captured at click time.","type":"null","isRequired":true,"uniqueKey":"placeholders.items.[INDEX].default.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"placeholders.items.[INDEX].default","typeLabel":"string | null"}},"required":["name","default"],"additionalProperties":false,"title":"PlaceholderDescriptor","description":"A dynamic placeholder declared in a shortcut's destination URL.","uniqueKey":"placeholders.items.[INDEX]","typeLabel":"PlaceholderDescriptor · object"},"description":"Dynamic placeholders parsed from the destination URL, in template order (e.g. `{query}`). Empty for static destinations.","isRequired":true,"uniqueKey":"placeholders","typeLabel":"PlaceholderDescriptor · object[]"},"folderId":{"type":"string","pattern":"^[0-9abcdefghjkmnpqrstvwxyz]{8}$","description":"The 8-character ID of the folder this shortcut belongs to.","examples":["a1b2c3d4"],"isRequired":true,"uniqueKey":"folderId","typeLabel":"string"},"tagIds":{"default":[],"description":"The unique IDs of the tags assigned to the shortcut.","examples":[["a1b2c3d4"]],"type":"array","items":{"type":"string","pattern":"^[0-9abcdefghjkmnpqrstvwxyz]{8}$","uniqueKey":"tagIds.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"tagIds","typeLabel":"string[]"},"aliases":{"default":[],"description":"Additional handles that resolve to this shortcut in the same namespace as the canonical slug.","examples":[["urlaub","ferien"]],"type":"array","items":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9]([a-z0-9-_]*[a-z0-9])?$","uniqueKey":"aliases.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"aliases","typeLabel":"string[]"},"externalId":{"oneOf":[{"type":"string","description":"The shortcut ID in your system. If set, it can identify the shortcut in future API requests. The `ext_` prefix is recommended on query parameters for visual disambiguation, but the server accepts prefixed and bare values. This key is unique across your workspace.","isRequired":true,"uniqueKey":"externalId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The shortcut ID in your system. If set, it can identify the shortcut in future API requests. The `ext_` prefix is recommended on query parameters for visual disambiguation, but the server accepts prefixed and bare values. This key is unique across your workspace.","isRequired":true,"uniqueKey":"externalId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"externalId","typeLabel":"string | null"},"tenantId":{"oneOf":[{"type":"string","description":"The ID of the tenant that created the shortcut in your system. If set, it can be used to fetch all shortcuts for a tenant.","isRequired":true,"uniqueKey":"tenantId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the tenant that created the shortcut in your system. If set, it can be used to fetch all shortcuts for a tenant.","isRequired":true,"uniqueKey":"tenantId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tenantId","typeLabel":"string | null"},"comments":{"oneOf":[{"type":"string","description":"Comments about the shortcut.","isRequired":true,"uniqueKey":"comments.oneOf.0","typeLabel":"string"},{"type":"null","description":"Comments about the shortcut.","isRequired":true,"uniqueKey":"comments.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"comments","typeLabel":"string | null"},"workspaceId":{"type":"string","description":"ID of the workspace the shortcut belongs to.","isRequired":true,"uniqueKey":"workspaceId","typeLabel":"string"},"userId":{"type":"string","description":"ID of the user who created the shortcut.","isRequired":true,"uniqueKey":"userId","typeLabel":"string"},"createdAt":{"type":"string","description":"ISO 8601 creation timestamp.","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp of the last update.","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string"},"metadataSync":{"type":"object","properties":{"description":{"type":"string","enum":["auto","manual"],"isRequired":true,"uniqueKey":"metadataSync.description","typeLabel":"enum\u003cstring>"},"title":{"type":"string","enum":["auto","manual"],"isRequired":true,"uniqueKey":"metadataSync.title","typeLabel":"enum\u003cstring>"}},"required":["description","title"],"additionalProperties":false,"description":"Whether `title` and `description` are still kept in sync with the destination automatically, or have been overridden by hand. The screenshot's own sync state is `previewSettings.source`.","isRequired":true,"uniqueKey":"metadataSync","typeLabel":"object"},"previewUrl":{"oneOf":[{"description":"Resolved URL of the light preview image, or `null` when there is none. Usually the image described by `previewSettings`. It can also be set while `previewSettings` is `null`: a destination on a service Lora has brand art for falls back to a brand card, which is what a destination behind a login wall gets instead of a screenshot. Gate rendering on this field, not on `previewSettings.assetId`.","type":"string","isRequired":true,"uniqueKey":"previewUrl.oneOf.0","typeLabel":"string"},{"description":"Resolved URL of the light preview image, or `null` when there is none. Usually the image described by `previewSettings`. It can also be set while `previewSettings` is `null`: a destination on a service Lora has brand art for falls back to a brand card, which is what a destination behind a login wall gets instead of a screenshot. Gate rendering on this field, not on `previewSettings.assetId`.","type":"null","isRequired":true,"uniqueKey":"previewUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewUrl","typeLabel":"string | null"},"previewDarkUrl":{"oneOf":[{"description":"Resolved URL of the dark preview image, or `null` when the preview has no dark variant. Always `null` when `previewUrl` is a brand card.","type":"string","isRequired":true,"uniqueKey":"previewDarkUrl.oneOf.0","typeLabel":"string"},{"description":"Resolved URL of the dark preview image, or `null` when the preview has no dark variant. Always `null` when `previewUrl` is a brand card.","type":"null","isRequired":true,"uniqueKey":"previewDarkUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewDarkUrl","typeLabel":"string | null"},"additionalFolderIds":{"default":[],"description":"Short IDs of ADDITIONAL folders this shortcut appears in, excluding its primary folder (`folderId`). Empty array when it only lives in its primary folder. Settable at create; curate afterwards via the folder items endpoints. Folders you cannot see are omitted.","examples":[["a1b2c3d4"]],"type":"array","items":{"type":"string","pattern":"^[0-9abcdefghjkmnpqrstvwxyz]{8}$","uniqueKey":"additionalFolderIds.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"additionalFolderIds","typeLabel":"string[]"},"iconSettings":{"oneOf":[{"description":"Structured icon recipe (glyph + background). `null` when the default monogram-on-neutral design is used.","type":"object","properties":{"background":{"type":"object","properties":{"color":{"oneOf":[{"type":"string","pattern":"^#[0-9A-F]{6}$","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.color.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^#[0-9A-F]{6}$","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.color.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.color","typeLabel":"string | null"},"type":{"type":"string","enum":["color","neutral"],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.type","typeLabel":"enum\u003cstring>"}},"required":["color","type"],"additionalProperties":false,"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background","typeLabel":"object"},"glyph":{"type":"object","properties":{"ref":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.ref.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.ref.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.ref","typeLabel":"string | null"},"source":{"type":"string","enum":["favicon","monogram","upload"],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.source","typeLabel":"enum\u003cstring>"},"variant":{"type":"string","enum":["color","mono"],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.variant","typeLabel":"enum\u003cstring>"}},"required":["ref","source","variant"],"additionalProperties":false,"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph","typeLabel":"object"}},"required":["background","glyph"],"additionalProperties":false,"uniqueKey":"iconSettings.oneOf.0","typeLabel":"object"},{"description":"Structured icon recipe (glyph + background). `null` when the default monogram-on-neutral design is used.","type":"null","properties":{"background":{"type":"object","properties":{"color":{"oneOf":[{"type":"string","pattern":"^#[0-9A-F]{6}$"},{"type":"null","pattern":"^#[0-9A-F]{6}$"}]},"type":{"type":"string","enum":["color","neutral"]}},"required":["color","type"],"additionalProperties":false},"glyph":{"type":"object","properties":{"ref":{"oneOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","enum":["favicon","monogram","upload"]},"variant":{"type":"string","enum":["color","mono"]}},"required":["ref","source","variant"],"additionalProperties":false}},"required":["background","glyph"],"additionalProperties":false,"uniqueKey":"iconSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"iconSettings","typeLabel":"object | null"},"previewSettings":{"oneOf":[{"description":"Stored destination screenshot for the hover preview. `null` when none has been resolved yet; `source: \"none\"` when the owner declined one. Use the resolved `previewUrl` / `previewDarkUrl` to render it — `assetId`, `blobHost` and `format` describe where and how the file is stored. `format` is `jpeg` for every preview stored today, and `webp` or `png` for older ones; `blobHost` is not accepted on a write.","type":"object","properties":{"assetId":{"oneOf":[{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.assetId.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.assetId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.assetId","typeLabel":"string | null"},"blobHost":{"oneOf":[{"type":"string","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.blobHost.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.blobHost.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.blobHost","typeLabel":"string | null"},"capturedAt":{"oneOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedAt","typeLabel":"string\u003cdate-time> | null"},"capturedFor":{"oneOf":[{"type":"string","maxLength":32000,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedFor.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":32000,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedFor.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedFor","typeLabel":"string | null"},"format":{"oneOf":[{"type":"string","enum":["jpeg","webp","png",null],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.format.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["jpeg","webp","png",null],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.format.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.format","typeLabel":"enum\u003cstring> | null"},"hasDark":{"type":"boolean","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.hasDark","typeLabel":"boolean"},"height":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.height.oneOf.0","typeLabel":"integer"},{"type":"null","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.height.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.height","typeLabel":"integer | null"},"source":{"type":"string","enum":["screenshot","opengraph","upload","none"],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.source","typeLabel":"enum\u003cstring>"},"width":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.width.oneOf.0","typeLabel":"integer"},{"type":"null","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.width.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.width","typeLabel":"integer | null"}},"required":["assetId","blobHost","capturedAt","capturedFor","format","hasDark","height","source","width"],"additionalProperties":false,"uniqueKey":"previewSettings.oneOf.0","typeLabel":"object"},{"description":"Stored destination screenshot for the hover preview. `null` when none has been resolved yet; `source: \"none\"` when the owner declined one. Use the resolved `previewUrl` / `previewDarkUrl` to render it — `assetId`, `blobHost` and `format` describe where and how the file is stored. `format` is `jpeg` for every preview stored today, and `webp` or `png` for older ones; `blobHost` is not accepted on a write.","type":"null","properties":{"assetId":{"oneOf":[{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},{"type":"null","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}]},"blobHost":{"oneOf":[{"type":"string","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$"},{"type":"null","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$"}]},"capturedAt":{"oneOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}]},"capturedFor":{"oneOf":[{"type":"string","maxLength":32000},{"type":"null","maxLength":32000}]},"format":{"oneOf":[{"type":"string","enum":["jpeg","webp","png",null]},{"type":"null","enum":["jpeg","webp","png",null]}]},"hasDark":{"type":"boolean"},"height":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560},{"type":"null","exclusiveMinimum":0,"maximum":2560}]},"source":{"type":"string","enum":["screenshot","opengraph","upload","none"]},"width":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560},{"type":"null","exclusiveMinimum":0,"maximum":2560}]}},"required":["assetId","blobHost","capturedAt","capturedFor","format","hasDark","height","source","width"],"additionalProperties":false,"uniqueKey":"previewSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"previewSettings","typeLabel":"object | null"},"qrSettings":{"oneOf":[{"description":"Saved QR code design for this shortcut. `null` when the default design is used. Customization requires a paid plan.","type":"object","properties":{"dotColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","uniqueKey":"qrSettings.oneOf.0.dotColor","typeLabel":"string"},"dotStyle":{"type":"string","enum":["square","dots","rounded"],"uniqueKey":"qrSettings.oneOf.0.dotStyle","typeLabel":"enum\u003cstring>"},"frame":{"type":"string","enum":["none","solid-logo","solid-scan","solid-slug","window-logo","window-scan","window-slug","card-logo","card-scan","card-slug"],"uniqueKey":"qrSettings.oneOf.0.frame","typeLabel":"enum\u003cstring>"},"hideLogo":{"type":"boolean","uniqueKey":"qrSettings.oneOf.0.hideLogo","typeLabel":"boolean"},"markerBorder":{"type":"string","enum":["square","rounded","circle"],"uniqueKey":"qrSettings.oneOf.0.markerBorder","typeLabel":"enum\u003cstring>"},"markerCenter":{"type":"string","enum":["square","dot"],"uniqueKey":"qrSettings.oneOf.0.markerCenter","typeLabel":"enum\u003cstring>"},"markerColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","uniqueKey":"qrSettings.oneOf.0.markerColor","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"qrSettings.oneOf.0","typeLabel":"object"},{"description":"Saved QR code design for this shortcut. `null` when the default design is used. Customization requires a paid plan.","type":"null","properties":{"dotColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},"dotStyle":{"type":"string","enum":["square","dots","rounded"]},"frame":{"type":"string","enum":["none","solid-logo","solid-scan","solid-slug","window-logo","window-scan","window-slug","card-logo","card-scan","card-slug"]},"hideLogo":{"type":"boolean"},"markerBorder":{"type":"string","enum":["square","rounded","circle"]},"markerCenter":{"type":"string","enum":["square","dot"]},"markerColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"}},"additionalProperties":false,"uniqueKey":"qrSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"qrSettings","typeLabel":"object | null"}},"required":["archived","comments","createdAt","description","destination","dynamicRouting","expiresAt","externalId","folderId","icon","id","image","masked","metadataSync","slug","tenantId","title","updatedAt","userId","video","visibility","workspaceId","passwordProtected","previewUrl","previewDarkUrl","url","placeholders","tagIds","additionalFolderIds","aliases"],"additionalProperties":false,"title":"Shortcut","description":"A shortcut.","uniqueKey":"","typeLabel":"Shortcut · object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","slug":"\u003cstring>","url":"https://app.uselora.com/acme/short/handbook","destination":"\u003cstring>","title":"\u003cstring>","description":"\u003cstring>","icon":"\u003cstring>","image":"\u003cstring>","video":"\u003cstring>","visibility":"PRIVATE","archived":true,"masked":true,"passwordProtected":true,"expiresAt":"\u003cstring>","dynamicRouting":[{"conditions":[{"attribute":"country","operator":"is","values":["DE","AT","CH"]}],"destination":"https://apps.apple.com/de/app/id123456789"}],"placeholders":[{"name":"\u003cstring>","default":"\u003cstring>"}],"folderId":"a1b2c3d4","tagIds":["a1b2c3d4"],"aliases":["urlaub","ferien"],"externalId":"\u003cstring>","tenantId":"\u003cstring>","comments":"\u003cstring>","workspaceId":"\u003cstring>","userId":"\u003cstring>","createdAt":"\u003cstring>","updatedAt":"\u003cstring>","metadataSync":{"description":"auto","title":"auto"},"previewUrl":"\u003cstring>","previewDarkUrl":"\u003cstring>","additionalFolderIds":["a1b2c3d4"],"iconSettings":{"background":{"color":"\u003cstring>","type":"color"},"glyph":{"ref":"\u003cstring>","source":"favicon","variant":"color"}},"previewSettings":{"assetId":"\u003cstring>","blobHost":"\u003cstring>","capturedAt":"2023-11-07T05:31:56Z","capturedFor":"\u003cstring>","format":"jpeg","hasDark":true,"height":123,"source":"screenshot","width":123},"qrSettings":{"dotColor":"\u003cstring>","dotStyle":"square","frame":"none","hideLogo":true,"markerBorder":"square","markerCenter":"square","markerColor":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"416f3b56-6497-4248-abea-a077d09ad13e":{"description":"A new shortcut was created at this slug.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The shortcut's unique ID.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"slug":{"type":"string","description":"The shortcut slug.","isRequired":true,"uniqueKey":"slug","typeLabel":"string"},"url":{"type":"string","description":"Workspace-scoped shortcut URL. Open it to record a click and redirect to the destination.","examples":["https://app.uselora.com/acme/short/handbook"],"isRequired":true,"uniqueKey":"url","typeLabel":"string"},"destination":{"type":"string","description":"The shortcut's destination URL.","isRequired":true,"uniqueKey":"destination","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"title","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"icon":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"icon.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"icon.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"icon","typeLabel":"string | null"},"image":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"image.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"image.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"image","typeLabel":"string | null"},"video":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"video.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"video.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"video","typeLabel":"string | null"},"visibility":{"type":"string","enum":["PRIVATE","WORKSPACE","UNLISTED"],"isRequired":true,"uniqueKey":"visibility","typeLabel":"enum\u003cstring>"},"archived":{"type":"boolean","description":"Whether the shortcut is archived. Defaults to false if not provided.","isRequired":true,"uniqueKey":"archived","typeLabel":"boolean"},"masked":{"type":"boolean","isRequired":true,"uniqueKey":"masked","typeLabel":"boolean"},"passwordProtected":{"type":"boolean","description":"Whether this shortcut requires a password before redirecting. The password hash is never returned.","isRequired":true,"uniqueKey":"passwordProtected","typeLabel":"boolean"},"expiresAt":{"oneOf":[{"type":"string","description":"The date and time when the shortcut expires.","isRequired":true,"uniqueKey":"expiresAt.oneOf.0","typeLabel":"string"},{"type":"null","description":"The date and time when the shortcut expires.","isRequired":true,"uniqueKey":"expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expiresAt","typeLabel":"string | null"},"dynamicRouting":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"conditions":{"minItems":1,"maxItems":2,"type":"array","items":{"oneOf":[{"type":"object","title":"DynamicRoutingCondition","description":"One test against a visitor attribute. Values inside a condition are ORed.","required":["attribute","operator","values"],"properties":{"attribute":{"type":"string","const":"country","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.attribute","typeLabel":"string"},"operator":{"type":"string","enum":["is","is_not"],"description":"`is` matches when the visitor attribute is one of `values`; `is_not` matches when it is not. A visitor attribute we cannot determine (no geo signal, or a non-phone / unclassifiable user agent) never satisfies `is` and always satisfies `is_not`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.operator","typeLabel":"enum\u003cstring>"},"values":{"minItems":1,"maxItems":250,"type":"array","items":{"type":"string","pattern":"^[A-Za-z]{2}$","uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.values.items.[INDEX]","typeLabel":"string"},"description":"ISO-3166-1 alpha-2 country codes. Matched case-insensitively and stored uppercase.","examples":[["DE","AT","CH"]],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0.values","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.0","typeLabel":"DynamicRoutingCondition · object"},{"type":"object","title":"DynamicRoutingCondition","description":"One test against a visitor attribute. Values inside a condition are ORed.","required":["attribute","operator","values"],"properties":{"attribute":{"type":"string","const":"platform","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.attribute","typeLabel":"string"},"operator":{"type":"string","enum":["is","is_not"],"description":"`is` matches when the visitor attribute is one of `values`; `is_not` matches when it is not. A visitor attribute we cannot determine (no geo signal, or a non-phone / unclassifiable user agent) never satisfies `is` and always satisfies `is_not`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.operator","typeLabel":"enum\u003cstring>"},"values":{"minItems":1,"maxItems":2,"type":"array","items":{"type":"string","enum":["ios","android"],"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.values.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Phone platforms. Tablets, desktops and unclassifiable clients are not any of these — they fall through to `destination` unless an `is_not` condition catches them.","examples":[["ios"]],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1.values","typeLabel":"enum\u003cstring>[]"}},"additionalProperties":false,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX].oneOf.1","typeLabel":"DynamicRoutingCondition · object"}],"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions.items.[INDEX]","typeLabel":"DynamicRoutingCondition · object"},"description":"Conditions to satisfy, ANDed together. At most 2 — one per attribute.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].conditions","typeLabel":"DynamicRoutingCondition · object[]"},"destination":{"type":"string","minLength":1,"maxLength":32000,"description":"Where to send visitors matching this rule. Same scheme rules as the shortcut's default `destination`, and dynamic placeholders work here too.","examples":["https://apps.apple.com/de/app/id123456789"],"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX].destination","typeLabel":"string"}},"required":["conditions","destination"],"additionalProperties":false,"title":"DynamicRoutingRule","description":"A set of ANDed conditions and the destination they select.","uniqueKey":"dynamicRouting.oneOf.0.items.[INDEX]","typeLabel":"DynamicRoutingRule · object"},"title":"DynamicRouting","description":"Ordered routing rules, evaluated top to bottom — the first rule whose conditions all match wins. Conditions within a rule are ANDed; values within a condition are ORed. Visitors matching no rule get the shortcut's default `destination`.","maxItems":10,"isRequired":true,"uniqueKey":"dynamicRouting.oneOf.0","typeLabel":"DynamicRoutingRule · object[]"},{"type":"null","description":"Ordered routing rules, evaluated top to bottom — the first rule whose conditions all match wins. Conditions within a rule are ANDed; values within a condition are ORed. Visitors matching no rule get the shortcut's default `destination`.","isRequired":true,"uniqueKey":"dynamicRouting.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dynamicRouting","typeLabel":"DynamicRoutingRule · object[] | null"},"placeholders":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Placeholder name (between curly braces).","isRequired":true,"uniqueKey":"placeholders.items.[INDEX].name","typeLabel":"string"},"default":{"oneOf":[{"description":"Default value substituted when no value is captured at click time.","type":"string","isRequired":true,"uniqueKey":"placeholders.items.[INDEX].default.oneOf.0","typeLabel":"string"},{"description":"Default value substituted when no value is captured at click time.","type":"null","isRequired":true,"uniqueKey":"placeholders.items.[INDEX].default.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"placeholders.items.[INDEX].default","typeLabel":"string | null"}},"required":["name","default"],"additionalProperties":false,"title":"PlaceholderDescriptor","description":"A dynamic placeholder declared in a shortcut's destination URL.","uniqueKey":"placeholders.items.[INDEX]","typeLabel":"PlaceholderDescriptor · object"},"description":"Dynamic placeholders parsed from the destination URL, in template order (e.g. `{query}`). Empty for static destinations.","isRequired":true,"uniqueKey":"placeholders","typeLabel":"PlaceholderDescriptor · object[]"},"folderId":{"type":"string","pattern":"^[0-9abcdefghjkmnpqrstvwxyz]{8}$","description":"The 8-character ID of the folder this shortcut belongs to.","examples":["a1b2c3d4"],"isRequired":true,"uniqueKey":"folderId","typeLabel":"string"},"tagIds":{"default":[],"description":"The unique IDs of the tags assigned to the shortcut.","examples":[["a1b2c3d4"]],"type":"array","items":{"type":"string","pattern":"^[0-9abcdefghjkmnpqrstvwxyz]{8}$","uniqueKey":"tagIds.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"tagIds","typeLabel":"string[]"},"aliases":{"default":[],"description":"Additional handles that resolve to this shortcut in the same namespace as the canonical slug.","examples":[["urlaub","ferien"]],"type":"array","items":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9]([a-z0-9-_]*[a-z0-9])?$","uniqueKey":"aliases.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"aliases","typeLabel":"string[]"},"externalId":{"oneOf":[{"type":"string","description":"The shortcut ID in your system. If set, it can identify the shortcut in future API requests. The `ext_` prefix is recommended on query parameters for visual disambiguation, but the server accepts prefixed and bare values. This key is unique across your workspace.","isRequired":true,"uniqueKey":"externalId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The shortcut ID in your system. If set, it can identify the shortcut in future API requests. The `ext_` prefix is recommended on query parameters for visual disambiguation, but the server accepts prefixed and bare values. This key is unique across your workspace.","isRequired":true,"uniqueKey":"externalId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"externalId","typeLabel":"string | null"},"tenantId":{"oneOf":[{"type":"string","description":"The ID of the tenant that created the shortcut in your system. If set, it can be used to fetch all shortcuts for a tenant.","isRequired":true,"uniqueKey":"tenantId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the tenant that created the shortcut in your system. If set, it can be used to fetch all shortcuts for a tenant.","isRequired":true,"uniqueKey":"tenantId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tenantId","typeLabel":"string | null"},"comments":{"oneOf":[{"type":"string","description":"Comments about the shortcut.","isRequired":true,"uniqueKey":"comments.oneOf.0","typeLabel":"string"},{"type":"null","description":"Comments about the shortcut.","isRequired":true,"uniqueKey":"comments.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"comments","typeLabel":"string | null"},"workspaceId":{"type":"string","description":"ID of the workspace the shortcut belongs to.","isRequired":true,"uniqueKey":"workspaceId","typeLabel":"string"},"userId":{"type":"string","description":"ID of the user who created the shortcut.","isRequired":true,"uniqueKey":"userId","typeLabel":"string"},"createdAt":{"type":"string","description":"ISO 8601 creation timestamp.","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string"},"updatedAt":{"type":"string","description":"ISO 8601 timestamp of the last update.","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string"},"metadataSync":{"type":"object","properties":{"description":{"type":"string","enum":["auto","manual"],"isRequired":true,"uniqueKey":"metadataSync.description","typeLabel":"enum\u003cstring>"},"title":{"type":"string","enum":["auto","manual"],"isRequired":true,"uniqueKey":"metadataSync.title","typeLabel":"enum\u003cstring>"}},"required":["description","title"],"additionalProperties":false,"description":"Whether `title` and `description` are still kept in sync with the destination automatically, or have been overridden by hand. The screenshot's own sync state is `previewSettings.source`.","isRequired":true,"uniqueKey":"metadataSync","typeLabel":"object"},"previewUrl":{"oneOf":[{"description":"Resolved URL of the light preview image, or `null` when there is none. Usually the image described by `previewSettings`. It can also be set while `previewSettings` is `null`: a destination on a service Lora has brand art for falls back to a brand card, which is what a destination behind a login wall gets instead of a screenshot. Gate rendering on this field, not on `previewSettings.assetId`.","type":"string","isRequired":true,"uniqueKey":"previewUrl.oneOf.0","typeLabel":"string"},{"description":"Resolved URL of the light preview image, or `null` when there is none. Usually the image described by `previewSettings`. It can also be set while `previewSettings` is `null`: a destination on a service Lora has brand art for falls back to a brand card, which is what a destination behind a login wall gets instead of a screenshot. Gate rendering on this field, not on `previewSettings.assetId`.","type":"null","isRequired":true,"uniqueKey":"previewUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewUrl","typeLabel":"string | null"},"previewDarkUrl":{"oneOf":[{"description":"Resolved URL of the dark preview image, or `null` when the preview has no dark variant. Always `null` when `previewUrl` is a brand card.","type":"string","isRequired":true,"uniqueKey":"previewDarkUrl.oneOf.0","typeLabel":"string"},{"description":"Resolved URL of the dark preview image, or `null` when the preview has no dark variant. Always `null` when `previewUrl` is a brand card.","type":"null","isRequired":true,"uniqueKey":"previewDarkUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewDarkUrl","typeLabel":"string | null"},"additionalFolderIds":{"default":[],"description":"Short IDs of ADDITIONAL folders this shortcut appears in, excluding its primary folder (`folderId`). Empty array when it only lives in its primary folder. Settable at create; curate afterwards via the folder items endpoints. Folders you cannot see are omitted.","examples":[["a1b2c3d4"]],"type":"array","items":{"type":"string","pattern":"^[0-9abcdefghjkmnpqrstvwxyz]{8}$","uniqueKey":"additionalFolderIds.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"additionalFolderIds","typeLabel":"string[]"},"iconSettings":{"oneOf":[{"description":"Structured icon recipe (glyph + background). `null` when the default monogram-on-neutral design is used.","type":"object","properties":{"background":{"type":"object","properties":{"color":{"oneOf":[{"type":"string","pattern":"^#[0-9A-F]{6}$","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.color.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^#[0-9A-F]{6}$","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.color.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.color","typeLabel":"string | null"},"type":{"type":"string","enum":["color","neutral"],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background.type","typeLabel":"enum\u003cstring>"}},"required":["color","type"],"additionalProperties":false,"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.background","typeLabel":"object"},"glyph":{"type":"object","properties":{"ref":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.ref.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.ref.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.ref","typeLabel":"string | null"},"source":{"type":"string","enum":["favicon","monogram","upload"],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.source","typeLabel":"enum\u003cstring>"},"variant":{"type":"string","enum":["color","mono"],"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph.variant","typeLabel":"enum\u003cstring>"}},"required":["ref","source","variant"],"additionalProperties":false,"isRequired":true,"uniqueKey":"iconSettings.oneOf.0.glyph","typeLabel":"object"}},"required":["background","glyph"],"additionalProperties":false,"uniqueKey":"iconSettings.oneOf.0","typeLabel":"object"},{"description":"Structured icon recipe (glyph + background). `null` when the default monogram-on-neutral design is used.","type":"null","properties":{"background":{"type":"object","properties":{"color":{"oneOf":[{"type":"string","pattern":"^#[0-9A-F]{6}$"},{"type":"null","pattern":"^#[0-9A-F]{6}$"}]},"type":{"type":"string","enum":["color","neutral"]}},"required":["color","type"],"additionalProperties":false},"glyph":{"type":"object","properties":{"ref":{"oneOf":[{"type":"string"},{"type":"null"}]},"source":{"type":"string","enum":["favicon","monogram","upload"]},"variant":{"type":"string","enum":["color","mono"]}},"required":["ref","source","variant"],"additionalProperties":false}},"required":["background","glyph"],"additionalProperties":false,"uniqueKey":"iconSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"iconSettings","typeLabel":"object | null"},"previewSettings":{"oneOf":[{"description":"Stored destination screenshot for the hover preview. `null` when none has been resolved yet; `source: \"none\"` when the owner declined one. Use the resolved `previewUrl` / `previewDarkUrl` to render it — `assetId`, `blobHost` and `format` describe where and how the file is stored. `format` is `jpeg` for every preview stored today, and `webp` or `png` for older ones; `blobHost` is not accepted on a write.","type":"object","properties":{"assetId":{"oneOf":[{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.assetId.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.assetId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.assetId","typeLabel":"string | null"},"blobHost":{"oneOf":[{"type":"string","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.blobHost.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.blobHost.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.blobHost","typeLabel":"string | null"},"capturedAt":{"oneOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedAt","typeLabel":"string\u003cdate-time> | null"},"capturedFor":{"oneOf":[{"type":"string","maxLength":32000,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedFor.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":32000,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedFor.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.capturedFor","typeLabel":"string | null"},"format":{"oneOf":[{"type":"string","enum":["jpeg","webp","png",null],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.format.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["jpeg","webp","png",null],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.format.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.format","typeLabel":"enum\u003cstring> | null"},"hasDark":{"type":"boolean","isRequired":true,"uniqueKey":"previewSettings.oneOf.0.hasDark","typeLabel":"boolean"},"height":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.height.oneOf.0","typeLabel":"integer"},{"type":"null","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.height.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.height","typeLabel":"integer | null"},"source":{"type":"string","enum":["screenshot","opengraph","upload","none"],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.source","typeLabel":"enum\u003cstring>"},"width":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.width.oneOf.0","typeLabel":"integer"},{"type":"null","exclusiveMinimum":0,"maximum":2560,"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.width.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"previewSettings.oneOf.0.width","typeLabel":"integer | null"}},"required":["assetId","blobHost","capturedAt","capturedFor","format","hasDark","height","source","width"],"additionalProperties":false,"uniqueKey":"previewSettings.oneOf.0","typeLabel":"object"},{"description":"Stored destination screenshot for the hover preview. `null` when none has been resolved yet; `source: \"none\"` when the owner declined one. Use the resolved `previewUrl` / `previewDarkUrl` to render it — `assetId`, `blobHost` and `format` describe where and how the file is stored. `format` is `jpeg` for every preview stored today, and `webp` or `png` for older ones; `blobHost` is not accepted on a write.","type":"null","properties":{"assetId":{"oneOf":[{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},{"type":"null","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}]},"blobHost":{"oneOf":[{"type":"string","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$"},{"type":"null","maxLength":253,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+(?::\\d{1,5})?$"}]},"capturedAt":{"oneOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}]},"capturedFor":{"oneOf":[{"type":"string","maxLength":32000},{"type":"null","maxLength":32000}]},"format":{"oneOf":[{"type":"string","enum":["jpeg","webp","png",null]},{"type":"null","enum":["jpeg","webp","png",null]}]},"hasDark":{"type":"boolean"},"height":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560},{"type":"null","exclusiveMinimum":0,"maximum":2560}]},"source":{"type":"string","enum":["screenshot","opengraph","upload","none"]},"width":{"oneOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2560},{"type":"null","exclusiveMinimum":0,"maximum":2560}]}},"required":["assetId","blobHost","capturedAt","capturedFor","format","hasDark","height","source","width"],"additionalProperties":false,"uniqueKey":"previewSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"previewSettings","typeLabel":"object | null"},"qrSettings":{"oneOf":[{"description":"Saved QR code design for this shortcut. `null` when the default design is used. Customization requires a paid plan.","type":"object","properties":{"dotColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","uniqueKey":"qrSettings.oneOf.0.dotColor","typeLabel":"string"},"dotStyle":{"type":"string","enum":["square","dots","rounded"],"uniqueKey":"qrSettings.oneOf.0.dotStyle","typeLabel":"enum\u003cstring>"},"frame":{"type":"string","enum":["none","solid-logo","solid-scan","solid-slug","window-logo","window-scan","window-slug","card-logo","card-scan","card-slug"],"uniqueKey":"qrSettings.oneOf.0.frame","typeLabel":"enum\u003cstring>"},"hideLogo":{"type":"boolean","uniqueKey":"qrSettings.oneOf.0.hideLogo","typeLabel":"boolean"},"markerBorder":{"type":"string","enum":["square","rounded","circle"],"uniqueKey":"qrSettings.oneOf.0.markerBorder","typeLabel":"enum\u003cstring>"},"markerCenter":{"type":"string","enum":["square","dot"],"uniqueKey":"qrSettings.oneOf.0.markerCenter","typeLabel":"enum\u003cstring>"},"markerColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","uniqueKey":"qrSettings.oneOf.0.markerColor","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"qrSettings.oneOf.0","typeLabel":"object"},{"description":"Saved QR code design for this shortcut. `null` when the default design is used. Customization requires a paid plan.","type":"null","properties":{"dotColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},"dotStyle":{"type":"string","enum":["square","dots","rounded"]},"frame":{"type":"string","enum":["none","solid-logo","solid-scan","solid-slug","window-logo","window-scan","window-slug","card-logo","card-scan","card-slug"]},"hideLogo":{"type":"boolean"},"markerBorder":{"type":"string","enum":["square","rounded","circle"]},"markerCenter":{"type":"string","enum":["square","dot"]},"markerColor":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"}},"additionalProperties":false,"uniqueKey":"qrSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"qrSettings","typeLabel":"object | null"}},"required":["archived","comments","createdAt","description","destination","dynamicRouting","expiresAt","externalId","folderId","icon","id","image","masked","metadataSync","slug","tenantId","title","updatedAt","userId","video","visibility","workspaceId","passwordProtected","previewUrl","previewDarkUrl","url","placeholders","tagIds","additionalFolderIds","aliases"],"additionalProperties":false,"title":"Shortcut","description":"A shortcut.","uniqueKey":"","typeLabel":"Shortcut · object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","slug":"\u003cstring>","url":"https://app.uselora.com/acme/short/handbook","destination":"\u003cstring>","title":"\u003cstring>","description":"\u003cstring>","icon":"\u003cstring>","image":"\u003cstring>","video":"\u003cstring>","visibility":"PRIVATE","archived":true,"masked":true,"passwordProtected":true,"expiresAt":"\u003cstring>","dynamicRouting":[{"conditions":[{"attribute":"country","operator":"is","values":["DE","AT","CH"]}],"destination":"https://apps.apple.com/de/app/id123456789"}],"placeholders":[{"name":"\u003cstring>","default":"\u003cstring>"}],"folderId":"a1b2c3d4","tagIds":["a1b2c3d4"],"aliases":["urlaub","ferien"],"externalId":"\u003cstring>","tenantId":"\u003cstring>","comments":"\u003cstring>","workspaceId":"\u003cstring>","userId":"\u003cstring>","createdAt":"\u003cstring>","updatedAt":"\u003cstring>","metadataSync":{"description":"auto","title":"auto"},"previewUrl":"\u003cstring>","previewDarkUrl":"\u003cstring>","additionalFolderIds":["a1b2c3d4"],"iconSettings":{"background":{"color":"\u003cstring>","type":"color"},"glyph":{"ref":"\u003cstring>","source":"favicon","variant":"color"}},"previewSettings":{"assetId":"\u003cstring>","blobHost":"\u003cstring>","capturedAt":"2023-11-07T05:31:56Z","capturedFor":"\u003cstring>","format":"jpeg","hasDark":true,"height":123,"source":"screenshot","width":123},"qrSettings":{"dotColor":"\u003cstring>","dotStyle":"square","frame":"none","hideLogo":true,"markerBorder":"square","markerCenter":"square","markerColor":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"e07877b3-e586-4b1b-bc43-b4f413cbcbe7":{"description":"The request body failed validation, wasn't valid JSON, the slug is reserved, `expiresAt` is in the past on a create (the update branch accepts past values), or the `{handle}` is a UUID that matches an existing shortcut's `id` (use `PATCH /v1/shortcuts/{handle}` to update by ID).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"fieldErrors":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"fieldErrors.additionalProperties","typeLabel":"string[]"},"uniqueKey":"fieldErrors","typeLabel":"object"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"}},"required":["error","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","requestId":"\u003cstring>","code":"\u003cstring>","fieldErrors":{},"traceId":"\u003cstring>"}}},"exampleType":"generated"}},"headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"exampleType":"generated"},"0f822c2c-0f03-4915-bd15-f3fd368967a1":{"description":"Missing, malformed, unknown, or workspace-unscoped Bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"}},"required":["error","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","requestId":"\u003cstring>","code":"\u003cstring>","traceId":"\u003cstring>"}}},"exampleType":"generated"}},"headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"exampleType":"generated"},"39645adb-e4ee-4ada-b1e4-a4be417c893d":{"description":"The workspace plan does not include API access, the requested capability, or enough resource capacity. The body uses `plan_requires_upgrade` or `quota_exceeded`. Upgrade the workspace or change the request; retrying the same request will not succeed.","headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["plan_requires_upgrade","quota_exceeded"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"},"current_plan":{"description":"The workspace plan when the response includes it.","type":"string","uniqueKey":"current_plan","typeLabel":"string"},"required_capability":{"description":"The required plan capability when the response includes it.","type":"string","uniqueKey":"required_capability","typeLabel":"string"}},"required":["error","code","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"plan_requires_upgrade","requestId":"\u003cstring>","traceId":"\u003cstring>","current_plan":"\u003cstring>","required_capability":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"18a10390-5934-45fa-b41f-ce79718573ad":{"description":"The caller is authenticated but not allowed to perform this action. Common codes: `insufficient_scope` (the key lacks the required scope; body sets `required_scope`) and `no_permission` (the caller is no longer a workspace member).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"},"required_scope":{"description":"Set when `code` is `insufficient_scope`. The exact scope name the route required, e.g. `shortcuts.write`.","type":"string","uniqueKey":"required_scope","typeLabel":"string"}},"required":["error","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","requestId":"\u003cstring>","code":"\u003cstring>","traceId":"\u003cstring>","required_scope":"\u003cstring>"}}},"exampleType":"generated"}},"headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"exampleType":"generated"},"cd89e67e-7866-4a38-b10d-525022badd75":{"description":"The supplied `folderId` doesn't exist in this workspace (`folder_not_found`).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"}},"required":["error","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","requestId":"\u003cstring>","code":"\u003cstring>","traceId":"\u003cstring>"}}},"exampleType":"generated"}},"headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"exampleType":"generated"},"a547a0e2-a95f-403f-9c41-b1b05d1605c9":{"description":"A shortcut at this slug exists but isn't visible to the caller (for example another user's private shortcut). Pick a different slug.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"}},"required":["error","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","requestId":"\u003cstring>","code":"\u003cstring>","traceId":"\u003cstring>"}}},"exampleType":"generated"}},"headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"exampleType":"generated"},"2e36d92e-e0c4-466c-8e11-db316efd3aca":{"description":"The request body exceeded the size limit. The body is rejected before being parsed, so no partial write occurred; retrying with a smaller payload will succeed.","headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","const":"payload_too_large","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"}},"required":["error","code","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"payload_too_large","requestId":"\u003cstring>","traceId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"e4064a28-f435-4ea7-9719-3e2d9f2a9491":{"description":"Rate limit exceeded. Wait `Retry-After` seconds before retrying.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the rate-limit window resets."},"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"}},"required":["error","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","requestId":"\u003cstring>","code":"\u003cstring>","traceId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"5a6bc228-40d9-401c-8d41-263ae8a11449":{"description":"An unexpected failure on the server. The body is `{ error: \u003cmessage>, code: \"internal_error\", requestId: \u003cid> }`, plus `traceId` when available. Retry idempotent operations with exponential backoff. A write may already have applied; reconcile its state before retrying.","headers":{"X-Lora-Request-Id":{"description":"Request correlation identifier. Matches the `requestId` field in the JSON error body.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","const":"internal_error","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Correlation identifier for support/debugging. Equals the `X-Lora-Request-Id` response header.","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"traceId":{"description":"Trace identifier when available for this request. 32-character lowercase hex string.","type":"string","pattern":"^[0-9a-f]{32}$","uniqueKey":"traceId","typeLabel":"string"}},"required":["error","code","requestId"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"internal_error","requestId":"\u003cstring>","traceId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"6cd256d3-d1d1-402e-b1c4-2169fe930093":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Workspace API key (`lora_sk_…`) sent as `Authorization: Bearer \u003capi_key>`. Each scoped operation names the scope it requires in its `security` requirement, for example `shortcuts.write`; a key without it receives `403` with `code: insufficient_scope`. `GET /v1/qr` also accepts anonymous requests and requires no scope.","scopes":["shortcuts.write"],"schemeName":"bearerAuth"}}},"servers":{"e04fe8d2-b9b4-4716-96fe-7218328cbf2a":{"url":"https://api.uselora.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Workspace API key (`lora_sk_…`) sent as `Authorization: Bearer \u003capi_key>`. Each scoped operation names the scope it requires in its `security` requirement, for example `shortcuts.write`; a key without it receives `403` with `code: insufficient_scope`. `GET /v1/qr` also accepts anonymous requests and requires no scope.","scopes":["shortcuts.write"],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Workspace API key (`lora_sk_…`) sent as `Authorization: Bearer \u003capi_key>`. Each scoped operation names the scope it requires in its `security` requirement, for example `shortcuts.write`; a key without it receives `403` with `code: insufficient_scope`. `GET /v1/qr` also accepts anonymous requests and requires no scope.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"lora-5b5199e2","siteName":"Lora Developers","title":"Upsert shortcut - Lora Developers","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-14T21:37:13.102Z","originalFileLocation":"api-reference/shortcuts/upsert-shortcut.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates a shortcut at the given slug, or updates the existing one. Returns 201 when a new shortcut is created and 200 when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with GET/PATCH/DELETE the segment is named {handle}, but PUT does not resolve UUID-shaped handles to a row\u0026#x27;s ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut\u0026#x27;s id returns 400 validation_error (use PATCH /v1/shortcuts/{handle} to update by ID); UUID-shaped slugs that don\u0026#x27;t collide are accepted as slugs.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lora Developers\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upsert shortcut - Lora Developers\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a shortcut at the given slug, or updates the existing one. Returns 201 when a new shortcut is created and 200 when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with GET/PATCH/DELETE the segment is named {handle}, but PUT does not resolve UUID-shaped handles to a row\u0026#x27;s ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut\u0026#x27;s id returns 400 validation_error (use PATCH /v1/shortcuts/{handle} to update by ID); UUID-shaped slugs that don\u0026#x27;t collide are accepted as slugs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lora Developers\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lora-5b5199e2.mintlify.app/_mintlify/api/og/v2?division=Shortcuts\u0026amp;title=Upsert+shortcut\u0026amp;description=Creates+a+shortcut+at+the+given+slug%2C+or+updates+the+existing+one.+Returns+%60201%60+when+a+new+shortcut+is+created+and+%60200%60+when+an+existing+one+is+updated.+The+h\u0026amp;theme=8d92c626e8db39f43037bfd2\u0026amp;signature=62275a261bc8f6fe012ec468cb5fb8bb2e5e5035d7fc94aa041e845f5e002052\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Upsert shortcut - Lora Developers\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a shortcut at the given slug, or updates the existing one. Returns 201 when a new shortcut is created and 200 when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with GET/PATCH/DELETE the segment is named {handle}, but PUT does not resolve UUID-shaped handles to a row\u0026#x27;s ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut\u0026#x27;s id returns 400 validation_error (use PATCH /v1/shortcuts/{handle} to update by ID); UUID-shaped slugs that don\u0026#x27;t collide are accepted as slugs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lora-5b5199e2.mintlify.app/_mintlify/api/og/v2?division=Shortcuts\u0026amp;title=Upsert+shortcut\u0026amp;description=Creates+a+shortcut+at+the+given+slug%2C+or+updates+the+existing+one.+Returns+%60201%60+when+a+new+shortcut+is+created+and+%60200%60+when+an+existing+one+is+updated.+The+h\u0026amp;theme=8d92c626e8db39f43037bfd2\u0026amp;signature=62275a261bc8f6fe012ec468cb5fb8bb2e5e5035d7fc94aa041e845f5e002052\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/lora-5b5199e2/t921vPvkjwOzqOqG/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lora Developers\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/shortcuts/upsert-shortcut.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://uselora.dev/#organization\",\"name\":\"Lora Developers\",\"url\":\"https://uselora.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lora-5b5199e2/ryYQakwxVJhAxQjJ/logo/logo_light.svg?fit=max\u0026auto=format\u0026n=ryYQakwxVJhAxQjJ\u0026q=85\u0026s=a15e432f45994371977fd6392f2d6c77\"}},{\"@type\":\"WebSite\",\"@id\":\"https://uselora.dev#website\",\"name\":\"Lora Developers\",\"url\":\"https://uselora.dev\",\"publisher\":{\"@id\":\"https://uselora.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut#webpage\",\"url\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut\",\"name\":\"Upsert shortcut\",\"description\":\"Creates a shortcut at the given slug, or updates the existing one. Returns 201 when a new shortcut is created and 200 when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with GET/PATCH/DELETE the segment is named {handle}, but PUT does not resolve UUID-shaped handles to a row's ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut's id returns 400 validation_error (use PATCH /v1/shortcuts/{handle} to update by ID); UUID-shaped slugs that don't collide are accepted as slugs.\",\"dateModified\":\"2026-10-14T21:37:13.102Z\",\"isPartOf\":{\"@id\":\"https://uselora.dev#website\"},\"breadcrumb\":{\"@id\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Shortcuts\",\"item\":\"https://uselora.dev/api-reference/shortcuts/list-shortcuts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upsert shortcut\",\"item\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut#apireference\",\"headline\":\"Upsert shortcut\",\"name\":\"Upsert shortcut\",\"description\":\"Creates a shortcut at the given slug, or updates the existing one. Returns 201 when a new shortcut is created and 200 when an existing one is updated. The handle is taken verbatim as the slug — for symmetry with GET/PATCH/DELETE the segment is named {handle}, but PUT does not resolve UUID-shaped handles to a row's ID. One guardrail: a UUID-shaped handle that collides with an existing shortcut's id returns 400 validation_error (use PATCH /v1/shortcuts/{handle} to update by ID); UUID-shaped slugs that don't collide are accepted as slugs.\",\"url\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut\",\"mainEntityOfPage\":{\"@id\":\"https://uselora.dev/api-reference/shortcuts/upsert-shortcut#webpage\"},\"dateModified\":\"2026-10-14T21:37:13.102Z\",\"publisher\":{\"@id\":\"https://uselora.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://uselora.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Lora Developers\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Lora Developers","nav":{"global":null,"tabs":[{"tab":"API Reference","groups":[{"group":"Lora API","pages":[{"title":"Lora API — Getting started","sidebarTitle":"Getting started","href":"/essentials/getting-started"},{"title":"Lora API — Versioning \u0026 deprecation","sidebarTitle":"Versioning \u0026 deprecation","href":"/essentials/versioning"},{"title":"Lora API — Rate limits","sidebarTitle":"Rate limits","href":"/essentials/rate-limits"}]},{"group":"Shortcuts","pages":[{"title":"List shortcuts","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/shortcuts","href":"/api-reference/shortcuts/list-shortcuts"},{"title":"Create shortcut","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/shortcuts","href":"/api-reference/shortcuts/create-shortcut"},{"title":"Retrieve shortcut","description":"Returns a shortcut by its handle. The handle is either the shortcut's `slug` or its `id` (UUID). Archived shortcuts are returned.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/shortcuts/{handle}","href":"/api-reference/shortcuts/retrieve-shortcut"},{"title":"Upsert shortcut","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/shortcuts/{handle}","href":"/api-reference/shortcuts/upsert-shortcut"},{"title":"Delete shortcut","description":"Deletes a shortcut by handle. The handle is either the shortcut's `slug` or its `id` (UUID). The slug becomes immediately reusable for a new shortcut. Idempotent — re-deleting an already-deleted shortcut returns `not_found`.","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/shortcuts/{handle}","href":"/api-reference/shortcuts/delete-shortcut"},{"title":"Update shortcut","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/shortcuts/{handle}","href":"/api-reference/shortcuts/update-shortcut"}]},{"group":"Tags","pages":[{"title":"List tags","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tags","href":"/api-reference/tags/list-tags"},{"title":"Create tag","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tags","href":"/api-reference/tags/create-tag"},{"title":"Retrieve tag","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tags/{id}","href":"/api-reference/tags/retrieve-tag"},{"title":"Delete tag","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/tags/{id}","href":"/api-reference/tags/delete-tag"},{"title":"Update tag","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/tags/{id}","href":"/api-reference/tags/update-tag"}]},{"group":"Folders","pages":[{"title":"List folders","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/folders","href":"/api-reference/folders/list-folders"},{"title":"Create folder","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/folders","href":"/api-reference/folders/create-folder"},{"title":"Retrieve folder","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/folders/{id}","href":"/api-reference/folders/retrieve-folder"},{"title":"Delete folder","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/folders/{id}","href":"/api-reference/folders/delete-folder"},{"title":"Update folder","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/folders/{id}","href":"/api-reference/folders/update-folder"},{"title":"Add an item to a folder","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/folders/{id}/items","href":"/api-reference/folders/add-an-item-to-a-folder"},{"title":"Remove an item from a folder","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/folders/{id}/items/{itemType}/{itemId}","href":"/api-reference/folders/remove-an-item-from-a-folder"}]},{"group":"QR Codes","pages":[{"title":"Retrieve QR code","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/qr","href":"/api-reference/qr-codes/retrieve-qr-code"}]}]}]},"title":"Upsert shortcut - Lora Developers","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-BRm_l__d.js","utils-f1l1Oc-G.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BlhqDhJO.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DHCB7rsC.js","snippetPresets-CYXLx6Hv.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-B78P2dEq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C4YLPVAh.js","shallow-vlLnTDkQ.js","getApiPlaygroundDisplay-D_98hhvf.js","CodeSnippet-DtnZHGqq.js","CodeSnippets-CLFb8KJt.js","Page-kQh739Uz.js","getPastedJson-Cq-zlbnU.js","icon-sN3t983t.js","MethodPill-P_YQ2s09.js","DuplicateIcon-BVzyNsGJ.js","createIcon-B3jqgqC6.js","DynamicMarkdown-Crwq6WG_.js","SectionHeading-C7pGS2Bb.js","axios-vUo_bRtp.js","Markdown-BuPH8yuW.js","clsx-CCOYKgaU.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BnkC_6oA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BM4S31-f.js"]}