API de Substack: Publicaciones
Obtén las publicaciones de cualquier sitio de Substack por su URL, o pasa la URL de una sola publicación (…/p/slug) para obtener solo ese artículo. Devuelve título, subtítulo, fecha de publicación, estado del muro de pago, número de palabras, interacción (reacciones, comentarios, restacks), perfil del autor, detalles del sitio, el cuerpo completo del artículo como texto, HTML y Markdown, y, de forma opcional, los hilos de comentarios.
US$2.62/1k resultados, pagas por solicitud, sin suscripción.
Why roadmaps are guesses
Sep · Priya Nakamura
The three-question standup
A shorter standup that actually surfaces risk
PaidSep · Priya Nakamura
Ask me anything: hiring your first PM
Reader questions from last week's thread
Sep · Priya Nakamura
Clearheaded
Recommendations
{"postId": "148302911","title": "Why roadmaps are guesses","url": "https://www.clearheaded.blog/p/why-roadmaps-are-guesses","slug": "why-roadmaps-are-guesses","postType": "newsletter","createdUtc": 1758585600,"wordcount": 2140,"authorName": "Priya Nakamura",... 22 campos más}
Precios
Precios del endpoint Publicaciones de la API de Substack
Pruébalo
Obtén Publicaciones de Substack en una sola solicitud
Este ejemplo muestra 58 de 69 campos. Ver todos los campos
{
"found": true,
"data": {
"items": [
{
"postId": "148302911",
"title": "Why roadmaps are guesses",
"url": "https://www.clearheaded.blog/p/why-roadmaps-are-guesses",
"slug": "why-roadmaps-are-guesses",
"postType": "newsletter",
"createdUtc": 1758585600,
"wordcount": 2140,
"authorName": "Priya Nakamura",
"authorHandle": "priyanakamura",
"contentStatus": "full",
"text": "Every roadmap I have shipped was a guess with a deadline attached.",
"publication": {
"id": "pub_5521",
"name": "Clearheaded",
"url": "https://www.clearheaded.blog",
"subdomain": "clearheaded",
"customDomain": "www.clearheaded.blog",
"description": "Notes on building things without lying to yourself.",
"image": "https://substackcdn.com/image/fetch/clearheaded/logo.png",
"language": "en",
"paymentsEnabled": true,
"subscriberCount": 38400
},
"comments": [
{
"commentId": "c_88213",
"text": "This matches every planning meeting I have sat through for a decade.",
"createdUtc": 1758600000,
"authorName": "Devon Okafor",
"authorHandle": "devonokafor",
"authorUrl": "https://substack.com/@devonokafor",
"authorImage": "https://substackcdn.com/image/fetch/clearheaded/devon-avatar.png",
"reactionCount": 44,
"restackCount": 2,
"isPinned": true,
"isAuthor": false,
"replies": [
{
"commentId": "c_88240",
"text": "Glad it landed. Curious how your team names the guess out loud.",
"createdUtc": 1758603600,
"authorName": "Priya Nakamura",
"authorHandle": "priyanakamura",
"authorUrl": "https://www.clearheaded.blog/people/priya-nakamura",
"authorImage": "https://substackcdn.com/image/fetch/clearheaded/priya-avatar.png",
"reactionCount": 12,
"restackCount": 0,
"isPinned": false,
"isAuthor": true
}
]
}
]
},
{
"postId": "148190442",
"title": "The three-question standup",
"url": "https://www.clearheaded.blog/p/the-three-question-standup",
"slug": "the-three-question-standup",
"subtitle": "",
"description": "A shorter standup that actually surfaces risk",
"postType": "newsletter",
"createdUtc": 1757980800,
"isPaid": true,
"language": "en",
"wordcount": 1420,
"reactionCount": 501,
"commentCount": 29,
"replyCount": 6,
"restackCount": 18,
"authorName": "Priya Nakamura",
"authorHandle": "priyanakamura",
"authorUrl": "https://www.clearheaded.blog/people/priya-nakamura",
"contentStatus": "preview_only",
"text": "Most standups answer the same three questions badly. Here is a version that takes six minutes and actually works...",
"publication": {
"id": "pub_5521",
"name": "Clearheaded",
"url": "https://www.clearheaded.blog",
"subdomain": "clearheaded"
},
"comments": []
},
{
"postId": "148075310",
"title": "Ask me anything: hiring your first PM",
"url": "https://www.clearheaded.blog/p/ask-me-anything-hiring-your-first-pm",
"slug": "ask-me-anything-hiring-your-first-pm",
"subtitle": "Reader questions from last week's thread",
"description": "Reader questions from last week's thread",
"postType": "thread",
"createdUtc": 1757376000,
"isPaid": false,
"language": "en",
"wordcount": 640,
"reactionCount": 203,
"commentCount": 41,
"replyCount": 9,
"restackCount": 5,
"authorName": "Priya Nakamura",
"authorHandle": "priyanakamura",
"authorUrl": "https://www.clearheaded.blog/people/priya-nakamura",
"contentStatus": "metadata_only",
"publication": {
"id": "pub_5521",
"name": "Clearheaded",
"url": "https://www.clearheaded.blog",
"subdomain": "clearheaded"
},
"comments": []
}
]
}
}Referencia completa de parámetros y respuesta: cada campo, tipo y ejemplo de este endpoint.
Referencia
Una solicitud, un formato de respuesta.
Cada campo que envías y cada campo que recibes, cada uno con un ejemplo real.
Verificado por última vez el 2026-11-14 · disponibilidad y latencia medidas en 30d
Cuerpo de la solicitud
JSON, enviado por POST a este endpoint.
- urlstring
https://www.clearheaded.blog
La URL o el dominio personalizado de un sitio de Substack para obtener sus publicaciones recientes (p. ej. https://www.astralcodexten.com), O la URL de una sola publicación para obtener solo ese artículo con el contenido completo (p. ej. https://www.astralcodexten.com/p/your-book-review).
- contentTypeenum
Restringe a un solo tipo de publicación, o 'all' (p. ej. newsletter).
- endDatestring
Solo devuelve publicaciones publicadas en esta fecha o antes, con el formato YYYY-MM-DD (p. ej. 2024-12-31). Se aplica dentro de las 'limit' publicaciones más recientes analizadas.
- includeCommentsboolean
Incluye los hilos de comentarios públicos y sus respuestas directas en cada publicación (p. ej. true).
- includeContentboolean
true
Incluye el cuerpo completo del artículo como texto, HTML y Markdown. Usa false para obtener solo metadatos, que es más rápido (p. ej. false).
- limitinteger
3
Cantidad máxima de publicaciones recientes que se devuelven cuando se da la URL de un sitio de Substack (1-100, predeterminado 25); se ignora con la URL de una sola publicación, que siempre devuelve esa publicación. Se cobra por cada publicación devuelta, así que un límite más bajo cuesta menos.
- maxCommentsinteger
Cantidad máxima de comentarios recopilados por publicación cuando 'includeComments' es true (0-500, predeterminado 20). No tiene costo adicional (p. ej. 50).
- minCommentsinteger
Solo devuelve publicaciones con al menos esta cantidad de comentarios (p. ej. 10).
- minReactionsinteger
Solo devuelve publicaciones con al menos esta cantidad de reacciones (p. ej. 100).
- minWordCountinteger
Solo devuelve publicaciones con al menos esta cantidad de palabras, lo que filtra notas y anuncios cortos (p. ej. 1000).
- onlyFreeboolean
Devuelve solo publicaciones gratuitas (sin muro de pago) (p. ej. true).
- startDatestring
Solo devuelve publicaciones publicadas en esta fecha o después, con el formato YYYY-MM-DD (p. ej. 2024-01-01). Se aplica dentro de las 'limit' publicaciones más recientes analizadas, así que aumenta 'limit' para llegar a rangos de fechas más antiguos.
Respuesta
JSON, un valor de ejemplo por campo.
Post records: title, subtitle, URL, publish date, paywall status, word count, engagement (reactions, comments, restacks), author profile, publication details, the article body as text, HTML and Markdown, and comment threads when requested. Populated whenever the provider has data for the entity.
- authorBiostring
Author bio as shown on their Substack profile.
- authorHandlestring
priyanakamura
Substack handle of the post author. Populated whenever the provider has data for the entity.
- authorImagestring
Profile photo URL of the post author.
- authorNamestring
Priya Nakamura
Display name of the post author. Populated whenever the provider has data for the entity.
- authorUrlstring
Substack profile URL of the post author.
- commentCountinteger
Number of top-level comments on the post.
- contentStatusstring
full
How much of the article body this record carries: 'full' for the whole article, 'preview_only' for the public excerpt of a paywalled post, 'metadata_only' when no body was requested or available, or 'failed' when extraction failed. Read this before trusting 'text', 'html', or 'markdown'. Populated whenever the provider has data for the entity.
- createdUtcnumber
1758585600
UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity.
- descriptionstring
Short post description, usually the subtitle or an excerpt.
- hasVoiceoverboolean
Whether the post carries a narrated audio version.
- htmlstring
Article body as HTML. Present when 'includeContent' is true and 'contentStatus' is 'full' or 'preview_only'.
- imagestring
Cover image URL.
- isPaidboolean
Whether the post is behind a paywall.
- languagestring
Two-letter language code of the post.
- markdownstring
Article body as Markdown. Present when 'includeContent' is true and 'contentStatus' is 'full' or 'preview_only'.
- podcastUrlstring
Audio URL for a podcast post or a narrated voiceover, when the post has one.
- postIdstring
148302911
Substack post identifier. Populated whenever the provider has data for the entity.
- postTypestring
newsletter
Post type (newsletter, podcast, or thread). Populated whenever the provider has data for the entity.
- reactionCountinteger
Number of reactions (likes) on the post.
- replyCountinteger
Number of replies to comments on the post.
- restackCountinteger
Number of times the post was restacked.
- slugstring
why-roadmaps-are-guesses
Post slug, the last path segment of the post URL. Populated whenever the provider has data for the entity.
- subtitlestring
Post subtitle or deck.
- textstring
Every roadmap I have shipped was a guess with a deadline attached.
Article body as plain text. Present when 'includeContent' is true and 'contentStatus' is 'full' or 'preview_only'.
- titlestring
Why roadmaps are guesses
Post title. Populated whenever the provider has data for the entity.
- updatedUtcnumber
UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds.
- urlstring
https://www.clearheaded.blog/p/why-roadmaps-are-guesses
Canonical post URL. Populated whenever the provider has data for the entity.
- wordcountinteger
2140
Approximate word count of the article.
Top-level comment threads on the post, each with its direct replies. Empty unless 'includeComments' is true. Replies nested more than one level deep are not returned.
- authorHandlestring
devonokafor
Substack handle of the comment author.
- authorImagestring
https://substackcdn.com/image/fetch/clearheaded/devon-avatar.png
Profile photo URL of the comment author.
- authorNamestring
Devon Okafor
Display name of the comment author.
- authorUrlstring
https://substack.com/@devonokafor
Substack profile URL of the comment author.
- commentIdstring
c_88213
Substack comment identifier.
- createdUtcnumber
1758600000
UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds.
- editedUtcnumber
UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds.
- isAuthorboolean
false
Whether the comment was written by the post author.
- isPinnedboolean
true
Whether the comment is pinned by the publication.
- reactionCountinteger
44
Number of reactions on the comment.
- restackCountinteger
2
Number of times the comment was restacked.
- textstring
This matches every planning meeting I have sat through for a decade.
Comment body text.
Direct replies to this comment.
- authorHandlestring
priyanakamura
Substack handle of the reply author.
- authorImagestring
https://substackcdn.com/image/fetch/clearheaded/priya-avatar.png
Profile photo URL of the reply author.
- authorNamestring
Priya Nakamura
Display name of the reply author.
- authorUrlstring
https://www.clearheaded.blog/people/priya-nakamura
Substack profile URL of the reply author.
- commentIdstring
c_88240
Substack comment identifier.
- createdUtcnumber
1758603600
UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds.
- editedUtcnumber
UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds.
- isAuthorboolean
true
Whether the reply was written by the post author.
- isPinnedboolean
false
Whether the reply is pinned by the publication.
- reactionCountinteger
12
Number of reactions on the reply.
- restackCountinteger
0
Number of times the reply was restacked.
- textstring
Glad it landed. Curious how your team names the guess out loud.
Reply body text.
The publication the post belongs to.
- customDomainstring
www.clearheaded.blog
Custom domain the publication is served on, when it has one.
- descriptionstring
Notes on building things without lying to yourself.
Publication tagline or hero text.
- idstring
pub_5521
Substack publication identifier.
- imagestring
https://substackcdn.com/image/fetch/clearheaded/logo.png
Publication logo URL.
- languagestring
en
Two-letter language code of the publication.
- namestring
Clearheaded
Publication name.
- paymentsEnabledboolean
true
Whether the publication sells paid subscriptions.
- subdomainstring
clearheaded
Publication subdomain on substack.com.
- subscriberCountinteger
38400
Subscriber count, when the publication publishes it.
- urlstring
https://www.clearheaded.blog
Publication home URL.
- foundboolean
true
Whether any posts were found for the request.
- reason"not_found"
Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.
Preguntas frecuentes
Acerca del endpoint Publicaciones de la API de Substack
El endpoint Publicaciones de AnyAPI para Substack devuelve datos de Substack como JSON normalizado con una sola llamada POST a /v1/run/substack.posts. Obtén las publicaciones de cualquier sitio de Substack por su URL, o pasa la URL de una sola publicación (…/p/slug) para obtener solo ese artículo. Devuelve título, subtítulo, fecha de publicación, estado del muro de pago, número de palabras, interacción (reacciones, comentarios, restacks), perfil del autor, detalles del sitio, el cuerpo completo del artículo como texto, HTML y Markdown, y, de forma opcional, los hilos de comentarios. AnyAPI devuelve un único esquema normalizado sin importar qué fuente atienda la solicitud. Cuesta US$2.62 por cada 1,000 resultados, y nunca más de US$0.265 por una sola solicitud, en dólares estadounidenses, sin suscripción y sin mínimo mensual. En los últimos 30 días, el 100.0% de las llamadas al endpoint Publicaciones de la API de Substack a través de AnyAPI tuvo éxito, con un tiempo de respuesta mediano de 3.0 segundos en 458 llamadas medidas.