Skip to main content
POST
/
v4
/
accounts
/
{accountId}
/
drafts
/
{draftId}
/
content-score
Generate Content Score
curl --request POST \
  --url 'https://api.conductor.com/v4/accounts/{accountId}/drafts/{draftId}/content-score?apiKey=&sig=' \
  --header 'Content-Type: application/json' \
  --data '
{
  "title": "How to Improve Team Communication",
  "metaDescription": "A practical guide to better collaboration.",
  "bodyCopy": "Effective communication helps teams align and execute."
}
'
import requests

url = "https://api.conductor.com/v4/accounts/{accountId}/drafts/{draftId}/content-score?apiKey=&sig="

payload = {
    "title": "How to Improve Team Communication",
    "metaDescription": "A practical guide to better collaboration.",
    "bodyCopy": "Effective communication helps teams align and execute."
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    title: 'How to Improve Team Communication',
    metaDescription: 'A practical guide to better collaboration.',
    bodyCopy: 'Effective communication helps teams align and execute.'
  })
};

fetch('https://api.conductor.com/v4/accounts/{accountId}/drafts/{draftId}/content-score?apiKey=&sig=', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.conductor.com/v4/accounts/{accountId}/drafts/{draftId}/content-score?apiKey=&sig=",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'title' => 'How to Improve Team Communication',
    'metaDescription' => 'A practical guide to better collaboration.',
    'bodyCopy' => 'Effective communication helps teams align and execute.'
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.conductor.com/v4/accounts/{accountId}/drafts/{draftId}/content-score?apiKey=&sig="

	payload := strings.NewReader("{\n  \"title\": \"How to Improve Team Communication\",\n  \"metaDescription\": \"A practical guide to better collaboration.\",\n  \"bodyCopy\": \"Effective communication helps teams align and execute.\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.conductor.com/v4/accounts/{accountId}/drafts/{draftId}/content-score?apiKey=&sig=")
  .header("Content-Type", "application/json")
  .body("{\n  \"title\": \"How to Improve Team Communication\",\n  \"metaDescription\": \"A practical guide to better collaboration.\",\n  \"bodyCopy\": \"Effective communication helps teams align and execute.\"\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.conductor.com/v4/accounts/{accountId}/drafts/{draftId}/content-score?apiKey=&sig=")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"title\": \"How to Improve Team Communication\",\n  \"metaDescription\": \"A practical guide to better collaboration.\",\n  \"bodyCopy\": \"Effective communication helps teams align and execute.\"\n}"

response = http.request(request)
puts response.read_body
{
  "overallScore": 67,
  "responseId": "6fvXaYjXAuXd_uMPg4fYwQQ",
  "intentAlignment": {
    "objectiveAssessment": {
      "detailedEvaluation": "The content provides a professional comparison of checking and savings accounts but lacks a structured head-to-head of daily-access features.",
      "summary": "Strong analogy and decision framework; needs more granular detail on physical access differences.",
      "shortSummary": "Add concrete debit/ATM access details and a direct feature comparison.",
      "overallObjectiveScore": 1,
      "improvementPriority": [
        "Compare daily access features like debit cards and ATMs.",
        "List common best-use cases for each account type."
      ]
    },
    "audienceAssessment": {
      "detailedEvaluation": "Addresses early-career adults well but omits popular features like savings buckets and round-ups.",
      "summary": "Clear, practical breakdown with a solid decision framework.",
      "shortSummary": "Integrate automation features to better serve the audience.",
      "overallAlignmentScore": 2,
      "improvementPriority": [
        "Incorporate automated round-ups and savings buckets.",
        "Refine terminology to avoid alienating non-technical readers."
      ]
    },
    "journeyStageAssessment": {
      "detailedEvaluation": "Serves the Awareness stage effectively but leans into Consideration-level vetting detail.",
      "summary": "Aligns well with Awareness by framing finance as a strategic system.",
      "shortSummary": "Solid Awareness content; focus more on lifestyle benefits.",
      "overallJourneyScore": 1,
      "improvementPriority": [
        "Deepen the 'why' with lifestyle impacts before listing criteria.",
        "Emphasize emergency funds over technical vetting frameworks."
      ]
    },
    "intentScore": 37
  },
  "topicalCoverage": {
    "questionsAssessment": {
      "questionEvaluations": [
        {
          "question": "What is a savings account and how does it work?",
          "explanation": "Defines it as a Growth Layer that earns interest to protect against inflation.",
          "score": 1
        },
        {
          "question": "Does Thrivent have a savings account?",
          "explanation": "No mention of Thrivent or specific banking brands.",
          "score": 0
        }
      ],
      "overallScore": 1,
      "summary": "High-quality strategic advice undermined by missing brand-specific answers.",
      "shortSummary": "Strong framework, missing specific brand information.",
      "improvementPriority": [
        "Address specific providers like Thrivent and Schwab.",
        "Define how checking accounts relate to debit cards."
      ]
    },
    "subtopicAssessment": {
      "subtopicEvaluations": [
        {
          "subtopic": "What checking accounts are and how they work",
          "score": 1,
          "explanation": "Defines checking as an 'operating system' for paychecks and expenses."
        }
      ],
      "overallScore": 1,
      "summary": "Solid framework that needs more detail on account linking and overdraft protection.",
      "shortSummary": "Needs detail on direct deposits and overdraft protection.",
      "improvementPriority": [
        "Detail setting up automated transfers and direct deposits.",
        "Explain how overdraft protection works between accounts."
      ]
    },
    "keyTermsAssessment": null,
    "coverageScore": {
      "score": 1,
      "scoreMatches": [
        {
          "term": "checking account",
          "termType": "IMPORTANT",
          "match": true
        },
        {
          "term": "debit card",
          "termType": "IMPORTANT",
          "match": false
        },
        {
          "term": "minimum balance",
          "termType": "SUPPORTING",
          "match": true
        },
        {
          "term": "savings goals",
          "termType": "ADDITIONAL",
          "match": true
        }
      ]
    },
    "topicalCoverageScore": 30
  }
}
{
  "code": "<string>",
  "message": "<string>"
}
{
  "detail": "<string>"
}

Authorizations

apiKey
string
query
required

API Key as a query parameter

sig
string
query
required

Request signature computed using API key and secret. Valid for 5 minutes after creation.

Path Parameters

accountId
integer
required

Account identifier

draftId
string<uuid>
required

Draft identifier

Body

application/json
title
string
required

The title associated with the content.

metaDescription
string
required

The meta description associated with the content.

bodyCopy
string
required

The text content to be evaluated.

Response

Content score

overallScore
integer

Score from 0 to 100.

responseId
string

Identifier for the request.

intentAlignment
object

Evaluates how well content aligns with the configured objective, audience, and journey stage.

topicalCoverage
object

Evaluates how thoroughly the content covers relevant questions, subtopics, and key terms.