Submit your Mini App
CrackPay's team decides which Mini Apps every user can open. You submit a listing; the team reviews it, records your app's URL and the contracts it may call, and switches it on.
What a listing enforces from then on:
- Your URL. Your app's page in CrackPay can show that site and no other.
- Your contracts. Your app can send transactions to those and nothing else.
- Your token allowances. Which tokens your app may ask users to approve, and only towards one of your own contracts.
:::tip Let your assistant write it
The list-crackpay-miniapp skill checks your project and writes the
listing file for you.
:::
Submission form
www.crackpay.xyz/developers/submit
Paste your listing file and an email address the team can reply to. The form checks the file and tells you which field is wrong.
The listing file
crackpay-listing.json
{
"name": "KashLink",
"tagline": "Send USDC or EURC as a link.",
"publisher": "Cracked Studios",
"category": "finance",
"url": "https://arc.kashlink.live/",
"icon": "https://arc.kashlink.live/icon-512.png",
"supportUrl": "https://t.me/your-support",
"termsUrl": "https://arc.kashlink.live/terms",
"privacyUrl": "https://arc.kashlink.live/privacy",
"network": "arc-mainnet",
"contracts": [
{
"address": "0x4d6c05Fe69ECCB3fDd882D4e915d77ff29159C62",
"name": "KashLinkEscrow",
"purpose": "Holds the funds for each link until it is claimed or refunded.",
"explorerUrl": "https://explorer.arc.io/address/0x4d6c05Fe69ECCB3fDd882D4e915d77ff29159C62",
"sampleTransactions": []
}
],
"tokenApprovals": ["EURC"],
"origins": ["https://arc.kashlink.live"]
}
| Field | Rule |
|---|---|
name | 2 to 40 characters |
tagline | Up to 160 characters, one or two sentences |
publisher | You or your organisation, up to 80 characters |
category | finance, shopping, utility, games, social, rewards, education or entertainment |
url | https://. Where your app loads from. One per listing. |
icon | https://. Square PNG, 512 × 512. |
supportUrl | https:// or mailto: |
termsUrl, privacyUrl | https:// |
network | arc-testnet or arc-mainnet. One listing per network. |
contracts | Every contract your app sends transactions to, up to 20. Each needs address, name, purpose, explorerUrl; sampleTransactions is a list of explorer links. |
tokenApprovals | USDC and/or EURC, if your contracts need an allowance. Leave empty if you only take native USDC. |
origins | Every origin your app loads scripts, styles or data from |
Requirements
Technical
- ✅ Connects on load: no connect button, no sign-in signature
- ✅ Served over HTTPS and allows framing by CrackPay
- ✅ Works at 360 × 640, single column
- ✅ Handles cancelled, refused and failed transactions with clear messages
- ✅ Uses USDC decimals correctly
- ✅ A PageSpeed Insights result for your URL
Contracts
- ✅ Source verified on the Arc explorer for its network (mainnet, testnet)
- ✅ A sample transaction for each function users can trigger
- ✅ Accepts smart-account callers (no
tx.originor "no code" checks) - ✅ Token calls are only
approveof your own listed contracts
Ownership and support
- ✅ Your name and logo are clear; it is obvious the app is yours, not CrackPay's
- ✅ Terms of Service, Privacy Policy and support are linked inside the app
- ✅ You fix critical issues within 24 hours
Dependencies
- ✅ Exact versions pinned and lockfile committed
- ✅ No package version installed within 7 days of its release
What happens after submission
- Review. The team checks your listing against these requirements.
- Testing. The team runs your app in CrackPay.
- Feedback, if anything needs changing.
- Listing. Your app appears on CrackPay's Apps page.
After you are listed
- Changing your URL or adding a contract needs a new review. Until it is approved, calls to a new contract are refused.
- CrackPay can switch a listing off at any time, for example if a contract proves unsafe. It takes effect immediately.
Common rejection reasons
- A connect button, or a signature request on load
- A contract missing from the listing, or not verified
- Tokens transferred directly instead of through your own contract
- Amounts wrong by 10¹²
- The server refuses to be framed
- Unusable at phone width