Catalogue
List services
The service catalogue: every callable service with its offers, prices, input specs and options. No authentication required.
GET
/
v1
/
services
curl https://api.socialrouter.io/v1/services
# One platform
curl https://api.socialrouter.io/v1/services/reddit
const response = await fetch("https://api.socialrouter.io/v1/services");
const { data } = await response.json();
import requests
response = requests.get("https://api.socialrouter.io/v1/services")
services = response.json()["data"]
const services = await sr.listServices();
const reddit = await sr.listServices({ platform: "reddit" });
{
"data": [
{
"platform": "reddit",
"service": "subreddit.posts",
"endpoint": "/v1/reddit/subreddit.posts",
"input_kind": "url",
"input_field": "urls",
"accepts": [
{
"format": "https://www.reddit.com/r/<subreddit>",
"example": "https://www.reddit.com/r/programming",
"pattern": "reddit\\.com\\/r\\/[^\\/?#]+(?:\\/(?:hot|new|top|rising))?\\/?(?:[?#].*)?$",
"note": "A sort suffix (/hot, /new, /top, /rising) is accepted too. /r/all and /r/popular work."
}
],
"options": [
{
"name": "sort",
"type": "enum",
"values": ["hot", "new", "top", "rising"],
"description": "Listing sort. Overrides a sort suffix present in the URL."
},
{
"name": "postedAfter",
"type": "string",
"format": "YYYY-MM-DD",
"description": "Only posts created on/after this UTC date (offer-dependent)."
}
],
"offers": [
{ "offer": "apify/harshmaur", "source": "apify", "price_per_record": 0.00276, "max_inputs": 10 },
{ "offer": "apify/trudax", "source": "apify", "price_per_record": 0.00552, "max_inputs": 10 }
]
}
]
}
{
"error": {
"code": "unknown_platform",
"message": "Unknown platform \"twitter\". Valid platforms: linkedin, instagram, x, reddit, facebook, tiktok, youtube, pinterest, bluesky, snapchat, googlemaps.",
"type": "not_found"
}
}
This endpoint does not require authentication.
The catalogue is derived at runtime from the provider registry, the same source the router dispatches on, so everything listed here is callable. It is the authoritative discovery surface for services and offers.
Filter by platform with
GET /v1/services/{platform}, or fetch a single entry with GET /v1/services/{platform}/{service}.
curl https://api.socialrouter.io/v1/services
# One platform
curl https://api.socialrouter.io/v1/services/reddit
const response = await fetch("https://api.socialrouter.io/v1/services");
const { data } = await response.json();
import requests
response = requests.get("https://api.socialrouter.io/v1/services")
services = response.json()["data"]
const services = await sr.listServices();
const reddit = await sr.listServices({ platform: "reddit" });
{
"data": [
{
"platform": "reddit",
"service": "subreddit.posts",
"endpoint": "/v1/reddit/subreddit.posts",
"input_kind": "url",
"input_field": "urls",
"accepts": [
{
"format": "https://www.reddit.com/r/<subreddit>",
"example": "https://www.reddit.com/r/programming",
"pattern": "reddit\\.com\\/r\\/[^\\/?#]+(?:\\/(?:hot|new|top|rising))?\\/?(?:[?#].*)?$",
"note": "A sort suffix (/hot, /new, /top, /rising) is accepted too. /r/all and /r/popular work."
}
],
"options": [
{
"name": "sort",
"type": "enum",
"values": ["hot", "new", "top", "rising"],
"description": "Listing sort. Overrides a sort suffix present in the URL."
},
{
"name": "postedAfter",
"type": "string",
"format": "YYYY-MM-DD",
"description": "Only posts created on/after this UTC date (offer-dependent)."
}
],
"offers": [
{ "offer": "apify/harshmaur", "source": "apify", "price_per_record": 0.00276, "max_inputs": 10 },
{ "offer": "apify/trudax", "source": "apify", "price_per_record": 0.00552, "max_inputs": 10 }
]
}
]
}
Response fields, per entry:
platform / service: the two halves of the service id. Together they form the endpoint path.endpoint: the path to POST to.input_kind: url or query.input_field: the body field carrying the inputs, urls or queries.accepts[]: every accepted input shape, each with a format, a concrete example, an informational pattern, and an optional note. An input is valid if it matches any of them.options[]: the typed options the service accepts. Empty when it takes none.offers[]: the implementations behind the service, in failover order. The head serves unless you pin another. Each carries its customer-facing price_per_record and its max_inputs batch cap.{
"error": {
"code": "unknown_platform",
"message": "Unknown platform \"twitter\". Valid platforms: linkedin, instagram, x, reddit, facebook, tiktok, youtube, pinterest, bluesky, snapchat, googlemaps.",
"type": "not_found"
}
}
Previous
Get serviceOne catalogue entry: input spec, typed options, and the offers behind a service. No authentication required.
Next
⌘I
curl https://api.socialrouter.io/v1/services
# One platform
curl https://api.socialrouter.io/v1/services/reddit
const response = await fetch("https://api.socialrouter.io/v1/services");
const { data } = await response.json();
import requests
response = requests.get("https://api.socialrouter.io/v1/services")
services = response.json()["data"]
const services = await sr.listServices();
const reddit = await sr.listServices({ platform: "reddit" });
{
"data": [
{
"platform": "reddit",
"service": "subreddit.posts",
"endpoint": "/v1/reddit/subreddit.posts",
"input_kind": "url",
"input_field": "urls",
"accepts": [
{
"format": "https://www.reddit.com/r/<subreddit>",
"example": "https://www.reddit.com/r/programming",
"pattern": "reddit\\.com\\/r\\/[^\\/?#]+(?:\\/(?:hot|new|top|rising))?\\/?(?:[?#].*)?$",
"note": "A sort suffix (/hot, /new, /top, /rising) is accepted too. /r/all and /r/popular work."
}
],
"options": [
{
"name": "sort",
"type": "enum",
"values": ["hot", "new", "top", "rising"],
"description": "Listing sort. Overrides a sort suffix present in the URL."
},
{
"name": "postedAfter",
"type": "string",
"format": "YYYY-MM-DD",
"description": "Only posts created on/after this UTC date (offer-dependent)."
}
],
"offers": [
{ "offer": "apify/harshmaur", "source": "apify", "price_per_record": 0.00276, "max_inputs": 10 },
{ "offer": "apify/trudax", "source": "apify", "price_per_record": 0.00552, "max_inputs": 10 }
]
}
]
}
{
"error": {
"code": "unknown_platform",
"message": "Unknown platform \"twitter\". Valid platforms: linkedin, instagram, x, reddit, facebook, tiktok, youtube, pinterest, bluesky, snapchat, googlemaps.",
"type": "not_found"
}
}