{"openapi":"3.1.0","info":{"title":"ContentDividend Partner API","version":"1.3","description":"Approved B2B partner API for publisher discovery and controlled licensing-request intake. Partner authentication does not grant publisher content rights.","contact":{"email":"info@contentdividend.com"}},"servers":[{"url":"https://app.contentdividend.com"}],"tags":[{"name":"Partner","description":"Partner authentication and capability status."},{"name":"Catalog","description":"Safe publisher discovery metadata. Requires catalog:read."},{"name":"Licensing Intake","description":"Publisher-controlled licensing opportunity intake. Requires licensing:intake."}],"components":{"securitySchemes":{"PartnerApiKey":{"type":"apiKey","in":"header","name":"Authorization","description":"Send: Authorization: Bearer cdpartner_live_YOUR_SECRET_KEY"}},"schemas":{"PartnerStatus":{"type":"object","properties":{"authenticated":{"type":"boolean"},"partner":{"type":"object"},"catalog_api_ready":{"type":"boolean"},"licensing_intake_ready":{"type":"boolean"}}},"CatalogPublisher":{"type":"object","description":"Safe public/discovery publisher metadata only.","properties":{"site_id":{"type":"string"},"publisher":{"type":"string"},"domain":{"type":"string"},"website_url":{"type":"string","format":"uri"},"verified":{"type":"boolean"},"registered_pages":{"type":"integer","minimum":0},"categories":{"type":"array","items":{"type":"string"}},"licensing_status":{"type":"string"},"preferred_uses":{"type":"array","items":{"type":"string"}},"rag_summary":{"type":"object"},"rights_status":{"type":"string","const":"permission_required"}}},"LicensingIntakeRequest":{"type":"object","required":["site_id","buyer_name","buyer_email","intended_use","requested_scope","message"],"properties":{"site_id":{"type":"string"},"buyer_name":{"type":"string","maxLength":120},"buyer_email":{"type":"string","format":"email"},"buyer_company":{"type":"string","maxLength":180},"intended_use":{"type":"string","maxLength":180},"requested_scope":{"type":"string","maxLength":500},"budget_range":{"type":"string","maxLength":160},"requested_timeline":{"type":"string","maxLength":180},"message":{"type":"string","maxLength":5000},"currency":{"type":"string","enum":["USD","EUR","GBP","CAD","AUD"]},"proposed_budget_cents":{"type":"integer","minimum":0},"term_months":{"type":"integer","minimum":1,"maximum":240}}},"LicensingIntakeRecord":{"type":"object","properties":{"intake_id":{"type":"string"},"partner_id":{"type":"string"},"request_id":{"type":"string"},"thread_id":{"type":"string"},"site_id":{"type":"string"},"buyer_name":{"type":"string"},"buyer_email":{"type":"string","format":"email"},"buyer_company":{"type":"string"},"intended_use":{"type":"string"},"status":{"type":"string"},"rights_status":{"type":"string","const":"request_submitted_no_rights_granted"}}},"Error":{"type":"object","properties":{"detail":{"type":"string"}}}}},"security":[{"PartnerApiKey":[]}],"paths":{"/v1/partner/status":{"get":{"tags":["Partner"],"summary":"Verify partner authentication and capabilities","responses":{"200":{"description":"Partner status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerStatus"}}}},"400":{"description":"Malformed request"},"401":{"description":"Partner API key missing or invalid"},"403":{"description":"Partner/key inactive or required scope missing"},"404":{"description":"Requested publisher or licensing request not found"},"409":{"description":"Idempotency conflict"},"422":{"description":"Request validation failed"},"429":{"description":"Partner API rate limit exceeded"}}}},"/v1/partner/catalog/search":{"get":{"tags":["Catalog"],"summary":"Search approved publisher catalog metadata","description":"Requires catalog:read. Does not return protected publisher article bodies.","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":120}},{"name":"category","in":"query","schema":{"type":"string","maxLength":120}},{"name":"preferred_use","in":"query","schema":{"type":"string","maxLength":120}},{"name":"min_registered_pages","in":"query","schema":{"type":"integer","minimum":0}},{"name":"verified","in":"query","schema":{"type":"integer","enum":[-1,0,1]}},{"name":"content_format","in":"query","schema":{"type":"string"}},{"name":"audience","in":"query","schema":{"type":"string"}},{"name":"technical_depth","in":"query","schema":{"type":"string"}},{"name":"rag_suitability","in":"query","schema":{"type":"string","enum":["high","medium","low"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Matching publisher records"},"400":{"description":"Malformed request"},"401":{"description":"Partner API key missing or invalid"},"403":{"description":"Partner/key inactive or required scope missing"},"404":{"description":"Requested publisher or licensing request not found"},"409":{"description":"Idempotency conflict"},"422":{"description":"Request validation failed"},"429":{"description":"Partner API rate limit exceeded"}}}},"/v1/partner/catalog/categories":{"get":{"tags":["Catalog"],"summary":"List live Marketplace categories","responses":{"200":{"description":"Category directory"},"400":{"description":"Malformed request"},"401":{"description":"Partner API key missing or invalid"},"403":{"description":"Partner/key inactive or required scope missing"},"404":{"description":"Requested publisher or licensing request not found"},"409":{"description":"Idempotency conflict"},"422":{"description":"Request validation failed"},"429":{"description":"Partner API rate limit exceeded"}}}},"/v1/partner/catalog/publishers/{site_id}":{"get":{"tags":["Catalog"],"summary":"Get one safe publisher catalog record","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Publisher record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogPublisher"}}}},"400":{"description":"Malformed request"},"401":{"description":"Partner API key missing or invalid"},"403":{"description":"Partner/key inactive or required scope missing"},"404":{"description":"Requested publisher or licensing request not found"},"409":{"description":"Idempotency conflict"},"422":{"description":"Request validation failed"},"429":{"description":"Partner API rate limit exceeded"}}}},"/v1/partner/licensing/requests":{"post":{"tags":["Licensing Intake"],"summary":"Submit a structured licensing opportunity","description":"Requires licensing:intake and an Idempotency-Key header. Creates a request only; no rights are granted.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":180}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicensingIntakeRequest"}}}},"responses":{"201":{"description":"Licensing request created"},"200":{"description":"Idempotent replay of an existing licensing request"},"400":{"description":"Malformed request"},"401":{"description":"Partner API key missing or invalid"},"403":{"description":"Partner/key inactive or required scope missing"},"404":{"description":"Requested publisher or licensing request not found"},"409":{"description":"Idempotency conflict"},"422":{"description":"Request validation failed"},"429":{"description":"Partner API rate limit exceeded"}}},"get":{"tags":["Licensing Intake"],"summary":"List licensing opportunities submitted by this partner","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Partner licensing request list"},"400":{"description":"Malformed request"},"401":{"description":"Partner API key missing or invalid"},"403":{"description":"Partner/key inactive or required scope missing"},"404":{"description":"Requested publisher or licensing request not found"},"409":{"description":"Idempotency conflict"},"422":{"description":"Request validation failed"},"429":{"description":"Partner API rate limit exceeded"}}}},"/v1/partner/licensing/requests/{request_id}":{"get":{"tags":["Licensing Intake"],"summary":"Read the safe status of one partner-submitted licensing request","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Licensing request status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicensingIntakeRecord"}}}},"400":{"description":"Malformed request"},"401":{"description":"Partner API key missing or invalid"},"403":{"description":"Partner/key inactive or required scope missing"},"404":{"description":"Requested publisher or licensing request not found"},"409":{"description":"Idempotency conflict"},"422":{"description":"Request validation failed"},"429":{"description":"Partner API rate limit exceeded"}}}}},"x-contentdividend-rights-boundary":"Partner API access is not a content license. Catalog discovery, licensing requests, agreement approval, payment, publisher license activation, and protected-content access remain separate states."}