# Placement API > One API for buying SEO link placements across many suppliers. Named, > inspectable domains with live prices, verified metrics and real turnaround > times, bought with prepaid credits on a single invoice. ## What it is Placement API aggregates backlink placement inventory from multiple marketplaces into one normalised catalogue, deduplicated by domain, and lets software purchase from it programmatically. ## Research and methods - /data is the live market report; every figure is a Fact with value, unit, sample size, measurement date and a method URL, also published as schema.org Dataset/PropertyValue markup (CC BY 4.0). - /research/methodology indexes the versioned methods: /research/data-sources, /research/quality-methodology (the five suspect tests with thresholds, and Placement Score v1), /research/pricing-methodology (price gap, plausibility bands, market reference: asks, never "fair value"), /research/web-graph. - /pricing is the pricing knowledge base: buyer prices by placement type (/pricing/guest-posts, link-insertions, niche-edits, homepage-links), by claimed-DR decade (/pricing/dr-20 … dr-90) and by subject (/pricing/{topic}), each with the 10/25/50/75/90th percentiles, the suspect-domain contrast and the exact /v1/quote brief that buys the slice. Pages exist only above sample floors (100 publishers a row, 300 a topic). No domain or supplier is named. - /research/backlink-price-index is the monthly Backlink Price Index: a fixed-basket composite (2026-09 = 100) plus medians by type, DR, traffic and subject, seller-gap dispersion, and a CSV per month at /research/backlink-price-index/YYYY-MM/csv. Months are immutable; cite as "Placement API Backlink Price Index, ". - Guides, hand-written with live figures: /strategies (competitor-backlink-gap, anchor-text, backlink-budget-allocation), /backlinks (guest-posts, link-insertions, niche-edits, homepage-links), /metrics (domain-rating, organic-traffic, link-survival, referring-domains, spam-score, placement-score), /glossary (verification, suspect-domain, saturated-publisher, leader-links, plausibility, market-reference, seller-gap, held-quote, standing-order, inventory-mode, restricted-content, credits, anchor-text, survival). Each ends with the brief or prompt that acts on it. - Quote research numbers with their date; they refresh hourly. ## Key semantics - metrics.verification tells you whether a domain's authority is real. "ok" means we measured it independently and its search presence matches its rating. "suspect" means high link authority with little or no organic traffic or keyword footprint, which is what a link farm looks like: do not plan around these. "unverified" means we have not measured it yet, which is not the same as a pass. metrics.quality_reasons names which of five tests fired: high_authority_no_traffic, high_authority_no_keywords, spam_score, subdomain_without_own_footprint, saturated_outbound (from the public web graph: 500+ outside domains linked to and five times as many out as in, a publisher that sells more than it earns). - Root sites carry web-graph fields: outbound_external, inbound_domains, cc_pagerank, and leader_links { topic: { linked, of } }: how many of a topic's top-ranking sites the domain links to. Publications link to what ranks; farms link to whoever pays. - Every quote line carries why[] (factual sentences behind the pick; cite them, do not parse them), relevance, and up to two alternatives held at the shown price. subdomain_of on a row means its listed DR is the parent's. - placement_score { score, version: "v1", confidence, components: { authority, visibility, quality, graph, survival }, capped } is one labelled number per publisher built only from measurements; quote it WITH its components, never sort by it, and note a suspect publisher is capped at 40. market_reference { reference_credits, vs_reference_pct, assessment, own_asks, ask_history } is the median ASK of comparable placements; say "market reference", never "fair value". supplier_reliability { band, n } is the seller's record with us as a band, never a name. survival is what happened to OUR links on the publisher over time (null under three orders). - restricted[] marks gambling, adult and piracy sites; they are excluded from plans and search unless the brief names the vertical or include_restricted. - Content: order_requirements.content says who may write the article. A supplied article is due 14 days after ordering (POST /v1/orders/{id}/content, validated against the publisher's spec); tier papi_written is a flat 1,500 credits, charged with the order. Orders in awaiting_content are paid and held, not yet with a supplier. - metrics.dr is the supplier-claimed rating, kept on the scale buyers use. metrics.verified_traffic and verified_organic_keywords are ours, measured independently. Where a claimed figure and a measured one disagree, the measured one is the one to trust. - inventory_mode: "named" means a specific, identified domain you can inspect before buying. "pre_approval" means the supplier proposes domains you approve before placement. "blind" means characteristics are guaranteed but the domain is assigned at fulfilment. Never present blind inventory as a specific site. - Prices are integer minor units. Only usd_minor is comparable across suppliers; null means not comparable, not free. - Every price carries observed_at, price_confidence and a stale flag. Prices are periodic observations, not live quotes: fresh inside the supplier's measured window (never under 72h), aged past it (still orderable, flagged with the observed date), and refused at order time past 30 days. - Credits are pegged 1:1 to US cents. - POST /v1/orders requires an Idempotency-Key header. - Supplier identity is not exposed. You buy from us; which upstream marketplace fulfils a placement is not something you can act on. /v1/sites/{domain} returns supplier_count and a per-response ordinal so a price spread is explicable without naming anyone. - offer_id values are opaque. Pass back exactly what you were given. - Rate limits: 1,000 requests and 20,000 returned rows per key per hour, max offset 10,000. Separately, a monthly read allowance that grows with credits purchased (a new account starts at 25,000 rows). Exceeding any of these returns 429 with a reason field and Retry-After. Search with filters rather than paginating the whole catalogue; the filters are there so you do not have to. ## Endpoints - GET /v1/offers search inventory (DR, price, niche, geo, language) - POST /v1/quote a brief in, a costed basket out, at a HELD price - GET /v1/sites/{domain} every way to buy one domain, cheapest first, with our verdict - GET /v1/campaigns what this account has bought for a target: domains, spend, anchor mix - GET /v1/targets/profile the target's backlink profile and how much of it we sell - POST /v1/targets/gap competitors' referring domains the target lacks, priced and held - GET /v1/keywords/winners who ranks for a keyword, who links to them, which we carry - GET /v1/market/taste what buyers, winners and the web graph say a niche's links look like - POST /v1/orders place an order (Idempotency-Key required) - POST /v1/orders/{id}/content send the article, checked against the publisher's spec - GET /v1/orders delivery state: in_progress, overdue, refund_eligible, awaiting_content - POST /v1/checkout/basket pay by card without an account - GET /v1/credits balance, spend limits, ledger entries - GET /v1/schema machine-readable description of the whole API Base URL: https://api.placementapi.com Auth: Authorization: Bearer Start here: GET /v1/schema ## MCP The same product is a remote MCP server, which is the shorter path if your host speaks MCP. URL https://api.placementapi.com/mcp Auth Authorization: Bearer Add it claude mcp add --transport http placement-api \ https://api.placementapi.com/mcp \ --header "Authorization: Bearer $PLACEMENT_KEY" Tools: search_placements, plan_links, compare_domain, check_balance, list_orders, campaign_status, target_profile, gap_map, keyword_winners. place_order, submit_content and cancel_order are listed only for a key issued with the ordering scope, so a read-only key cannot spend and is not tempted to try. ## Contact hello@placementapi.com