name | Required. 1 to 50 characters on one line: no control, line-break or invisible characters (bidi controls, zero-width), no spaces around it. Arabic and English listing names are set in the console. |
handle | Required. 3 to 40 lowercase letters and digits, in runs joined by single hyphens. Unique on Tassyir, never changes, and must equal the handle of the app in the console. Some names are reserved (www, api, tassyir, …). |
api_version | Required. 2026-10. |
access.scopes | The scopes the app needs (Scopes and consent). Each once. |
access.optional_scopes | Scopes the merchant may tick. Never also in scopes, and never one a required scope already implies. |
access.scope_reasons | One sentence per requested scope, required and optional, shown on the install screen: 10 to 200 characters, the name text rules. No reason for a scope you do not request. |
hosting.mode | Required. external: the app runs on your server. tassyir (Tassyir Hosting) is refused until hosting opens. |
hosting.url | Required for external. https://host or https://host/path, at most 512 characters: no port (443 only), no user or password, no query, fragment or trailing /. The host is a public lowercase hostname: no IP address, no private name (localhost, .local, .test, …), nothing on Tassyir’s domains. |
auth.callback_url | Optional, external only. Where a headless app receives its install code (Tokens). The hosting.url rules, but a trailing / is allowed. |
admin.page | Optional. Your page in the dashboard: a path on hosting.url, starting with / (not //), at most 256 characters, no query, fragment, backslash, space, . / .. / empty segment or encoded slash. Omit it for a headless app. |
webhooks | At most 10 entries, each topics (one or more) and uri. A topic is subscribed once in the whole manifest, and needs the scope that reads its resource (Webhooks). uri is a path on hosting.url (the admin.page rules), or an absolute https URL (the hosting.url rules). |
data.definitions | At most 50 keys of app data: owner (business, store, product, order, customer), key ([a-z][a-z0-9_]{0,63}, unique per owner), type (string, number, integer, boolean, json), visibility (app, merchant, storefront). |
storefront.blocks | Part of the format, refused until storefront blocks open. |