ఈ పేజీలో శీర్షికలు తెలుగులో ఉన్నాయి; సాంకేతిక వివరాలు, కోడ్ ఇంగ్లీష్లోనే ఉంటాయి.
Everything on attu.in is one HTTP call, or one MCP tool. Anyone can use them: no account is needed to publish a free page.
Base URL: https://attu.in/api/v1. Responses are JSON; errors are {"detail": "..."} with an HTTP status.
| Credential | Where from | Used for |
|---|---|---|
| none | Publishing a free page. | |
| edit token | Shown once when you publish | Get, update, delete that one page: Authorization: Bearer <edit token> |
workspace key attu_ws_… | Shown once when you start a plan | Publishing on a paid plan, and every page of the workspace, plus the workspace endpoints. |
# free: one HTML file (100 KB max)
curl -F file=@page.html -F title="My page" https://attu.in/api/v1/artifacts
# paid: a .zip static site, password, custom URL, page analytics
curl -H "Authorization: Bearer attu_ws_..." -F file=@site.zip -F password=s3cret \
-F slug=launch -F analytics=true https://attu.in/api/v1/artifacts
The response has url (the custom URL when set, else https://attu.in/s/<id>), short_url,
raw_url (the page's own origin, no footer), id and edit_token (shown once).
curl -H "Authorization: Bearer <edit token or workspace key>" https://attu.in/api/v1/artifacts/<id>
curl -X PATCH -H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"title": "New title", "password": "s3cret", "slug": "launch", "analytics": true}' \
https://attu.in/api/v1/artifacts/<id>
# password/slug: null removes it. password, slug and analytics need a paid plan.
curl -X DELETE -H "Authorization: Bearer <token>" https://attu.in/api/v1/artifacts/<id>
curl -H "Authorization: Bearer <token>" "https://attu.in/api/v1/artifacts/<id>/stats?days=30"
Paid plans, opt-in per page (PATCH {"analytics": true}). Cookieless: daily views, unique visitors, referrer hosts,
countries and device class, counted when the page is opened at its attu.in URL, plus outbound click counts. Kept 13 months.
You may also add your own analytics script inside your page; it runs on the page's own sub-domain.
Click counts. While analytics are on, attu adds one script tag, <script src="/_attu/a.js">, to your page's
HTML documents (only then; otherwise your files are served exactly as uploaded). It counts clicks on links to other sites and on
wa.me/WhatsApp, tel:, mailto:, upi: and Instagram links. It stores only a
normalised target: whatsapp, tel, mailto, upi, or
https://host/first-path-segment; never phone numbers, UPI IDs, query strings or anything the visitor typed. Free pages show
only a total view count.
Links in your page. Your page runs inside the attu.in frame, so give links to other sites target="_blank" (new tab)
or target="_top" (whole window). Most sites, WhatsApp included, refuse to open inside a frame.
Paid plans open soon. You can start a workspace now, but its checkout page does not take payments yet, so the plan does not start until paying opens.
# start a plan: personal | team | team-yearly (returns workspace_key ONCE, and a checkout_url)
curl -X POST -H "Content-Type: application/json" -d '{"plan":"personal"}' https://attu.in/api/v1/workspaces
K="Authorization: Bearer attu_ws_..."
curl -H "$K" https://attu.in/api/v1/workspaces/me # plan, period, bandwidth, pages
curl -X POST -H "$K" https://attu.in/api/v1/workspaces/renew # next period (optional {"plan": ...})
curl -X POST -H "$K" -H "Content-Type: application/json" -d '{"plan":"team"}' https://attu.in/api/v1/workspaces/change-plan # upgrade: pro-rata checkout; downgrade: scheduled
curl -X POST -H "$K" https://attu.in/api/v1/workspaces/change-plan/cancel # cancel a scheduled downgrade
curl -X POST -H "$K" https://attu.in/api/v1/workspaces/recharge # +10 GB until the period ends
curl -X PUT -H "$K" -H "Content-Type: application/json" -d '{"username":"yourname"}' \
https://attu.in/api/v1/workspaces/me/username # attu.in/yourname/<slug>
curl -X PUT -H "$K" -H "Content-Type: application/json" \
-d '{"cidrs":["203.0.113.0/24","2001:db8::/32","198.51.100.7"]}' \
https://attu.in/api/v1/workspaces/me/allowed-ips # [] = any IP
Changing plans. Upgrade (Personal → Team → Team yearly): you pay only the difference for the rest of the
period, and it takes effect when paid (to yearly: the unused part of the period is credited and a
365-day period starts at payment). Downgrade: no charge; it takes effect when the paid time ends and /renew then
buys the lower plan. Over the lower plan's page limit, new publishes are blocked until you are under it; nothing is deleted.
Prices exclude tax. In India 18% GST is added at checkout (₹99 + GST = ₹116.82). Checkout links go to the bitgeek customers site, where paying will open. By continuing you agree to the terms.
curl -X POST -H "$K" -H "Content-Type: application/json" -d '{"domain":"menu.yourshop.in","home":"menu"}' https://attu.in/api/v1/workspaces/me/domains # returns the DNS records to add
curl -X POST -H "$K" https://attu.in/api/v1/workspaces/me/domains/menu.yourshop.in/verify
curl -H "$K" https://attu.in/api/v1/workspaces/me/domains
curl -X PATCH -H "$K" -H "Content-Type: application/json" -d '{"home":"<page id or slug>"}' https://attu.in/api/v1/workspaces/me/domains/menu.yourshop.in
curl -X DELETE -H "$K" https://attu.in/api/v1/workspaces/me/domains/menu.yourshop.in
Team includes 3 domains; any paid plan can add more with the custom domain add-on (+1 domain for the current period: POST /api/v1/workspaces/domains/addon returns a checkout link; MCP buy_domain_addon). Add CNAME menu.yourshop.in → domains.attu.in
(for a bare domain: A 88.99.245.164 and AAAA 2a01:4f8:10b:183::2) and the TXT record
_attu-verify.menu.yourshop.in with your token, then verify. https://menu.yourshop.in/ shows the home page,
/<slug> the workspace's page with that custom URL. HTTPS is set up a few minutes after verification. You are
responsible for your domain and its DNS. If the plan lapses or drops below Team, the domain shows a paused page and stays
reserved for your workspace for 30 days.
A one-page menu or catalogue works well on the free plan. Add an order button that links to
https://wa.me/<your number with country code>?text=<URL-encoded order>, and set the page's
<title> and og:title/og:description/og:image tags: WhatsApp shows them as
the link preview. Personal gives attu.in/yourshop/menu; Team lets you use menu.yourshop.in.
See the sample tiffin-centre menu.
Streamable HTTP at https://attu.in/mcp. Without a key the tools act as Free (edit tokens go in the tool arguments).
With Authorization: Bearer attu_ws_… they use your paid workspace. Same limits and IP rules as the API.
claude mcp add --transport http attu https://attu.in/mcp
# paid workspace:
claude mcp add --transport http attu https://attu.in/mcp --header "Authorization: Bearer attu_ws_..."
{
"mcpServers": {
"attu": {
"type": "http",
"url": "https://attu.in/mcp",
"headers": { "Authorization": "Bearer attu_ws_..." }
}
}
}
Clients that only speak stdio: npx mcp-remote https://attu.in/mcp --header "Authorization: Bearer attu_ws_..."
Tools: publish_page, get_page, update_page, delete_page, page_stats,
workspace_usage, set_username, set_allowed_ips, start_plan, renew_plan,
change_plan, cancel_downgrade, recharge_bandwidth, list_domains, add_domain,
verify_domain, set_domain_home, delete_domain.
| ఉచితం | పర్సనల్ | టీమ్ | |
|---|---|---|---|
| Max per file | 100 KB | 50,000 KB | 2,000,000 KB |
| Max per upload (the file or .zip as sent) | 100 KB | 500,000 KB | 2,000,000 KB |
| Storage (all pages together) | each page 30 days | 2 GB | 10 GB |
| Upload | one HTML file | one file or .zip | one file or .zip |
| Pages | 15 new per day per IP | 50 | 500 |
| బ్యాండ్విడ్త్ | ఒక్కో పేజీకి నెలకు 500 MB | 1 GB per period | 10 GB per month (yearly: 120 GB) |
| సొంత డొమైన్లు | no | no | 3 |
| Kept | 30 days | while subscribed | while subscribed |
KB = 1000 bytes. A .zip may have up to 100 files. Prices: pricing.