Developer API

Public SMM panel prices, as JSON.

The same catalog you see on SMMTicker, in a read-only API. No key or sign-up.

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.

serviceId
Our ID for this service.
extServiceId
The ID on the panel's own list.
panel, panelName
The panel's domain and name.
ratePerThousand
USD per 1,000 units, formatted for display. Null when priceUnit is not per_1000.
rateMicro
The same rate in micro-USD, for calculations.
publishedRate
The price as the panel published it.
convertedFrom
The panel's currency when we converted it to USD at a daily rate, otherwise null. Converted amounts are approximate.
total
Cost of the quantity you asked for, otherwise null.
min, max
Order limits as the panel published them.
refill, refillDays, dripfeed, cancel
Terms as the panel published them.
lastSeen
When we last saw this service on the panel's list.
sample
True 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.

quantity
Order size. Adds a total for that size to each offer and sorts by it. Without it, offers sort by rate.
refill
any, yes or no.
geo
Country code or alias, such as US or usa.
target
Audience or content type, such as video.
limit
Offers per page, 1 to 100. Default 50.
page
Page of offers, starting at 1.
panelPage
Page 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/search

Search stored services by name across every panel. Services that failed our quality checks are left out.

q
The words to search for. Under 2 characters returns nothing.
offset
Results 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/platforms

Every 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/panels

The panel directory, 50 panels per page.

q
Filter panels by name or domain.
offset
Panels 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}/services

A panel's own service list, 200 services per page.

categoryId
Only this category. IDs come from the route above.
q
Filter by service name.
offset
Services 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}/profile

Availability, 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/changes

Recent catalog changes, newest first, 50 per page.

kind
new, price, limits, removed, restored, refill, cancel or spec.
offset
Changes to skip, up to 10,000.

Returns offset, changes

Try it

GET /api/v1/market-summary

One day's totals, biggest price moves, moves seen at several panels, and changes by platform.

day
A 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/stats

Catalog totals and 14 days of daily counts.

Returns panels, services, changesToday, daily

Try it

GET /api/v1/health

Whether 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."}

400
A value has the wrong format, such as a bad day.
404
Unknown platform, category, panel or day.
429
Too many requests. Wait for the seconds in the Retry-After header, then try again.
500
Something went wrong on our side.
503
Health 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_services
Search services by name across every stored panel.
compare_offers
Compare offers for one subtype, ordered by price.
get_panel
Read one panel's public profile and catalog size.
recent_changes
List recent new, removed and repriced services.
market_summary
Read 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.