Quick start Ask for the cheapest Instagram followers for an order of 1,000. There is nothing to set up first.
curl "https://smmticker.com/api/v1/offers/instagram/followers?quantity=1000&limit=1"You get JSON back. This example is shortened and its values are made up:
{
"pagination": { "page": 1, "pageSize": 1, "total": 121208, "totalPanels": 1540, "hasNext": true },
"offers": [
{
"serviceId": 1234,
"name": "Instagram Followers | Max 500K",
"panel": "example-panel.com",
"ratePerThousand": "$0.0800",
"rateMicro": 80000,
"publishedRate": "TRY 4.00",
"convertedFrom": "TRY",
"priceUnit": "per_1000",
"min": 100,
"max": 500000,
"refill": false,
"lastSeen": "2026-11-04T04:10:14.003Z",
"total": "$0.0800"
}
]
}The basics
Base address https://smmticker.com
Access Open. Every route uses GET, returns JSON and needs no key.
From a browser Cross-origin requests (CORS) are not enabled, so browser code on another site cannot read the answers. Call the API from your server.
Caching Responses are marked no-store. Keep your own copy when you can, rather than asking again.
Changes The API is still new and fields can change. Read fields by name and ignore any you do not recognize. Reading the data Prices are observed, not tested. We do not place orders or measure delivery, so a low price says nothing about quality.Micro-USD. rateMicro, rate_micro, median_rate, min_rate, oldRate and newRate are micro-USD per 1,000 units, where 1,000,000 equals $1.Numbers as strings. Large values, such as median_rate and rate_micro, can arrive as strings. Convert them before doing math.The offer object Comparison and search routes return offers with these fields, among others.
serviceIdOur ID for this service.
extServiceIdThe ID on the panel's own list.
panel, panelNameThe panel's domain and name.
ratePerThousandUSD per 1,000 units, formatted for display. Null when priceUnit is not per_1000.
rateMicroThe same rate in micro-USD, for calculations.
publishedRateThe price as the panel published it.
convertedFromThe panel's currency when we converted it to USD at a daily rate, otherwise null. Converted amounts are approximate.
totalCost of the quantity you asked for, otherwise null.
min, maxOrder limits as the panel published them.
refill, refillDays, dripfeed, cancelTerms as the panel published them.
lastSeenWhen we last saw this service on the panel's list.
sampleTrue for illustrative panels that are not real. Compare prices The same comparisons as the site, ordered by price. Rank is never for sale, and services we could not classify with confidence are left out.
GET /api/v1/offers/{platform}/{category}Offers across one category, such as Instagram followers.
quantityOrder size. Adds a total for that size to each offer and sorts by it. Without it, offers sort by rate.
refillany, yes or no.
geoCountry code or alias, such as US or usa.
targetAudience or content type, such as video.
limitOffers per page, 1 to 100. Default 50.
pagePage of offers, starting at 1.
panelPagePage of the panel summary, 50 panels each. Returns category, indexable, filters, pagination, offers, panels, subtypes
Try it GET /api/v1/offers/{platform}/{category}/{subtype}Offers for one subtype inside a category. Subtype slugs come from the subtypes list on the category route.
Takes the same filters as the category route.
Returns The same shape, for one subtype
GET /api/v1/searchSearch stored services by name across every panel. Services that failed our quality checks are left out.
qThe words to search for. Under 2 characters returns nothing.
offsetResults to skip, up to 1,000. Each page has 50. Has its own limit of 60 requests per minute for each IP address.
Returns query, offset, results
Try it Browse the catalog Use these to find the platform and category slugs that the comparison routes need.
GET /api/v1/platformsEvery platform, with its offer and panel counts.
Returns platforms
Try it GET /api/v1/platforms/{platform}One platform and its categories, each with its median and lowest rate.
Returns platform, categories
Try it Panels Domains are lowercase hostnames, such as example.com.
GET /api/v1/panelsThe panel directory, 50 panels per page.
qFilter panels by name or domain.
offsetPanels to skip. Returns panels
Try it GET /api/v1/panels/{domain}One panel and its service categories.
Returns panel, categories
GET /api/v1/panels/{domain}/servicesA panel's own service list, 200 services per page.
categoryIdOnly this category. IDs come from the route above.
qFilter by service name.
offsetServices to skip. Services here use the stored field names, such as rate_micro and min_qty, and differ from the offer object below.
Returns panel, services
GET /api/v1/panels/{domain}/profileAvailability, catalog activity, user reviews and external reputation, kept as separate evidence. There is no combined score.
Illustrative sample panels answer 404.
Returns panel, availability, catalogActivity, userReviews, externalReputation, observations, method, generatedAt
Market activity Times are UTC and mark when we observed a change, not when the panel made it.
GET /api/v1/changesRecent catalog changes, newest first, 50 per page.
kindnew, price, limits, removed, restored, refill, cancel or spec.
offsetChanges to skip, up to 10,000. Returns offset, changes
Try it GET /api/v1/market-summaryOne day's totals, biggest price moves, moves seen at several panels, and changes by platform.
dayA UTC day as YYYY-MM-DD. Defaults to the latest full day. Returns day, totals, drops, rises, sizes, signals, panels, platforms, platformDetails, catalogChecks, lastObservedAt
Try it GET /api/v1/statsCatalog totals and 14 days of daily counts.
Returns panels, services, changesToday, daily
Try it GET /api/v1/healthWhether the service and its database are up. Answers 503 when the database is not.
Returns ok, db
Try it Errors Errors use the usual status codes and a short message: {"error":"Panel not found."}
400A value has the wrong format, such as a bad day.
404Unknown platform, category, panel or day.
429Too many requests. Wait for the seconds in the Retry-After header, then try again.
500Something went wrong on our side.
503Health route only: the database is not reachable. MCP for AI tools AI assistants can read the same data through a public, read-only Model Context Protocol server at https://smmticker.com/mcp. It takes JSON-RPC 2.0 over POST, needs no key or session, and allows 60 requests per minute for each IP address.
search_servicesSearch services by name across every stored panel.
compare_offersCompare offers for one subtype, ordered by price.
get_panelRead one panel's public profile and catalog size.
recent_changesList recent new, removed and repriced services.
market_summaryRead one day's market summary. curl -X POST "https://smmticker.com/mcp" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"recent_changes","arguments":{"limit":1}}}'Feeds To follow the market without polling the API, use one of these.
Limits and fair use Read only. You cannot place orders through this API. SMMTicker sells nothing and takes no orders.No account features. Follows, alerts and webhooks are not available through the API.60 requests per minute. Each IP address gets 60 requests per minute across the catalog routes, plus a separate 60 for search and 60 for MCP. Above that, routes answer 429 until the minute is up. The health route and the OpenAPI file are not limited.No uptime promise. Do not build anything that fails if the API is briefly away.Say where it came from. If you publish this data, please name SMMTicker and the observed date, and do not call a panel better or more reliable because of its price.Our terms of use apply, and our methodology explains how the data is collected. Need something this API does not offer? Get in touch .