Dailyhunt Content Fetch API

Paginated retrieval of the content cards inside a channel, plus keyword search.

OpenAPI Specification

dailyhunt-content-fetch-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Dailyhunt Content Syndication Content Fetch API
  version: '2.3'
  description: 'The Dailyhunt Content Syndication API lets an approved partner pull Dailyhunt''s editorial catalogue into its own app, browser, device home screen or PWA. It exposes channel discovery (news, location, video and DailyShare/viral channels), paginated content fetch for the cards in a channel, keyword search across the catalogue, a supported-language list, a card feedback surface, a live cricket score and commentary stream, and a view-tracking endpoint that a partner must call back with the `trackData` of every card its user saw. Content is available in fourteen Indian languages. Every call is signed: the partner sends its API key in the `Authorization` header as `key=<API Key>` and a Base64-encoded HMAC-SHA1 `Signature` header computed over the lexicographically-sorted, URL-encoded query string plus the uppercased HTTP method, using the secret key Dailyhunt issues at onboarding. A per-user `puid` (partner unique user id) is required on every call and Dailyhunt returns a `dhFeedV1` cookie the partner must persist and replay. Access is partner-gated — API key, secret key and partner code are provisioned over email during onboarding, and the advanced surfaces (video channels, DailyShare cards, location channels, cricket) are additionally gated behind a per-partner feature mask (`pfm`).

    This OpenAPI was DERIVED by API Evangelist from Dailyhunt''s own public Partner Integration Reference (the Postman-published documentation at https://api-syndication.dailyhunt.in/, version 2.2/2.3) — every path, HTTP method, query parameter, header, response code, response field and example was transcribed from that published document and from the collection JSON it serves. It is NOT a provider-published specification. Dailyhunt publishes no machine-readable OpenAPI: probes of /openapi.json, /swagger.json and /api-docs on api-syndication.dailyhunt.in and developer.dailyhunt.in all returned HTTP 404 on 2026-08-04, and feed.dailyhunt.in does not resolve in public DNS (no A record) — the production host is reachable only to onboarded partners.'
  contact:
    name: Dailyhunt Content Syndication — Partner Integration
    url: https://api-syndication.dailyhunt.in/
  x-apievangelist-derived-from: https://api-syndication.dailyhunt.in/
  x-apievangelist-derived-source-artifact: postman/dailyhunt-content-syndication.postman_collection.json
  x-apievangelist-derived-on: '2026-08-04'
  x-apievangelist-provider-published: false
servers:
- url: http://feed.dailyhunt.in
  description: Production content feed host (partner-gated; does not resolve in public DNS as of 2026-08-04)
- url: http://qa-news.newshunt.com
  description: Stage integration environment for partner development and testing
- url: http://track.dailyhunt.in
  description: Production tracking host
security:
- ApiKeyAuth: []
  RequestSignature: []
tags:
- name: Content Fetch
  description: Paginated retrieval of the content cards inside a channel, plus keyword search.
paths:
  /api/v2/syndication/items:
    get:
      operationId: fetchItems
      summary: Fetch content cards from a channel
      description: Returns the paginated content cards (stories, videos, photos, DailyShare cards, banners, polls, HTML cards) for the channel identified by `cid`. Callers should prefer the `contentUrl` returned by the Channels API, which already carries the correct `fm` for the channel, and follow `nextPageUrl` for pagination. The response also carries the `trackUrl` and per-card `trackData` that must be POSTed back to the Tracking API.
      tags:
      - Content Fetch
      parameters:
      - $ref: '#/components/parameters/Partner'
      - name: cid
        in: query
        required: true
        description: Channel id whose content cards should be returned.
        schema:
          type: string
      - $ref: '#/components/parameters/LangCode'
      - $ref: '#/components/parameters/Ts'
      - $ref: '#/components/parameters/Puid'
      - $ref: '#/components/parameters/Pfm'
      - name: fm
        in: query
        description: Channel-level feature mask. Inherited from the channel `contentUrl`; only override when a specific change is needed for one channel.
        schema:
          type: integer
      - name: fields
        in: query
        description: Field selection modifier as published in the reference (for example `none`).
        schema:
          type: string
      - $ref: '#/components/parameters/PageSize'
      - $ref: '#/components/parameters/PageNumber'
      responses:
        '200':
          description: A paginated list of content cards.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ItemListResponse'
        '401':
          $ref: '#/components/responses/InvalidApiKey'
        '403':
          $ref: '#/components/responses/InvalidSignature'
        '500':
          $ref: '#/components/responses/ServerError'
  /api/v2/syndication/search:
    get:
      operationId: searchContent
      summary: Search content
      description: Returns content cards matching a user-supplied search query.
      tags:
      - Content Fetch
      parameters:
      - $ref: '#/components/parameters/Partner'
      - $ref: '#/components/parameters/LangCode'
      - $ref: '#/components/parameters/Ts'
      - $ref: '#/components/parameters/Puid'
      - name: query
        in: query
        required: true
        description: The user's search query.
        schema:
          type: string
      - $ref: '#/components/parameters/PageSize'
      - $ref: '#/components/parameters/PageNumber'
      responses:
        '200':
          description: A paginated list of matching content cards.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ItemListResponse'
        '401':
          $ref: '#/components/responses/InvalidApiKey'
        '403':
          $ref: '#/components/responses/InvalidSignature'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  schemas:
    Thumbnail:
      type: object
      properties:
        url:
          type: string
        width:
          type: integer
        height:
          type: integer
    ItemListResponse:
      type: object
      properties:
        code:
          type: integer
          description: HTTP status code value
        data:
          type: object
          properties:
            rows:
              type: array
              items:
                $ref: '#/components/schemas/Item'
            pageNumber:
              type: integer
              description: Current page number of the paginated data
            count:
              type: integer
              description: Total number of cards in the page
            nextPageUrl:
              type: string
              description: Next page URL; resend all its parameters plus a fresh timestamp
            trackUrl:
              type: string
              description: Tracking POST URL for this page of cards
            track:
              type: object
              description: Attribution block
              properties:
                comscoreUrls:
                  type: array
                  items:
                    type: string
                  description: ComScore pixel URLs to ping once per list view
    ShareInfo:
      type: object
      properties:
        shareString:
          type: string
          description: Complete share string with shortened share URL plus item title and source
        shareUrl:
          type: string
          description: Shortened URL to share the item
    Item:
      type: object
      description: A content card. Content types are STORY, VIDEO, PHOTO, ASTROLOGY, VHMEME, BANNER, QUESTION_MULTI_CHOICES and HTML.
      properties:
        id:
          type: string
          description: Card ID
        title:
          type: string
          description: Short title of the card
        description:
          type: string
          description: Brief content of the card
        deepLinkUrl:
          type: string
          description: Card deep link URL
        appDeepLinkUrl:
          type: string
          description: Deep link URL to open in the app if installed
        publishTime:
          type: integer
          format: int64
          description: Card publish time
        images:
          type: array
          description: Array of image URLs, templated as /{CMD}/{W}x{H}_{Q}/ for on-demand crop or resize
          items:
            type: string
        imageCount:
          type: integer
          description: Number of images in the article
        source:
          type: string
          description: Original source
        sourceLogo:
          type: string
          description: Publisher logo
        type:
          type: string
          description: Content type
        contentType:
          type: string
          description: Card content type (STORY, VIDEO, VHMEME)
        trackData:
          type: string
          description: Tracking attributes for the card
          replayed to the Tracking API: null
        uiType:
          type: string
          description: Card layout (NORMAL, HERO, TILE_3, GRID_3, GRID_5, VH_BIG, VH_SMALL, VH_FIT_BACKGROUND, GRID, TAGS, CAROUSEL)
        label:
          type: string
          description: Card label (Top, Breaking, Latest and similar)
        duration:
          type: string
          description: Video card duration when the type is video
        tags:
          type: array
          items:
            type: string
          description: Array of hashtags
        nsfw:
          type: boolean
          description: Whether the card is not safe for work
        thumbnail:
          $ref: '#/components/schemas/Thumbnail'
        shareCount:
          type: string
          description: Share count of the card
        authorName:
          type: string
          description: Author name of the card
        recommendationTs:
          type: integer
          format: int64
          description: Recommendation timestamp
          For You channel only: null
        shareInfo:
          $ref: '#/components/schemas/ShareInfo'
        collectionItems:
          type: array
          description: Nested items of the same structure (QUESTION_MULTI_CHOICES cards)
          items:
            $ref: '#/components/schemas/Item'
  parameters:
    PageNumber:
      name: pageNumber
      in: query
      description: Zero-based page number of the paginated response.
      schema:
        type: integer
    PageSize:
      name: pageSize
      in: query
      description: Number of records per page.
      schema:
        type: integer
    Pfm:
      name: pfm
      in: query
      description: Partner feature mask — the sum of the feature bits enabled for the partner or channel. LIVE_TV_CARD 1, CRICKET_CARD (brief) 8, HERO_CARD 16, VIDEO_CHANNELS 32, VIRAL_CHANNELS 64, CRICKET_CARD (detailed) 128. Bits 2 and 4 are reserved.
      schema:
        type: integer
    Ts:
      name: ts
      in: query
      required: true
      description: Current client timestamp in milliseconds; must be included in the signed parameter set.
      schema:
        type: integer
        format: int64
    Partner:
      name: partner
      in: query
      required: true
      description: The partner identification code issued by Dailyhunt at onboarding.
      schema:
        type: string
    LangCode:
      name: langCode
      in: query
      description: Content language code — one of en, hi, mr, gu, pa, bn, kn, ta, te, ml, or, ur, bh, ne.
      schema:
        type: string
    Puid:
      name: puid
      in: query
      required: true
      description: The partner's unique id for the end user accessing the API (for example a device identifier). Dailyhunt maps it to an internal user id to personalize the feed.
      schema:
        type: string
  responses:
    InvalidApiKey:
      description: Invalid API key given in the request header.
    ServerError:
      description: Any unexpected issue at Dailyhunt.
    InvalidSignature:
      description: Invalid signature given in the request header.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: The partner API key issued by Dailyhunt at onboarding, sent as `key=<API Key>`.
    RequestSignature:
      type: apiKey
      in: header
      name: Signature
      description: Base64-encoded HMAC-SHA1 of the signature base string, computed with the partner secret key. The signature base string is the URL-encoded request query parameters sorted lexicographically by encoded key and joined with `&`, followed by the uppercased HTTP method. A `ts` (timestamp) query parameter must be present in the signed parameter set.
externalDocs:
  description: Dailyhunt Content Syndication — Partner Integration Reference
  url: https://api-syndication.dailyhunt.in/