curl --request POST \
--url https://api.nephia.cc/v1/youtube/watches \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"refresh_interval_seconds": 43230,
"query": "<string>",
"terms": [
"<string>"
],
"channel": "<string>",
"webhook_url": "<string>",
"backfill": true
}
'import requests
url = "https://api.nephia.cc/v1/youtube/watches"
payload = {
"refresh_interval_seconds": 43230,
"query": "<string>",
"terms": ["<string>"],
"channel": "<string>",
"webhook_url": "<string>",
"backfill": True
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
refresh_interval_seconds: 43230,
query: '<string>',
terms: ['<string>'],
channel: '<string>',
webhook_url: '<string>',
backfill: true
})
};
fetch('https://api.nephia.cc/v1/youtube/watches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nephia.cc/v1/youtube/watches",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'refresh_interval_seconds' => 43230,
'query' => '<string>',
'terms' => [
'<string>'
],
'channel' => '<string>',
'webhook_url' => '<string>',
'backfill' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nephia.cc/v1/youtube/watches"
payload := strings.NewReader("{\n \"refresh_interval_seconds\": 43230,\n \"query\": \"<string>\",\n \"terms\": [\n \"<string>\"\n ],\n \"channel\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nephia.cc/v1/youtube/watches")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"refresh_interval_seconds\": 43230,\n \"query\": \"<string>\",\n \"terms\": [\n \"<string>\"\n ],\n \"channel\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nephia.cc/v1/youtube/watches")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"refresh_interval_seconds\": 43230,\n \"query\": \"<string>\",\n \"terms\": [\n \"<string>\"\n ],\n \"channel\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"accountId": "<string>",
"source": "x",
"market": "<string>",
"criteria": {
"market": "<string>",
"query": "<string>",
"priceMin": 123,
"priceMax": 123,
"sort": "<string>",
"page": 123,
"perPage": 123,
"filters": {}
},
"criteriaHash": "<string>",
"refreshIntervalSeconds": 123,
"webhookUrl": "<string>",
"billingMode": "subscription",
"isActive": true,
"createdAt": "<string>",
"updatedAt": "<string>",
"pausedReason": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "Rate limit exceeded",
"code": "TOO_MANY_REQUESTS"
}Create a Youtube watch
Requires exactly one of query or channel. Metered per tick at the search credit rate. Minimum interval 60s.
curl --request POST \
--url https://api.nephia.cc/v1/youtube/watches \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"refresh_interval_seconds": 43230,
"query": "<string>",
"terms": [
"<string>"
],
"channel": "<string>",
"webhook_url": "<string>",
"backfill": true
}
'import requests
url = "https://api.nephia.cc/v1/youtube/watches"
payload = {
"refresh_interval_seconds": 43230,
"query": "<string>",
"terms": ["<string>"],
"channel": "<string>",
"webhook_url": "<string>",
"backfill": True
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
refresh_interval_seconds: 43230,
query: '<string>',
terms: ['<string>'],
channel: '<string>',
webhook_url: '<string>',
backfill: true
})
};
fetch('https://api.nephia.cc/v1/youtube/watches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nephia.cc/v1/youtube/watches",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'refresh_interval_seconds' => 43230,
'query' => '<string>',
'terms' => [
'<string>'
],
'channel' => '<string>',
'webhook_url' => '<string>',
'backfill' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nephia.cc/v1/youtube/watches"
payload := strings.NewReader("{\n \"refresh_interval_seconds\": 43230,\n \"query\": \"<string>\",\n \"terms\": [\n \"<string>\"\n ],\n \"channel\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nephia.cc/v1/youtube/watches")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"refresh_interval_seconds\": 43230,\n \"query\": \"<string>\",\n \"terms\": [\n \"<string>\"\n ],\n \"channel\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nephia.cc/v1/youtube/watches")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"refresh_interval_seconds\": 43230,\n \"query\": \"<string>\",\n \"terms\": [\n \"<string>\"\n ],\n \"channel\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"accountId": "<string>",
"source": "x",
"market": "<string>",
"criteria": {
"market": "<string>",
"query": "<string>",
"priceMin": 123,
"priceMax": 123,
"sort": "<string>",
"page": 123,
"perPage": 123,
"filters": {}
},
"criteriaHash": "<string>",
"refreshIntervalSeconds": 123,
"webhookUrl": "<string>",
"billingMode": "subscription",
"isActive": true,
"createdAt": "<string>",
"updatedAt": "<string>",
"pausedReason": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "Rate limit exceeded",
"code": "TOO_MANY_REQUESTS"
}Authorizations
API key created from the Nephia dashboard for your Account.
Headers
Unique key (e.g. UUID) making this POST safe to retry for 24 hours. Replays return the original response with an Idempotency-Replayed: true header; reusing a key with a different body returns 422.
255Body
60 <= x <= 864001Several search texts, OR'd into one upstream request. Mutually exclusive with query, and billed as one tick — the cost does not scale with the number of terms. Your plan caps how many a single search may carry.
21 - 601Show child attributes
Show child attributes
How strictly results must carry your query. Omit for the platform's own matching (default). word keeps only items containing the query as a whole word (and quotes it upstream where the platform honours quotes); contains keeps items containing it as a substring.
platform, word, contains Response
Watch created
x, reddit, youtube, tiktok, bluesky, hackernews, mastodon, lemmy, github, producthunt, stackoverflow, rss, ai_answers, vinted Show child attributes
Show child attributes
subscription, payg, deferred, metered Was this page helpful?