Manual Reports

Submit reports for content or accounts across supported platforms

The Manual Reports API allows you to programmatically submit reports for infringing content or accounts across supported platforms. Reports are processed asynchronously, and you can poll for status updates until completion.

Workflow overview

  1. List your entities — Retrieve the entities (brands/products) configured for your profile.
  2. Get supported platforms — Check which platforms are available for content and account reports.
  3. Submit manual reports — Create one or more reports with the appropriate input type.
  4. Poll for status — Use the returned manualReportId to check processing status.

Endpoints

  • GET /entities — List entities available for your profile.
  • GET /manual-reports/supported-platforms — List platforms available for manual reporting.
  • POST /manual-reports — Submit one or more manual reports.
  • GET /manual-reports/{manualReportId} — Check the status of a manual report.

Step 1: List entities

Entities represent the brands, products, or assets you’re protecting. You’ll need an entity ID when submitting reports.

$curl --request GET "https://app.outtake.ai/api/v1/entities" \
> --header "Authorization: Bearer YOUR_API_KEY"

Response:

1{
2 "data": {
3 "entities": [
4 {
5 "id": "123e4567-e89b-12d3-a456-426614174000",
6 "name": "My Brand"
7 }
8 ]
9 }
10}

Store entity IDs for use in subsequent report submissions.

Step 2: Get supported platforms

Before submitting reports, check which platforms are available based on your subscription. Platforms are grouped by report type.

$curl --request GET "https://app.outtake.ai/api/v1/manual-reports/supported-platforms" \
> --header "Authorization: Bearer YOUR_API_KEY"

Response:

1{
2 "data": {
3 "content": [
4 { "platform": "instagram", "displayName": "Instagram" },
5 { "platform": "facebook", "displayName": "Facebook" },
6 { "platform": "youtube", "displayName": "YouTube" },
7 { "platform": "tiktok", "displayName": "TikTok" },
8 { "platform": "x", "displayName": "X" }
9 ],
10 "account": [
11 { "platform": "instagram", "displayName": "Instagram" },
12 { "platform": "facebook", "displayName": "Facebook" },
13 { "platform": "x", "displayName": "X" },
14 { "platform": "telegram", "displayName": "Telegram" }
15 ]
16 }
17}

Use the platform value (not displayName) when creating reports.

Step 3: Submit manual reports

Submit reports for content or accounts. You can batch up to 100 reports in a single request.

Input types

The API supports three input types depending on the platform:

Input TypeDescriptionPlatforms
urlURL of the content or accountMost platforms
emailRaw email headers and contentEmail
whatsapp_groupWhatsApp group detailsWhatsApp

URL-based report

$curl --request POST "https://app.outtake.ai/api/v1/manual-reports" \
> --header "Authorization: Bearer YOUR_API_KEY" \
> --header "Content-Type: application/json" \
> --data '{
> "reports": [
> {
> "inputType": "url",
> "alertType": "content",
> "platform": "instagram",
> "entityId": "123e4567-e89b-12d3-a456-426614174000",
> "url": "https://instagram.com/p/ABC123",
> "remediationAction": "flagAndReport",
> "additionalContext": "Counterfeit product listing"
> }
> ]
> }'

Email report

$curl --request POST "https://app.outtake.ai/api/v1/manual-reports" \
> --header "Authorization: Bearer YOUR_API_KEY" \
> --header "Content-Type: application/json" \
> --data '{
> "reports": [
> {
> "inputType": "email",
> "alertType": "content",
> "platform": "email",
> "entityId": "123e4567-e89b-12d3-a456-426614174000",
> "headersAndContent": "From: scammer@example.com\nSubject: Urgent Account Verification\nDate: Mon, 15 Jan 2026 10:00:00 GMT\n\nDear customer, your account has been compromised...",
> "remediationAction": "flag"
> }
> ]
> }'

WhatsApp group report

$curl --request POST "https://app.outtake.ai/api/v1/manual-reports" \
> --header "Authorization: Bearer YOUR_API_KEY" \
> --header "Content-Type: application/json" \
> --data '{
> "reports": [
> {
> "inputType": "whatsapp_group",
> "alertType": "account",
> "platform": "whatsapp",
> "entityId": "123e4567-e89b-12d3-a456-426614174000",
> "groupName": "Investment Opportunity",
> "adminPhoneNumber": "1234567890",
> "adminCountryCode": "+1",
> "attachments": [
> {
> "id": "att-001",
> "name": "screenshot.png",
> "url": "https://example.com/evidence/screenshot.png"
> }
> ],
> "remediationAction": "flagAndReport"
> }
> ]
> }'

Request fields

FieldTypeRequiredDescription
inputTypestringYesOne of: url, email, whatsapp_group
alertTypestringYesEither content or account
platformstringYesPlatform identifier from supported platforms
entityIdstring (UUID)YesEntity to associate with the report
remediationActionstringYesAction to take: upload, flag, or flagAndReport
urlstringURL inputURL of the content or account
headersAndContentstringEmail inputRaw email with headers
groupNamestringWhatsApp inputName of the WhatsApp group
adminPhoneNumberstringWhatsApp inputPhone number of group admin
adminCountryCodestringWhatsApp inputCountry code (e.g., +1)
attachmentsarrayWhatsApp inputEvidence attachments
additionalContextstringNoOptional context about the report

Remediation actions

ActionDescription
uploadIngest the content only (no action taken)
flagIngest and flag the content as an alert
flagAndReportFlag the content and submit a report to the platform

Response

1{
2 "data": {
3 "results": [
4 {
5 "success": true,
6 "manualReportId": "abc12345-6789-def0-1234-567890abcdef",
7 "index": 0
8 }
9 ],
10 "successCount": 1,
11 "failureCount": 0
12 }
13}

Store the manualReportId to check the status of each report.

Step 4: Check report status

Poll the status endpoint to track report processing.

$curl --request GET "https://app.outtake.ai/api/v1/manual-reports/abc12345-6789-def0-1234-567890abcdef" \
> --header "Authorization: Bearer YOUR_API_KEY"

Status values

StatusDescription
pendingReport is being processed
successReport processed successfully, alert created
failedProcessing failed (see message for details)
rejectedReport was rejected (see message for reason)

Pending response

1{
2 "data": {
3 "manualReportId": "abc12345-6789-def0-1234-567890abcdef",
4 "alertType": "content",
5 "platform": "instagram",
6 "createdAt": "2026-01-15T10:30:00.000Z",
7 "statusDetails": {
8 "status": "pending",
9 "message": "Manual report is being processed"
10 }
11 }
12}

Success response

1{
2 "data": {
3 "manualReportId": "abc12345-6789-def0-1234-567890abcdef",
4 "alertType": "content",
5 "platform": "instagram",
6 "createdAt": "2026-01-15T10:30:00.000Z",
7 "statusDetails": {
8 "status": "success",
9 "message": "Report processed successfully",
10 "alert": {
11 "alertId": "999e8888-7777-6666-5555-444433332222",
12 "platform": "instagram",
13 "url": "https://instagram.com/p/ABC123",
14 "alertCreatedAt": "2026-01-15T10:31:00.000Z"
15 }
16 }
17 }
18}

Batch submissions

You can submit up to 100 reports in a single request. Each report is processed independently.

$curl --request POST "https://app.outtake.ai/api/v1/manual-reports" \
> --header "Authorization: Bearer YOUR_API_KEY" \
> --header "Content-Type: application/json" \
> --data '{
> "reports": [
> {
> "inputType": "url",
> "alertType": "content",
> "platform": "instagram",
> "entityId": "123e4567-e89b-12d3-a456-426614174000",
> "url": "https://instagram.com/p/ABC123",
> "remediationAction": "flag"
> },
> {
> "inputType": "url",
> "alertType": "account",
> "platform": "x",
> "entityId": "123e4567-e89b-12d3-a456-426614174000",
> "url": "https://x.com/fake_account",
> "remediationAction": "flagAndReport"
> }
> ]
> }'

The response includes results for each report with its index:

1{
2 "data": {
3 "results": [
4 { "success": true, "manualReportId": "id-1", "index": 0 },
5 { "success": true, "manualReportId": "id-2", "index": 1 }
6 ],
7 "successCount": 2,
8 "failureCount": 0
9 }
10}

Error handling

Invalid platform

If you submit a report for an unsupported platform:

1{
2 "data": {
3 "results": [
4 {
5 "success": false,
6 "error": "Your subscription does not include TikTok content reports. Use GET /manual-reports/supported-platforms to see available platforms.",
7 "index": 0
8 }
9 ],
10 "successCount": 0,
11 "failureCount": 1
12 }
13}

Report not found

1{
2 "error": "Manual report not found"
3}

Best practices

  • Check supported platforms first — Always verify which platforms are available for your subscription before submitting reports.
  • Use batch submissions — When submitting multiple reports, batch them into a single request (up to 100) to reduce API calls.
  • Poll with backoff — Start polling after 5-10 seconds, then increase the interval. Most reports complete within 30 seconds.
  • Store report IDs — Persist manualReportId values so you can resume status checks after interruptions.
  • Include context — Use additionalContext to provide evidence details that help with report processing.
  • Handle partial failures — In batch submissions, some reports may succeed while others fail. Check both successCount and individual results.

See the API reference for complete field schemas and additional error codes.