TrustLinks API Reference
Submit, manage, and batch-verify links and social accounts on behalf of users through AuthenticProfile's trusted verification engine.
TrustLinks API Reference
The TrustLinks API allows third-party platforms to submit links (social profiles, content channels, portfolio URLs, and domain links) for verification through AuthenticProfile. Submissions are individually audited and reviewed against user identity records by our verification team.
Verification Prerequisite
TrustLinks can only be submitted for users who hold an active, verified AuthenticProfile. Submissions for unverified profiles return HTTP 403 Forbidden (user_not_verified).
1. Authentication Methods
The TrustLinks API supports two authorization models:
Method 1: Direct App Client Secret Authentication (Recommended)
Make API requests server-to-server using your application's Client Secret as the Bearer token. Specify the target user's ID via the x-user-id header or inside the request JSON body:
Authorization: Bearer YOUR_APP_CLIENT_SECRET
x-user-id: 64f1a2b3c4d5e6f7a8b9c0d1
Content-Type: application/json// Server-to-server submission with App Client Secret
const response = await fetch("https://authenticprofile.com/api/trust-links", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${process.env.AUTHENTIC_CLIENT_SECRET}`,
"x-user-id": "64f1a2b3c4d5e6f7a8b9c0d1",
},
body: JSON.stringify({
links: [
{
title: "Official YouTube Channel",
url: "https://youtube.com/@myhandle",
platform: "youtube",
description: "Official creator channel",
},
],
}),
});Method 2: User-Scoped OAuth 2.0 Access Token
Standard user-delegated authorization code flow:
- Redirect user to
/oauth/authorize/consent?client_id=...&scope=profile%20trust_links:write - Exchange authorization code at
POST /api/oauth/token - Pass user access token:
Authorization: Bearer USER_ACCESS_TOKEN
2. API Endpoints
2.1. Create TrustLinks
Submit one or more links for verification on behalf of the user.
POST /api/trust-linksRequest Payload
{
"links": [
{
"title": "My YouTube Channel",
"url": "https://youtube.com/@myhandle",
"platform": "youtube",
"description": "Official company channel"
}
],
"limit": 50,
"userId": "64f1a2b3c4d5e6f7a8b9c0d1"
}Response (200 OK)
{
"success": true,
"trustLinks": [
{
"_id": "64f1b8a9c2d3e4f5a6b7c8d9",
"title": "My YouTube Channel",
"url": "https://youtube.com/@myhandle",
"platform": "youtube",
"description": "Official company channel",
"verificationStatus": "pending",
"createdAt": "2026-05-08T10:00:00.000Z"
}
]
}2.2. List TrustLinks
Retrieve all TrustLinks for the authenticated user, automatically scoped to the calling application.
GET /api/trust-links?status=verified&userId=64f1a2b3c4d5e6f7a8b9c0d1Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by verification status: pending, verified, or rejected. |
userId | string | Method 1 | Target user ID (required if authenticating with Client Secret). |
Response (200 OK)
{
"trustLinks": [
{
"_id": "64f1b8a9c2d3e4f5a6b7c8d9",
"title": "My YouTube Channel",
"url": "https://youtube.com/@myhandle",
"platform": "youtube",
"verificationStatus": "verified",
"reviewedAt": "2026-05-09T14:30:00.000Z",
"createdAt": "2026-05-08T10:00:00.000Z"
}
]
}2.3. Get Single TrustLink
Retrieve a single TrustLink by its unique identifier.
GET /api/trust-links/{id}?userId=64f1a2b3c4d5e6f7a8b9c0d1Response (200 OK)
{
"trustLink": {
"_id": "64f1b8a9c2d3e4f5a6b7c8d9",
"title": "My YouTube Channel",
"url": "https://youtube.com/@myhandle",
"platform": "youtube",
"verificationStatus": "verified"
}
}2.4. Update TrustLink
Update an existing TrustLink's title, URL, or platform.
Automatic Re-Review
Any update to an approved TrustLink automatically resets its status back to pending and initiates a priority review by our compliance team.
PUT /api/trust-links/{id}Request Payload
{
"title": "Updated Channel Name",
"url": "https://youtube.com/@newhandle",
"platform": "youtube",
"userId": "64f1a2b3c4d5e6f7a8b9c0d1"
}Response (200 OK)
{
"success": true,
"trustLink": {
"_id": "64f1b8a9c2d3e4f5a6b7c8d9",
"title": "Updated Channel Name",
"verificationStatus": "pending"
}
}2.5. Delete TrustLink
Permanently remove a TrustLink from the user's profile.
DELETE /api/trust-links/{id}?userId=64f1a2b3c4d5e6f7a8b9c0d1Response (200 OK)
{
"success": true,
"deleted": "64f1b8a9c2d3e4f5a6b7c8d9"
}2.6. Batch Check TrustLink Verification Status
Batch-check the real-time verification status of multiple links in a single HTTP request.
POST /api/trust-links/verifyRequest Payload
{
"linkIds": ["64f1b8a9c2d3e4f5a6b7c8d9", "64f2c9b1a3d5e7f8a9b0c1d2"],
"userId": "64f1a2b3c4d5e6f7a8b9c0d1"
}Response (200 OK)
{
"success": true,
"results": [
{
"id": "64f1b8a9c2d3e4f5a6b7c8d9",
"title": "My YouTube",
"status": "verified",
"reviewedAt": "2026-05-09T14:30:00.000Z"
},
{
"id": "64f2c9b1a3d5e7f8a9b0c1d2",
"title": "My Twitter",
"status": "pending",
"reviewedAt": null
}
],
"summary": {
"total": 2,
"verified": 1,
"pending": 1,
"rejected": 0,
"notFound": 0
}
}2.7. Check Social Account Verification Status
Batch-verify whether specific social media handles belonging to a user are verified on AuthenticProfile.
POST /api/social-accounts/verifyRequest Payload
{
"platforms": ["twitter", "linkedin"],
"userId": "64f1a2b3c4d5e6f7a8b9c0d1"
}Response (200 OK)
{
"success": true,
"results": [
{
"id": "soc_1",
"platform": "twitter",
"username": "myhandle",
"url": "https://twitter.com/myhandle",
"verified": true,
"verificationStatus": "verified",
"isPrimary": true
},
{
"platform": "linkedin",
"status": "not_found"
}
],
"summary": {
"total": 2,
"verified": 1,
"pending": 0,
"rejected": 0,
"unverified": 1
}
}3. Error Codes & Diagnostics
| HTTP Status | Error Code | Description |
|---|---|---|
400 Bad Request | invalid_request | Missing or malformed payload, or invalid link URL format. |
401 Unauthorized | invalid_token | Missing, expired, or invalid authorization token or secret. |
403 Forbidden | user_not_verified | Target user does not hold an active, verified AuthenticProfile. |
404 Not Found | not_found | TrustLink with specified ID does not exist or does not belong to app. |
400 Bad Request | limit_exceeded | Submission exceeds maximum batch limits (e.g. max 50 links). |
429 Too Many Requests | rate_limited | Quota exceeded. Follow Retry-After header with exponential backoff. |
500 Server Error | server_error | Unexpected internal database or platform exception. |