---
title: "Get a Substack publication and its subscription offering"
method: GET
path: "/substack/publication"
tags: ["Substack"]
---

# Get a Substack publication and its subscription offering

`GET /substack/publication`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/substack/publication`
- Auth: API key in header `x-api-key`

Returns a publication's public profile and its complete subscription offering: every purchasable web plan with per-currency pricing, the separately priced App Store plans, per-tier benefit copy, and the toggles governing which tiers are sold. Identify the publication by name (a subdomain such as semianalysis, or a custom domain such as www.thefp.com) or by numeric publication_id -- exactly one is required. Prefer publication_id when you have it: it reads a compact document, while resolving by name has to parse the publication's full homepage.

## Query parameters

- `publication` string
- `publication_id` integer

## Headers

- `x-api-key` string, required

## Response `200`

OK

- SubstackPublicationResponseDoc
  - `code` integer
  - `data` SubstackPublication
    - `author_id` integer
    - `copyright` string
    - `custom_domain` string
    - `explicit` boolean
    - `hero_text` string
    - `id` integer
    - `invite_only` boolean
    - `language` string
    - `logo_url` string
    - `name` string
    - `subdomain` string
    - `subscribers` SubstackSubscriberCounts
      - `follower_count` integer
      - `paid_rough` string: PaidRough and PaidRoughInt are the only paid-subscriber figures Substack publishes, and both are buckets rather than counts. PaidRoughInt is the finer of the two and is always present; PaidTier is the coarser threshold behind the public bestseller badge.
      - `paid_rough_int` integer
      - `paid_tier` integer
      - `total` integer
      - `total_display` string
      - `total_hidden` boolean
      - `total_rough` string
    - `subscription` SubstackSubscription
      - `annual_disabled` boolean
      - `app_store_plans` SubstackAppStorePlan[]
        - `active` boolean
        - `amount_cents` integer
        - `currency` string
        - `display_name` string
        - `display_price` string
        - `is_founding` boolean
        - `period` string
        - `sku` string
      - `founding_benefits` string[]
      - `founding_plan_name` string
      - `free_benefits` string[]
      - `free_trial_enabled` boolean
      - `group_discount_percent` number
      - `monthly_disabled` boolean
      - `paid_benefits` string[]
      - `payments_state` string
      - `plans` SubstackSubscriptionPlan[]
        - `active` boolean
        - `amount_cents` integer
        - `currencies` SubstackPlanCurrency[]
          - `amount_cents` integer
          - `currency` string
        - `currency` string
        - `id` string
        - `interval` string
        - `interval_count` integer
        - `kind` string
        - `nickname` string
        - `trial_period_days` integer
      - `pledges_enabled` boolean
    - `url` string
  - `msg` string

## Other responses

- `400`: Bad Request
- `404`: Not Found
- `429`: Too Many Requests
- `503`: Service Unavailable

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
