Create a Hacker News watch
curl --request POST \
--url https://api.nephia.cc/v1/hackernews/watches \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"query": "<string>",
"refresh_interval_seconds": 43260,
"min_points": 1,
"webhook_url": "<string>",
"backfill": true
}
'import requests
url = "https://api.nephia.cc/v1/hackernews/watches"
payload = {
"query": "<string>",
"refresh_interval_seconds": 43260,
"min_points": 1,
"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({
query: '<string>',
refresh_interval_seconds: 43260,
min_points: 1,
webhook_url: '<string>',
backfill: true
})
};
fetch('https://api.nephia.cc/v1/hackernews/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/hackernews/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([
'query' => '<string>',
'refresh_interval_seconds' => 43260,
'min_points' => 1,
'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/hackernews/watches"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"refresh_interval_seconds\": 43260,\n \"min_points\": 1,\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/hackernews/watches")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"refresh_interval_seconds\": 43260,\n \"min_points\": 1,\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nephia.cc/v1/hackernews/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 \"query\": \"<string>\",\n \"refresh_interval_seconds\": 43260,\n \"min_points\": 1,\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"
}Watches
Create a Hacker News watch
Requires a search term — Hacker News has no channel or subreddit to scope to. Metered per tick at 1 credit. Minimum interval 120s.
POST
/
v1
/
hackernews
/
watches
Create a Hacker News watch
curl --request POST \
--url https://api.nephia.cc/v1/hackernews/watches \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"query": "<string>",
"refresh_interval_seconds": 43260,
"min_points": 1,
"webhook_url": "<string>",
"backfill": true
}
'import requests
url = "https://api.nephia.cc/v1/hackernews/watches"
payload = {
"query": "<string>",
"refresh_interval_seconds": 43260,
"min_points": 1,
"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({
query: '<string>',
refresh_interval_seconds: 43260,
min_points: 1,
webhook_url: '<string>',
backfill: true
})
};
fetch('https://api.nephia.cc/v1/hackernews/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/hackernews/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([
'query' => '<string>',
'refresh_interval_seconds' => 43260,
'min_points' => 1,
'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/hackernews/watches"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"refresh_interval_seconds\": 43260,\n \"min_points\": 1,\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/hackernews/watches")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"refresh_interval_seconds\": 43260,\n \"min_points\": 1,\n \"webhook_url\": \"<string>\",\n \"backfill\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nephia.cc/v1/hackernews/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 \"query\": \"<string>\",\n \"refresh_interval_seconds\": 43260,\n \"min_points\": 1,\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.
Maximum string length:
255Body
application/json
Minimum string length:
1Required range:
120 <= x <= 86400Available options:
story, comment, all Required range:
x >= 0Show 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.
Available options:
platform, word, contains Response
Watch created
Available options:
x, reddit, youtube, tiktok, bluesky, hackernews, mastodon, lemmy, github, producthunt, stackoverflow, rss, ai_answers, vinted Show child attributes
Show child attributes
Available options:
subscription, payg, deferred, metered Was this page helpful?