listing
What the marketplace shows — category, tagline, overview, screenshots, links, dates — plus the words the marketing site borrows, the button the member portal shows and the copy that makes the connector's page a search landing page.
The listing block is required. It is everything a connector says about itself to people who have not installed it: the marketplace card, the connector's public page, the in-app directory, GET /connectors and the MCP catalogue all read it, and nothing on those surfaces is typed by hand. What a connector cannot say about itself (whether it is official, available, new or trending) the registry stamps.
"listing": {
"category": "messaging",
"tagline": "Sell access to Telegram channels, groups and supergroups through your own bot.",
"overview": "Connect a bot you created with @BotFather and Subscriby runs your membership on Telegram: …",
"screenshots": [],
"links": {
"documentation": "https://docs.subscriby.net/connectors/telegram",
"support": "mailto:support@subscriby.net",
"privacy": "https://telegram.org/privacy",
"terms": "https://telegram.org/tos",
"homepage": "https://telegram.org"
},
"added_at": "2025-04-21",
"changelog_url": "https://www.subscriby.net/blog",
"sign_in_required": false,
"portal_cta": { "label": "Open Telegram Bot" },
"marketing": {
"audience": "Telegram communities",
"place": "channel",
"places": "channels, groups and supergroups",
"installation": "bot",
"identity": "Telegram account",
"native_payment": "Telegram Stars"
}
}The fields
| Field | Required | Meaning |
|---|---|---|
category | ✅ | Where the marketplace shelves the connector: messaging, community, payments or productivity. The Category filter and the connector page's side column read it. |
tagline | ✅ | One line under the name, at most 80 characters; the card shows it whole and the hero chip's hover card quotes it. |
overview | ✅ | The Overview tab, in Markdown. Say what the connector does for a creator and for a member. The capability matrix, the resource kinds and the command coverage under it are generated from the manifest, so do not repeat them. |
screenshots | Image URLs shown on the Overview tab. Empty is fine. | |
links | The More info column: documentation, support, privacy, terms, homepage. Each https:// or mailto:. See below for what each should point at. | |
added_at | ✅ | The date the connector was first published, YYYY-MM-DD. Shown under Added and drives the New chip for sixty days. |
changelog_url | Where releases are announced; the Changelog link. | |
sign_in_required | Whether a creator has to sign in to the platform to install (an OAuth connector says true; a paste-a-token connector says false). Default true. Shown as Sign-in on the connector page. | |
marketing | The words the marketing site borrows for this platform. Optional; see below. | |
portal_cta | The button the member portal shows to open the connector. Optional; see below. | |
seo | The copy that turns the connector's public page into a search landing page that leads with the platform's name. Optional; see below. |
The links
documentation: your own guide for creators using the connector (how to install it, what members experience), not this SDK reference.support: where a creator writes when the connector misbehaves; amailto:is fine.privacyandterms: the platform's policies, not yours. The marketing site's legal pages link the available connectors'privacyfor members' reference, so it must be the document a member's data on that platform is governed by.homepage: the platform's site.
marketing
The public site never spells a platform. Its copy carries tokens that are filled from the connectors available on that installation of Subscriby, so a sentence written once names Telegram today and whichever connector is available tomorrow. Your marketing block supplies the words:
| Word | Token | Meaning and Telegram's value |
|---|---|---|
audience | :audience | Who the connector serves: "Telegram communities". |
place | :place | One gated place, lower case: "channel". |
places | :places | The gated places as a list: "channels, groups and supergroups". |
installation | :installation | What a project installs, lower case: "bot". |
identity | :identity | A person's account on the platform: "Telegram account". |
native_payment | :native_payment | The platform's own payment method, when it has one: "Telegram Stars". Leave it out when there is none. |
The first five are required inside the block; native_payment is optional. The connector's name fills :platform, and every available connector together fills :platforms; the connectors being built fill :next and the roadmap fills :planned on the home page. A sentence built on a word your block does not supply is dropped rather than rendered half-empty: a comparison row about native payments disappears when no available connector declares one. Write the words in lower case except the platform's own proper nouns, and as they would read mid-sentence ("your :place", "a :platform :installation"). A connector that lends no words leaves the block out; every connector still gets its own marketplace page from the rest of the listing.
portal_cta
"portal_cta": { "label": "Open Telegram Bot", "icon": "paper-airplane" }The member portal's header shows one button per installed connector that has somewhere to open: label (a translation key) and an optional icon, a key from Subscriby's connector icon set; when it is omitted the connector's own icon is drawn, which is almost always right. The core addresses the button through InstallationLifecycle::startLink(), so the connector never builds the URL here. Omit the block when the platform has nothing a member opens (a role gate shows itself). The same block is returned in GET /connectors so the creator apps render it identically.
seo
"seo": {
"title": "Telegram Membership Bot for Paid Channels and Groups — :app",
"description": "Run a paid Telegram channel or group with your own bot: members pay by card, crypto or Stars, get in the moment they pay and leave when access ends.",
"h1": "The Telegram Membership Bot for Paid Channels and Groups",
"h1_sub": "Your own bot, your own payment accounts, and every join and removal handled for you.",
"sections": [
{ "heading": "How a paid Telegram channel works with :app", "body": "You create a bot with @BotFather and paste its token…\n\nNobody copies links around and nobody checks who has paid." }
],
"faq": [
{ "q": "Do I need my own Telegram bot?", "a": "Yes. You create it with @BotFather in a minute and paste the token into :app…" }
]
}The marketing site's own copy never spells a platform, so the one page that may lead with "Telegram membership bot" is the connector's page under /connectors/<key>, and the words have to come from the connector. A manifest that carries seo replaces that page's <title>, meta description and headline with its own, shows h1_sub under the headline in place of the tagline, adds one card per entry of sections between the overview and the capability matrix, and closes the page with the faq entries as cards described to search engines as a FAQPage. A connector without the block keeps the generic page built from the rest of its listing.
| Field | Required | Meaning |
|---|---|---|
title | ✅ | The page title, at most 70 characters, the search phrase first. |
description | ✅ | The meta description, at most 160 characters. |
h1 | ✅ | The page's one headline. |
h1_sub | The line under the headline; the tagline when omitted. | |
sections | Prose sections in order, each a heading and a body of one or more paragraphs separated by blank lines. | |
faq | Questions and answers in order, each a q and an a; answers should stand on their own in a sentence or three. |
Every string may carry the tokens the marketing site fills at render time: :app (the product name), :gateways (how many payment methods the site offers), :webhook_events, :api_resources and :mcp_tools (the catalogue counts). Use them for any figure that would otherwise go stale inside a published manifest. The title, description, headline, subline, headings and questions are looked up by their English text in your package's lang/*.json like the tagline, so ship their translations; a section body is looked up the same way and reads English until you translate it. The loader refuses a title or description over its limit and any key the block does not know, so keep editor validation on.
What the registry stamps
These are never in the manifest, so a package cannot claim them:
| Stamp | Set from |
|---|---|
| Official | Subscriby's configuration names its own connectors; every other package is Community. |
| Lane / status | Available Now (enabled), Experimental (enabled and flagged beta), Paused (disabled during an incident), Under Development (registered but not enabled), Coming Soon (a roadmap stub with no package). |
| New | added_at within the last 60 days. |
| Trending | The most installed connector over the last 30 days. |
| Installed on | How many projects run it (public) and, in the app, how many of the signed-in creator's own. |
| Made by | The manifest's vendor; for a roadmap stub, Subscriby. |
What the kit checks
manifest.listing_links: every link present, including changelog_url, is an absolute https:// URL or a mailto: address. The loader refuses a category outside the four, an added_at that is not a date, an unknown key, a marketing block missing any of its five required words, and a seo title over 70 or description over 160 characters; the eighty-character tagline limit is the schema's, so keep editor validation on and expect review to hold you to it. Listing and Review has the checklist a reviewer reads the block against.
How is this guide?
Last updated on
recovery
Which Disaster Recovery facets a connector performs — the five flags, the RecoverySupport methods behind each, and how the block and the recovery capabilities work together.
Ports
The sixteen interfaces the core calls on a connector — which are required, which a capability binds, which are optional, the value objects that cross them, and the rules every implementation shares.