placementapi-com · Schema
Brief
A plan_links brief. Unknown fields are refused (400 unknown_field), not ignored: a quote built from a partly understood brief would name domains you did not choose.
CompanyAISEOMarketingBacklinksAutomationTechnology
Properties
| Name | Type | Description |
|---|---|---|
| links | integer | How many placements to plan. |
| strategy | string | Every strategy honours the same filters, quality gates, footprint cap and budget; cheapest is the default. fastest orders by turnaround, and safest prefers independently measured domains with real sea |
| budget_credits | integer | Ceiling for the whole basket, in credits. |
| placement_type | string | |
| inventory_mode | object | |
| dr_min | number | 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_min | number | 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_min | number | Minimum monthly traffic: measured where known, else claimed, else the blind guarantee floor. |
| price_max | integer | Maximum price per placement, USD minor units (cents). |
| price_min | integer | 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 | boolean | Only domains measured independently AND passed. Stricter than excluding suspect domains, because it also drops the unmeasured. |
| include_restricted | boolean | Gambling, adult and piracy sites are excluded unless topic/accepts names the vertical or this is true. |
| plausibility_min_pct | number | 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. |
| supplier | string | 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. |
| topic | object | Harmonised subject (e.g. finance, travel, health, technology). Repeatable; repeats are OR-ed. |
| accepts | object | 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 'accept |
| dr_max | number | |
| geo | object | |
| languages | object | |
| include_suspect | boolean | Suspect domains are excluded unless asked for. |
| prefer_demand | boolean | Order eligible placements by observed demand (distinct buyers in twelve months) before price. |
| prefer_leaders | boolean | Order eligible placements by leader_links for the brief's topic before price. Give a topic so the right leaders count. |
| exclude_domains_bought_for | string | A target URL or domain. Domains this account already bought for it are left out (excluded.bought_for_target). |
| exclude_domains_linking_to | string | A target URL or domain. Every domain in its backlink profile is left out (excluded.already_linking) and the response carries profile_hint. Fetches the profile if not cached (counts against the daily p |
| target_url | string | The page this plan is for. Remembered per target (campaign memory); the weekly brief and standing orders re-run it. |
| max_per_domain | integer | Ten links from one site is one relationship. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/placementapi-com/json-schema/placementapi-com-brief-schema.json",
"title": "Brief",
"description": "A plan_links brief. Unknown fields are refused (400 unknown_field), not ignored: a quote built from a partly understood brief would name domains you did not choose.",
"x-generated": "2026-10-30",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/placementapi-com-openapi.json#/components/schemas/Brief",
"type": "object",
"required": [
"links"
],
"additionalProperties": false,
"properties": {
"links": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "How many placements to plan."
},
"strategy": {
"type": "string",
"enum": [
"cheapest",
"fastest",
"safest",
"recommended"
],
"default": "cheapest",
"description": "Every strategy honours the same filters, quality gates, footprint cap and budget; cheapest is the default. fastest orders by turnaround, and safest prefers independently measured domains with real search traffic — those three change ordering only. recommended is additive and quality-first: measured-and-passed publishers before unmeasured ones, then the existing placement_score descending, with price (and offer id) only as deterministic ties and budget feasibility. In a deployment whose semantic layer runs in `rank` mode, recommended also reorders placements by a rank-usable judgment within the explicit demand/leader priorities; it omits nothing, and missing, failed or below-threshold evidence falls back to this same deterministic result and the same price. Its retrieval cut is a bounded quality proxy, not an exact global score ranking."
},
"budget_credits": {
"type": "integer",
"minimum": 1,
"description": "Ceiling for the whole basket, in credits."
},
"placement_type": {
"type": "string",
"enum": [
"guest_post",
"niche_edit",
"link_insert",
"homepage_link",
"media_placement"
]
},
"inventory_mode": {
"$ref": "#/$defs/InventoryMode"
},
"dr_min": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "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_min": {
"type": "number",
"minimum": 0,
"description": "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_min": {
"type": "number",
"minimum": 0,
"description": "Minimum monthly traffic: measured where known, else claimed, else the blind guarantee floor."
},
"price_max": {
"type": "integer",
"minimum": 1,
"description": "Maximum price per placement, USD minor units (cents)."
},
"price_min": {
"type": "integer",
"minimum": 1,
"description": "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": {
"type": "boolean",
"default": false,
"description": "Only domains measured independently AND passed. Stricter than excluding suspect domains, because it also drops the unmeasured."
},
"include_restricted": {
"type": "boolean",
"default": false,
"description": "Gambling, adult and piracy sites are excluded unless topic/accepts names the vertical or this is true."
},
"plausibility_min_pct": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "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."
},
"supplier": {
"type": "string",
"maxLength": 64,
"description": "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."
},
"topic": {
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Harmonised subject (e.g. finance, travel, health, technology). Repeatable; repeats are OR-ed."
},
"accepts": {
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "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'."
},
"dr_max": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"geo": {
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"languages": {
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"include_suspect": {
"type": "boolean",
"default": false,
"description": "Suspect domains are excluded unless asked for."
},
"prefer_demand": {
"type": "boolean",
"default": false,
"description": "Order eligible placements by observed demand (distinct buyers in twelve months) before price."
},
"prefer_leaders": {
"type": "boolean",
"default": false,
"description": "Order eligible placements by leader_links for the brief's topic before price. Give a topic so the right leaders count."
},
"exclude_domains_bought_for": {
"type": "string",
"maxLength": 2048,
"description": "A target URL or domain. Domains this account already bought for it are left out (excluded.bought_for_target)."
},
"exclude_domains_linking_to": {
"type": "string",
"maxLength": 2048,
"description": "A target URL or domain. Every domain in its backlink profile is left out (excluded.already_linking) and the response carries profile_hint. Fetches the profile if not cached (counts against the daily profile budget)."
},
"target_url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "The page this plan is for. Remembered per target (campaign memory); the weekly brief and standing orders re-run it."
},
"max_per_domain": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 1,
"description": "Ten links from one site is one relationship."
}
},
"$defs": {
"InventoryMode": {
"type": "string",
"enum": [
"named",
"pre_approval",
"blind"
],
"description": "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."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/placementapi-com-brief"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.