API
Last updated:
The API returns your own data and nothing else: the listings on your account, how they performed, the reviews people left on them, and the competitors you put on watch. It is a read API. Everything that changes data happens in the dashboard, so a leaked key can copy your numbers but cannot edit your listing, cannot spend money and cannot touch anyone else’s account.
It is free, like everything else here. Every account can issue a key from the dashboard.
The key
Create the key in your dashboard, on the Listing tools tab, in the block called Exports and API access. It looks like sl_ followed by 48 hex characters, and the dashboard shows the date it was issued.
One key per account. Pressing New key issues a fresh one and the previous key stops working at that moment. There is no grace period and no second key running in parallel, so change it when you are ready to update whatever uses it.
Rotate it if it ended up in a public repository, a shared document, a browser, or a service you stopped using. Rotation takes one click and costs nothing.
Revoke it by deleting it in the same block. The account keeps working, only the API access stops.
Treat the key like a password. Keep it on a server, in an environment variable or a secret store, never in front end code: anything in a browser is readable by whoever opens the page. We do not send CORS headers on these endpoints on purpose, so a browser page on another domain cannot call them with your key.
Calling it
Every request carries the key in the Authorization header. Base address is https://saasledge.com/api/v1.
curl -H "Authorization: Bearer sl_your_key" \
https://saasledge.com/api/v1/me
Responses are JSON with "ok": true. Errors keep the same shape with "ok": false and a short machine readable code.
| Status | Code | What it means |
|---|---|---|
| 401 | unauthorized |
No key, a malformed key, or a key that no longer exists |
| 402 | plan_required |
The key is real but the account is not on Studio |
| 429 | rate |
More than 120 requests in a minute on this key |
The limit is 120 requests per minute per key. That is generous for a nightly export and tight for a loop that forgot to stop.
GET /api/v1/me
The account behind the key and the limits everything else is counted against. Use it as a health check.
{
"ok": true,
"account": {
"email": "[email protected]",
"products": 3,
"since": "2026-08-13"
},
"key": { "issued_at": "2026-08-14 09:12:33" },
"limits": {
"products": 25,
"watches": 25
},
"rate": { "limit": 120, "per": "minute" }
}
GET /api/v1/products
Your listings with everything published on them: state, category, pricing model, plans, screenshot count, review count and average rating. Each item carries url_on_saasledge, the public address of the listing.
curl -H "Authorization: Bearer sl_your_key" \
https://saasledge.com/api/v1/products
GET /api/v1/stats
Views of your listings and clicks through to your website, grouped by day.
| Parameter | Default | Notes |
|---|---|---|
days |
30 | 1 to 365 |
product |
all | A listing slug, for example wave |
format |
json | csv returns a file with the columns product,day,views,clicks |
Days with no events are not returned. Totals are counted for you in totals, including the click rate as a percentage.
curl -H "Authorization: Bearer sl_your_key" \
"https://saasledge.com/api/v1/stats?days=90&format=csv" -o stats.csv
GET /api/v1/reviews
Published reviews on your listings, with your replies and the dates. without_reply counts the ones still waiting for an answer, which is the number worth alerting on.
| Parameter | Default | Notes |
|---|---|---|
days |
90 | 1 to 365 |
product |
all | A listing slug |
Reviewer email addresses are never returned. They are collected so we can check a review, not so they can be mailed.
GET /api/v1/watches
The competitors on your watch list: entry price now and before the last change, number of plans, free plan and trial flags, rating, review count, and the price history inside the window. The same response carries mine, the entry price and plan count of your own live listings, so a comparison needs one request rather than two.
| Parameter | Default | Notes |
|---|---|---|
days |
90 | 1 to 365, applies to the price history |
What the API will not do
It will not show another vendor’s private data, it will not write anything, and it will not export the whole catalogue. Bulk copying of the catalogue is not something we sell and not something the key opens.
Questions, or a use case that needs a field we do not return yet: write to [email protected] and say what you are building.