Truthify API Reference
The Truthify API lets you programmatically analyze content for positive attributes, negative attributes, and logical fallacies — producing integrity scores for any named individual.
All requests and responses use JSON. All endpoints require authentication via your API key. Responses follow predictable patterns — successes return the resource, errors return a message field describing what went wrong.
API Key Authentication
Every request to the Truthify API must include your API key in the x-api-key HTTP header. Your key is issued when you create an account and scoped to that account — all persons and content you create are automatically associated with it.
Your API key is provisioned when you create an smb, corporate, or enterprise account and is accessible via your account dashboard. You can rotate it at any time via the POST /rotate_api_key endpoint. Your old key is immediately invalidated on rotation.
Header format
API keys carry full account access. Do not log them, expose them in client-side code, or commit them to source control. Use environment variables or a secrets manager.
Authentication errors
curl https://api.truthify.io/v1/new_person \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "personName": "Jane Smith" }'
{ "message": "Unauthorized. Valid API key or authentication token required." }
Error Responses
All errors return a JSON body with a single message field. HTTP status codes follow standard conventions.
Rate Limits
Limits apply per account. Exceeding a limit returns a 429 response.
{ "message": "Human-readable description of the error." }
{ "message": "Missing personName in request" }
{ "message": "Internal server error" }
Creates a new person profile in your account. Returns a personId that you'll use to associate content with this person and retrieve their analysis later.
Request body
"Acme Corp")."CFO")."business").Response
personNamecurl -X POST https://api.truthify.io/v1/new_person \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "personName": "Jane Smith", "section": "Acme Corp", "position": "CFO", "group": "business" }'
{ "personId": "c25c104e-7686-42c2-9f80-772b52506514" }
{ "message": "Missing personName in request" }
{ "message": "Unauthorized. Valid API key or authentication token required." }
Submits text content for AI analysis against a specific person. The content is queued immediately and analyzed asynchronously — use GET /get_content to poll for results.
Analysis typically completes within 30–60 seconds. While processing, GET /get_content returns "status": "analyzing". Poll until you see the full result object.
Request body
personId returned from POST /new_person. Associates this content with the person being analyzed."Q3 Earnings Call Transcript"). Used in reports and the dashboard.Response
curl -X POST https://api.truthify.io/v1/upload_content \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "personId": "c25c104e-7686-42c2-9f80-772b52506514", "categoryName": "interview", "contentTitle": "Q3 Earnings Call Transcript", "content": "Today we exceeded our revenue targets by 40%..." }'
{ "message": "Content uploaded successfully and queued for analysis", "contentId": "5326022d-004f-4904-88b4-e6c4f41e83ad", "personId": "c25c104e-7686-42c2-9f80-772b52506514", "categoryName": "interview", "contentTitle": "Q3 Earnings Call Transcript", "wordCount": 142, "_meta": { "auth_type": "api_key", "request_id": "fbaba386-66c3-4195-bda2-eea0b4090530" } }
{ "message": "Invalid request. personId and content are required." }
Returns the complete profile for a person — including their overall integrity score and the full list of content reports that have been analyzed against them.
Path parameters
POST /new_person.Response fields
0 if no content has been analyzed yet.contentId, contentTitle, categoryName, overallScore, and status.Response statuses
curl https://api.truthify.io/v1/get_person/c25c104e-7686-42c2-9f80-772b52506514 \ -H "x-api-key: YOUR_API_KEY"
{ "personId": "c25c104e-7686-42c2-9f80-772b52506514", "personName": "Jane Smith", "accountId": "2317357a-a8ec-42c7-b9f6-e0698263fa6e", "section": "Acme Corp", "position": "CFO", "group": "business", "overallScore":72, "createdAt": "2025-11-08T19:35:59.595133", "reports": [ { "contentId": "5326022d-004f-4904-88b4-e6c4f41e83ad", "contentTitle": "Q3 Earnings Call Transcript", "categoryName": "interview", "overallScore": 72, "wordCount": 142, "status": "completed", "createdAt": 1762632815 } ] }
{ "message": "Person not found" }
Returns the full AI analysis for a specific piece of content. If analysis is still running, the response has "status": "analyzing" — poll every few seconds until you receive the full result.
After calling POST /upload_content, poll GET /get_content every 5 seconds. When the status field is absent and summary is present, analysis is complete.
Path parameters
POST /upload_content.Response fields (completed)
strengths, areas_of_development, areas_of_excellence, and overall_impression arrays/strings.analysisName, categoryScore, classification (low/medium/high), summary, keyindicators, evidences.Exaggeration_of_Fear, Exaggeration_of_Excitement, Unnecessary_Volunteering_of_Emotions, Deflection, Triangulation, Formal_Logical_Fallacies, Informal_Logical_Fallacies.Response statuses
"status": "analyzing"curl https://api.truthify.io/v1/get_content/c25c104e-7686-42c2-9f80-772b52506514/5326022d-004f-4904-88b4-e6c4f41e83ad \ -H "x-api-key: YOUR_API_KEY"
{ "contentId": "5326022d-004f-4904-88b4-e6c4f41e83ad", "personId": "c25c104e-7686-42c2-9f80-772b52506514", "status": "analyzing" }
{ "contentId": "5326022d-004f-4904-88b4-e6c4f41e83ad", "personId": "c25c104e-7686-42c2-9f80-772b52506514", "contentTitle": "Q3 Earnings Call Transcript", "categoryName": "interview", "createdAt": 1762632815, "summary": { "executive_summary": "The speaker demonstrates high consistency and direct communication with minimal deflection or emotional signaling.", "positiveScore": 33, "negativeScore": 96, "overallScore": 65, "conclusions": { "overall_integity_profile": "Strong integrity profile...", "strengths": [ "Outstanding consistency (90.0)", "Direct and focused communication with low deflection (15.37)" ], "areas_of_development": [ "Enhancing balance in communication (Balanced: 15.0)" ], "overall_impression": "Profile demonstrates clear, consistent integrity and reliability." } }, "detail": { "positive_attributes": [ { "analysisName": "Consistency", "categoryScore": 90.0, "classification": "high", "keyindicators": ["understanding this correctly"], "integritySignificance":"Clear query demonstrates coherent intent.", "summary": "Speaker demonstrates consistent, coherent intent.", "evidences": ["Today we exceeded our revenue targets..."] } ], "negative_attributes": [ { "analysisName": "Deflection", "categoryScore": 15.37, "classification": "low", "keyindicators": ["direct engagement"], "summary": "Low deflection shows direct engagement.", "evidences": ["Today we exceeded our revenue targets..."] } ] } }
{ "contentId": "5326022d-004f-4904-88b4-e6c4f41e83ad", "personId": "c25c104e-7686-42c2-9f80-772b52506514", "status": "not_found" }
Permanently deletes a content record and all associated S3 objects (analysis JSON and raw text). This action is irreversible.
The personId must belong to the account associated with the API key. Attempting to delete another account's content returns 404.
Path parameters
POST /upload_content.Response
curl -X DELETE https://api.truthify.io/v1/remove_content/{personId}/{contentId} \ -H "x-api-key: YOUR_API_KEY"
{ "message": "Content removed successfully", "contentId": "5326022d-004f-4904-88b4-e6c4f41e83ad", "personId": "c25c104e-7686-42c2-9f80-772b52506514" }
{ "message": "Content not found" }
Permanently deletes a person record and all associated content and S3 data for that person. This action is irreversible.
The personId must belong to the account associated with the API key. Attempting to delete another account's person returns 404.
Path parameters
POST /new_person.Response
curl -X DELETE https://api.truthify.io/v1/remove_person/{personId} \ -H "x-api-key: YOUR_API_KEY"
{ "message": "Person removed successfully", "personId": "c25c104e-7686-42c2-9f80-772b52506514" }
{ "message": "Person not found or access denied" }