Catalogue

Search inventory

Filtered catalogue rows, cheapest first, one per offer (a domain carried by several suppliers appears several times; POST /v1/quote collapses that). Unknown parameters are refused with 400 unknown_parameter. Rows count against the hourly and monthly read allowances; there is no geo filter — filter on the returned geo client-side.

get/v1/offers

Request

  • Base URL: https://api.placementapi.com
  • URL: https://api.placementapi.com/v1/offers
  • Auth: HTTP bearer

Query parameters

placement_type'guest_post' | 'niche_edit' | 'link_insert' | 'homepage_link' | 'media_placement'

Placement type.

inventory_mode'named' | 'pre_approval' | 'blind'

The most important field. 'named' = a specific, identified domain you can inspect before ordering. 'pre_approval' = the vendor proposes candidate domains and the buyer approves them BEFORE placement. 'blind' = a promise (e.g. DR50+, finance) where the domain is assigned at fulfilment with no veto. Only 'named' carries a site_id. Never present a pre_approval or blind offer as though a specific site were secured, and never price-compare a specification against a named domain as the same product.

named | pre_approval | blind.

dr_minnumber

Minimum DR, 0-100. Matches the site's claimed DR, or the vendor's guaranteed minimum on blind inventory. Never the measured verified_dr, which is on a 0-1000 scale.

rd_minnumber

Minimum guaranteed Majestic referring domains. Only blind tiers sold on RD carry this guarantee; the RD and DR scales are never translated into each other.

traffic_minnumber

Minimum monthly traffic: measured where known, else claimed, else the blind guarantee floor.

price_maxinteger

Maximum price per placement, USD minor units (cents).

price_mininteger

Price floor, USD minor units. A quality filter, not a budget one: a price far below the going rate for the claimed DR is evidence the DR was bought.

verified_only'true' | 'false' | '1' | '0'

Only domains measured independently AND passed. Stricter than excluding suspect domains, because it also drops the unmeasured.

include_restricted'true' | 'false' | '1' | '0'

Gambling, adult and piracy sites are excluded unless topic/accepts names the vertical or this is true.

plausibility_min_pctnumber

Keep only placements at or above this percentile of their own price band (placement type x inventory mode x claimed-DR decade). The measured form of price_min.

supplierstring

Opaque supplier token taken from the prefix of any offer_id. Filters to one source without naming it. Real supplier names are not accepted and match nothing.

nichestring

The supplier's own raw label. Prefer topic.

topicstring[]

Harmonised subject (e.g. finance, travel, health, technology). Repeatable; repeats are OR-ed.

acceptsstring[]

Restricted vertical the placement must accept (crypto, gambling, cbd, vape, adult, dating, pharma, forex). Repeatable; repeats are AND-ed. An empty accepts array on an offer means UNKNOWN, not 'accepts nothing'.

limitinteger

Rows per page.

offsetinteger

Maximum 10,000: the catalogue is for searching, not enumerating.

Response

OK

configuredboolean
countinteger
limitinteger
offsetinteger

Example response

{
  "offers": [
    {
      "plausibility": {
        "band": "guest_post named DR 50-59"
      }
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.