API Substack Post della pubblicazione

POST

Stato di salute dell'API

Operatività nelle ultime 24 ore
Normale
  • Buono / normale
  • Disponibile
  • Limitato
  • Quasi del tutto inattivo
Normale

Ultime 24 ore

Ultimi 30 giorni

Elenca i post di una pubblicazione Substack. Ogni post ha titolo, sottotitolo, autore, like, commenti, numero di parole, tempo di lettura e stato a pagamento. Restringi per formato con content_type o per data con since e until. Il testo dietro paywall resta bloccato, e un batch potrebbe non coprire l'intero archivio.

Invia POST https://api.everyinfra.com/api/v1/social con platform impostato su substack e action impostato su publication_posts. Prezzo $1.39 per 1.000 richieste ($0.001389 per chiamata). Le chiamate non riuscite e i risultati vuoti non vengono addebitati. Sincrona. Per i job più lenti, aggiungi "mode": "async" al corpo della richiesta, recupera il job_id ed esegui il polling.

Prompt per l'AI

#
Aiutami a scrivere uno script di raccolta dei dati con l'endpoint Substack Post della pubblicazione di EveryInfra (substack/publication_posts).

Come funziona l'endpoint:
- Richiesta: POST https://api.everyinfra.com/api/v1/social con l'header Authorization: Bearer <chiave API>. Leggi la chiave dalla variabile d'ambiente EVERYINFRA_API_KEY e non scriverla mai direttamente nel codice.
- Nel corpo della richiesta imposta platform su substack e action su publication_posts, e inserisci i parametri in params.
- Parametri obbligatori:
  - url: Specifica il link alla risorsa Substack di destinazione. Usa la home page della pubblicazione per publication e publication_posts, oppure link diretti /p/ ai post per post e comments.
- Parametri facoltativi:
  - content_type: Filtra i post della pubblicazione per formato con all_types, newsletter_posts_only, podcast_episodes_only o threads_only. (valori consentiti: all_types / newsletter_posts_only / podcast_episodes_only / threads_only)
  - since: Specifica la data di inizio, come stringa, per filtrare post o feed di attività in un intervallo di date.
  - until: Specifica la data di fine, come stringa, per filtrare post o feed di attività insieme a since.
  - limit: Numero massimo di righe da restituire in questa chiamata: un intero da 1 a 30. Se lo ometti, viene applicato il valore predefinito; una chiamata può restituire meno righe. (predefinito: 10)
- Restituisce un elenco di record. Campi principali di ogni record: id, url, title, subtitle, text, author_name, author_username, publication_name, publication_handle, publication_url, like_count, comment_count; 23 campi in totale, elenco completo su https://api.everyinfra.com/api/v1/social/catalog?platform=substack.
- Esempio di corpo della richiesta:
{
  "platform": "substack",
  "action": "publication_posts",
  "params": {
    "url": "https://astralcodexten.substack.com"
  }
}
- Prezzo: $1.39 per 1.000 richieste; le richieste non riuscite e i risultati vuoti non vengono addebitati.
- Per decine o centinaia di target, aggiungi "mode": "async" al corpo: ricevi subito un job_id ed esegui il polling su GET https://api.everyinfra.com/api/v1/jobs/{job_id} per ottenere il risultato.
- In caso di 422, correggi la richiesta usando i nomi dei parametri e i valori consentiti suggeriti nell'errore; in caso di 429 o 503, attendi il tempo indicato da Retry-After e riprova.

Prima di scrivere il codice, chiedimi quali target mi servono, quanti, quali campi e quale formato di output voglio; poi conferma con me il piano e il costo indicativo.

Parametri della richiesta

#
NomePosizioneTipoObbligatorioPredefinitoDescrizione
AuthorizationheaderstringSì-Bearer seguito dalla tua chiave API. Creala nella console; non inserirla mai in un URL o in un repository di codice.
platformbodystringSìsubstackIdentificativo della piattaforma, valore fisso.
actionbodystringSìpublication_postsIdentificativo della funzionalità, valore fisso.
urlbody.paramsstringSì-Specifica il link alla risorsa Substack di destinazione. Usa la home page della pubblicazione per publication e publication_posts, oppure link diretti /p/ ai post per post e comments. L'azione publication richiede un URL con un handle Substack riconoscibile (i domini personalizzati potrebbero non essere interpretati), mentre publication_posts accetta direttamente link con domini personalizzati.
content_typebody.paramsstring (enum)No-Filtra i post della pubblicazione per formato con all_types, newsletter_posts_only, podcast_episodes_only o threads_only. La presenza del campo va verificata nei link dei singoli post e impostare questo valore non sblocca i contenuti dietro paywall.Valori consentitiall_typesnewsletter_posts_onlypodcast_episodes_onlythreads_only
sincebody.paramsdateNo-Specifica la data di inizio, come stringa, per filtrare post o feed di attività in un intervallo di date. La sua presenza tra i parametri condivisi di profile o publication non abilita il filtro per data di creazione dell'account.
untilbody.paramsdateNo-Specifica la data di fine, come stringa, per filtrare post o feed di attività insieme a since. Questo parametro non rappresenta la data di scadenza dell'abbonamento né avvia un'esportazione completa dell'archivio storico.
limitbody.paramsinteger (1–30)No10Numero massimo di righe da restituire in questa chiamata: un intero da 1 a 30. Se lo ometti, viene applicato il valore predefinito; una chiamata può restituire meno righe. I valori più alti restituiscono 422 prima di qualsiasi addebito.

Esempi di codice

#
bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "substack",
  "action": "publication_posts",
  "params": {
    "url": "https://astralcodexten.substack.com"
  }
}'

Definizione OpenAPI (JSON)Gli esempi leggono la chiave dalla variabile d'ambiente EVERYINFRA_API_KEY; il codice copiato non contiene mai la tua chiave.

Esempio di risposta

#
Acquisita il September 26, 2026 at 08:56 (UTC) chiamando questa API con i parametri dell'esempio di codice qui sopra. results e count sono la risposta reale di quella chiamata, da cui sono state rimosse le informazioni personali (nomi, handle, avatar, link ai profili, recapiti); l'elenco conserva i primi 2. id, billing e quota cambiano a ogni chiamata, quindi ne viene mostrata solo la struttura.
json
{  "id": "req_…",  "platform": "substack",  "action": "publication_posts",  "results": [    {      "id": 210681369,      "url": "https://www.astralcodexten.com/p/your-book-review-lee-kuan-yews-memoirs",      "title": "Your Book Review: Lee Kuan Yew's Memoirs",      "subtitle": "Finalist #10 in the Book Review Contest",      "text": "Finalist #10 in the Book Review Contest",      "author_name": "•••",      "author_username": "•••",      "publication_name": "Astral Codex Ten",      "publication_url": "https://www.astralcodexten.com",      "like_count": 139,      "comment_count": 31,      "repost_count": 2,      "word_count": 5683,      "post_type": "newsletter",      "audience": "everyone",      "is_paid": false,      "image_url": "https://substack-post-media.s3.amazonaws.com/public/images/3d745943-c11a-4ff0-9c6a-aaf91333ac9f_2546x2560.jpeg",      "posted_at": "2026-09-25T22:26:10.306000+00:00",      "updated_at": "2026-09-25T22:30:06.391000+00:00",      "platform": "substack"    },    {      "id": 215593613,      "url": "https://www.astralcodexten.com/p/fall-meetups-2026-call-for-meetup",      "title": "Fall Meetups 2026 - Call For Meetup Organizers",      "subtitle": "...",      "text": "...",      "author_name": "•••",      "author_username": "•••",      "publication_name": "Astral Codex Ten",      "publication_url": "https://www.astralcodexten.com",      "like_count": 46,      "comment_count": 18,      "repost_count": 0,      "word_count": 2086,      "post_type": "newsletter",      "audience": "everyone",      "is_paid": false,      "image_url": "https://substack-post-media.s3.amazonaws.com/public/images/53c58a6c-168a-4394-8fd1-2c4335f9eb12_1000x667.jpeg",      "posted_at": "2026-09-25T06:06:18.720000+00:00",      "updated_at": "2026-09-25T06:11:54.223000+00:00",      "platform": "substack"    }  ],  "count": 10,  "billing": {    "charged": …,    "charged_usd": …,    "balance_after_usd": …,    …  },  "quota": { … }}

Campi della risposta

#

I dati di business si trovano in results. La tabella elenca i campi che un record può contenere; i valori che la piattaforma non mostra non vengono mai inventati.

CampoSignificato
idID univoco del record sulla piattaforma. È univoco solo all'interno di una piattaforma; gli ID possono ripetersi tra piattaforme diverse.
urlLink al record sulla piattaforma.
titleTitolo. null quando la piattaforma non prevede titoli (ad esempio post di solo testo).
subtitleMantiene il significato attribuito dalla piattaforma
textTesto del contenuto senza HTML, restituito per intero e mai troncato (su alcune piattaforme i risultati degli elenchi contengono solo un estratto; lo indicano le note sui campi della piattaforma).
author_nameNome visualizzato dell'autore.
author_usernameUsername dell'autore (@handle), di solito utilizzabile negli URL.
publication_nameMantiene il significato attribuito dalla piattaforma
publication_handleMantiene il significato attribuito dalla piattaforma
publication_urlMantiene il significato attribuito dalla piattaforma
like_countLike. null significa che la piattaforma o questa funzionalità non li rende noti; non equivale a 0.
comment_countCommenti. null significa non resi noti, non 0.
repost_countRepost (distinti dai post con citazione). null significa non resi noti.
word_countMantiene il significato attribuito dalla piattaforma
reading_time_minutesMantiene il significato attribuito dalla piattaforma
post_typeMantiene il significato attribuito dalla piattaforma
audienceMantiene il significato attribuito dalla piattaforma
is_paidMantiene il significato attribuito dalla piattaforma
podcast_urlMantiene il significato attribuito dalla piattaforma
image_urlLink all'immagine. Le funzionalità con più immagini possono restituire un array image_urls.
posted_atData e ora di pubblicazione in formato ISO 8601, UTC (ad esempio 2026-08-07T12:34:56+00:00). Le stringhe non standard della piattaforma vengono passate così come sono, quindi esegui il parsing in modo difensivo. null significa che la piattaforma non le rende note.
updated_atMantiene il significato attribuito dalla piattaforma
tagsArray di tag. Se non ce ne sono, è un array vuoto, non null.
platformIdentificativo della piattaforma di origine, uguale a platform nella richiesta (ad esempio xiaohongshu, tiktok).

Errori e addebiti

#
401
Chiave mancante o non valida.
402
Saldo insufficiente. Effettua prima una ricarica.
422
Nome o valore del parametro non valido. Correggilo seguendo i suggerimenti dell'errore. Nessun addebito.
429
Raggiunto il limite di richieste al minuto. Attendi il tempo indicato da Retry-After, poi riprova.
503
Impossibile completare. L'importo trattenuto torna sul tuo saldo. Se l'esito è incerto, verificalo prima di riprovare.
Risposta 200 vuota
Nessun dato. Nessun addebito.

Errori

Riferimenti ufficiali

#

Usati solo per verificare oggetti e terminologia. Non implicano alcuna autorizzazione o approvazione di EveryInfra da parte della piattaforma.

  • Substack: formati articolo, audio e video e permessi sui contenuti ↗

    Substack classifica i post di testo, audio e video come formati di contenuto distinti e mantiene una netta separazione tra materiali pubblici e articoli privati. Il parametro `content_type` in questa pagina usa i propri valori ammessi, che non aggiungono tipi video né garantiscono che filtro e recupero siano verificati su ogni percorso di esecuzione.

    Verificato il 2026-09-04

Le nostre statistiche di visita interne sono sempre attive. Google Analytics viene caricato solo se scegli «Consenti analisi». Informativa sulla privacy