Skip to main content

Task types

Dyma ships a global task type catalog managed in super admin. Projects pick types when creating quests in Studio. The canonical list lives in dyma-shared as TASK_TYPE_CATALOG.

Catalog aligns with common quest-platform patterns (social, content, engagement, on-chain) while staying Cosmos / IBC-first. The following third-party builder types are not included: generic EVM contract builders, generic token/NFT holder apps, Substrate pallet tasks, faucets, partner-specific DEX integrations, and meta-platform tasks.

Tier 1 integrations​

Priority platforms for launch and marketing:

PlatformTask typesVerification
DiscordJoin, rolePlatform API (free)
TelegramJoin, bot startPlatform API (free)
GitHubStar, fork, commitPlatform API (free)
YouTubeSubscribe, like, visit channel, video submitPlatform API / manual
X (Twitter)Follow, like, retweet, hashtagPlatform API (paid API tier)
On-chainSwap, stake, transfer, …dyma-indexer
EmailVerified email linkPlatform API
ReferralInvite friendsPlatform API

Verification methods​

MethodIDUsed for
On-chain indexeron_chainCosmos / IBC transactions
Platform APIplatform_apiOAuth social integrations
Project REST APIproject_restCustom project logic
Manual reviewmanualLinks, content, moderators
HybridhybridAuto first, manual fallback
AI verifyai_verifyMemes, screenshots, app install proof
Hybrid + AIhybrid_aiAI with manual fallback

Full catalog​

Social — X / Twitter​

IDNameAuto?
social_twitter_followTwitter FollowYes
social_twitter_likeTwitter LikeSemi
social_twitter_retweetTwitter RetweetSemi
social_twitter_commentTwitter CommentNo
social_twitter_threadTwitter ThreadNo
social_twitter_hashtagTwitter Hashtag PostSemi
social_twitter_memeTwitter Meme / Creative PostSemi (AI)
social_twitter_hashtag_aiTwitter Hashtag + AI VerifySemi (AI)

Social — Discord & Telegram​

IDNameAuto?
social_discord_joinDiscord JoinYes
social_discord_roleDiscord RoleYes
social_discord_messageDiscord MessageYes
social_telegram_joinTelegram JoinYes
social_telegram_bot_startTelegram Bot StartYes

Discord Message​

Auto-verified via the Dyma Discord bot. Studio config: guildId (from project Discord connection), channelId / channelName, optional inviteUrl, optional requireSubstring.

Earner flow

  1. Link Discord (OAuth)
  2. Post in the configured channel (optionally paste a message URL)
  3. POST /v1/quests/:questId/discord/verify → bot scans recent messages for the linked Discord user

Bot needs View Channels and Read Message History. Reinstall the bot if an older install only had View Channels.

Studio dry-run: POST /v1/quests/:questId/discord/preview/status|verify.

Telegram Join + Bot Start​

Two separate quest types. Two bots with clear jobs:

BotWhere configuredUsed for
Dyma platform botAdmin → Integrations → TelegramEarner account linking only
Project botStudio → Settings → Integrations → TelegramJoin verification + Bot Start deep links

Join (social_telegram_join) Studio config: chatId, optional inviteUrl / chatTitle, requireStatus. Project bot must be an admin in that chat.

Bot Start (social_telegram_bot_start) Studio config: optional customStartMessage. Deep link opens the project bot. Start payload is server-generated per user.

Earner flow

  1. POST /v1/users/me/telegram/link-url then open Dyma bot deep link (once)
  2. GET /v1/quests/:questId/telegram/status
  3. Open invite (Join) or project bot deep link (Bot Start)
  4. POST /v1/quests/:questId/telegram/verify → claimable submission

Studio

  • Connect project bot: PUT /v1/projects/:id/telegram/bot with { botToken }
  • Dry-run preview: POST /v1/quests/:questId/telegram/preview/status|verify

Webhooks: POST /v1/telegram/webhook (Dyma bot), POST /v1/telegram/webhook/project/:projectId (project bot).

Social — Instagram​

IDNameAuto?
social_instagram_followInstagram FollowSemi
social_instagram_view_postInstagram View PostSemi
social_instagram_visit_profileInstagram Visit ProfileNo

Social — YouTube​

IDNameAuto?
social_youtube_subscribeYouTube SubscribeYes
social_youtube_likeYouTube LikeSemi
social_youtube_commentYouTube CommentNo
social_youtube_visit_channelYouTube Visit ChannelSemi

Social — Product Hunt, URL, Referral​

IDNameAuto?
social_producthunt_upvoteProduct Hunt UpvoteSemi
social_producthunt_commentProduct Hunt CommentNo
social_producthunt_visitProduct Hunt VisitNo
engagement_url_visitVisit URLSemi
engagement_url_shareShare URLNo
social_referralReferralYes

Developer — GitHub​

IDNameAuto?
social_github_starGitHub StarYes
social_github_forkGitHub ForkYes
dev_github_prGitHub Pull RequestYes
dev_github_issueGitHub IssueNo
dev_github_commitGitHub CommitYes
dev_deploy_contractDeploy Smart ContractYes
dev_deploy_workloadDeploy WorkloadNo

Content​

IDNameAuto?
content_blog_writeWrite Blog PostNo
content_blog_commentComment on BlogNo
content_media_uploadMedia / Screenshot UploadNo
content_media_upload_aiMedia Upload + AI VerifySemi (AI)
dev_tutorial_submitTutorial / ArticleNo
dev_video_submitVideo Submission (YouTube, Loom, …)No
content_kickstarter_supportKickstarter SupportNo

Learn & forms​

IDNameAuto?
learn_quizQuiz / AssessmentYes
learn_course_completeCourse CompletionSemi
custom_formForm / SurveyNo

Quiz / Assessment (learn_quiz)​

Studio authors build in-app questions (single or multi correct options), a pass score (%), and optional shuffle / explanations. Correct answers stay in verificationConfig server-side only.

Earner APIs

MethodPathNotes
GET/v1/quests/:questId/quizPublic questions (answers stripped)
GET/v1/quests/:questId/quiz/statusAuth; prior submission state
POST/v1/quests/:questId/quiz/submitAuth; body { answers: { [questionId]: optionId[] } }

Passing creates a claimable submission. Failing returns the score without awarding. Admin catalog: enable/logo for learn_quiz under Integrations / Task Types (no credentials panel).

Identity​

IDNameAuto?
identity_wallet_linkWallet ConnectYes
email_linkVerified EmailYes
attestation_signSigned MessageYes
engagement_terms_acceptTerms & ConditionsYes

Earners prove ownership of an email with a quest-scoped OTP. Studio configures optional domain allowlists, whether to reuse an already-linked profile email, and optional mail intro copy.

Earner flow

  1. GET /v1/quests/:questId/email-link/status: linked email, domain match, canSkipOtp
  2. POST /v1/quests/:questId/email-link/send-otp: body { email }; sends quest.email_link_otp with project and quest context
  3. POST /v1/quests/:questId/email-link/verify: body { code } or { useLinkedEmail: true }; upserts UserEmail and marks the submission claimable

Verification does not stub-auto-pass for this type: a verified profile email matching domain rules is required. On-chain email attestation is deferred; OTP is the v1 path (same crypto and TTL rules as profile email link).

Engagement​

IDNameAuto?
engagement_daily_checkinDaily Check-inYes
engagement_secret_codeSecret CodeYes
engagement_lucky_drawLucky DrawYes
engagement_app_installMobile App InstallNo
engagement_app_install_aiApp Install + AI VerifySemi (AI)

Daily Check-in (engagement_daily_checkin)​

No Studio verification JSON or custom inputs. Earners open the quest once per UTC day and tap Check in.

  1. GET /v1/quests/:questId/daily-checkin/status: whether the user can check in today, streak, next availability
  2. POST /v1/quests/:questId/daily-checkin/check-in: creates a claimable submission for the current UTC day (rejects if already checked in)

On-chain (Cosmos / IBC)​

Verified by dyma-indexer — equivalent to subgraph-style indexing for the interchain.

IDName
chain_transferToken Transfer
chain_swapDEX Swap
chain_lp_addAdd Liquidity
chain_lp_holdHold LP Position
chain_stakeStake / Delegate
chain_unstakeUnstake / Redelegate
chain_voteGovernance Vote
chain_proposal_submitSubmit Proposal
chain_nft_mintNFT Mint
chain_contract_interactContract Interaction
chain_blob_postData Availability Blob
chain_bridgeCross-chain Bridge
chain_wallet_connectWallet Connect Proof

Custom​

IDName
custom_restCustom (Project REST API)
custom_manualCustom (Manual)

Quest categories​

Filters in the client and Studio map to these slugs:

on-chain · staking · governance · developer · learn · social · content · identity · engagement · custom

Admin​

Super admin can enable or disable any task type platform-wide at admin.dyma.io → Task Types. Disabled types are hidden from Studio but existing quests remain until archived.

See also Verification and Content model.