Skip to main content

Complaint Resolution

Postman Workspace

We've created a Postman workspace specifically for our API, which contains example API calls that you can use to test and familiarise yourself with our API.

The workspace includes example API calls for each of our API endpoints, along with detailed descriptions of the request parameters and headers being used.

You can generate most of the client code to call our APIs using the Postman client code generator. With this feature, developers can select a range of programming languages, and generate the corresponding code with a few clicks.

Please note that while both the example API calls and the generated code can be a helpful starting point, it's important to thoroughly test your own API calls before deploying them in production. If you encounter any issues while using the example API calls, or if you have any questions about our API, please don't hesitate to reach out to our support team.

API Domain

Our API is designed to be used in two environments: a sandbox environment and a production environment.

The sandbox environment is intended for testing and development purposes, while the production environment is used for live data and real-world use cases.

To ensure the security and integrity of our API, we use separate API keys for each environment. This means that you will need to obtain different API keys for the sandbox and production environments, and should not use the same key for both.

DomainEnvironment
https://moderation.verifymycontent.comproduction
https://moderation.sandbox.verifymycontent.comsandbox

Generating the HMAC header

To improve the security of the communication between your implementation and the VerifyMyContent API, we require you to generate a unique hexadecimal encoded SHA256 HMAC hash for each request, based on the input parameters.

The process of generating it depends on the language of your implementation.

If you use our SDK, the HMAC step will be abstracted,
and you don't need to do anything related to it.
Copy

Copied!

<?php

hash_hmac('sha256', $input, 'API_SECRET');
Copy

Copied!

import { HmacSHA256 } from 'crypto-js';

HmacSHA256(JSON.stringify(input), 'API_SECRET').toString()
Copy

Copied!

import hmac
import hashlib

def generateAuthHmacHeader(api_key, api_secret, request_body):
    sign_bytes = hmac.new(api_secret.encode('utf-8'), request_body.encode('utf-8'), hashlib.sha256).digest()
    sign_hex = sign_bytes.hex()
    authorization_header = f"hmac {api_key}:{sign_hex}"
    return authorization_header
Copy

Copied!

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

func generateAuthHmacHeader(apiKey, apiSecret, requestBody []byte]) string {
    hmac := hmac.New(sha256.New, []byte(apiSecret))
    h.Write(requestBody)

    signBytes := h.Sum(nil)

    signHex := hex.EncodeToString(signBytes)
    authorizationHeader := fmt.Sprintf("hmac %s:%s", apiKey, signHex)
    return authorizationHeader
}
Copy

Copied!

Integration

Create a complaint

To start a complaint for previously uploaded content. You need to send the original content and the violations raised by the user.

Important: Please generate a universally unique identifier (UUID v4) for each customer on your site. This UUID should never change. For example, if the customer's username on your site changes, their UUID shouldn't.

Authorization Header

Generate HMAC with: Request Body
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Request parameters

content required

The content with potential issues.

type optional

It can be video or image. Defaults to video.

external_id required

The unique identifier you send to correlate with the complaint.

url required

The URL where we can download the original video or image uploaded by your customer.

title optional

The title of the content being moderated.

description optional

The text written by your customer to describe the content.

tags required

The potential violations raised by the user.

StatusDescription
BESTIALITYAll content (images and video) that involves a person performing a sexual act with an animal (bestiality) or any animal genitalia will be rejected.
DRUGSAll content (images and video) where there is clear and obvious evidence of drug use will be rejected.
HATEAll content (images and video) where there is clear and obvious evidence of hate or symbols of hate will be rejected.
NECROPHILIAAll content (images and video) that involves a human corpse or sexual interference with a human corpse (necrophilia) will be rejected.
UNDERAGEAll content (images and video) that either exclusively or partially contains children will be rejected. Please note: this is based on the site being intended for people who are 18+
VIOLENCEAll content (images and video) where there is a clear and obvious threat to a person’s life (and portrayed in an explicit and realistic way) will be rejected.
URINE_AND_FAECESAll content (images and video) depicting activities involving urine and/or faeces will be rejected.
DEEPFAKEAll content (images and video) appearing to be using 'Deepfake' technology to replace the participant(s) with someone else's likeness will be rejected

webhook required

This is the URL where we will post status updates on the complaint.

customer required

Customer information.

id required

Customer's unique ID.

Response parameters

id

Unique identifier generated by the VerifyMyContent API.

external_id

The unique identifier you send to correlate with the complaint.

status

The current status of the complaint flow. It will change depending on the step of the complaint.

StatusDescription
Awaiting AutomationThe complaint was received.
Awaiting ModerationThe moderators are about to confirm the moderation decision.
ConfirmedViolations were found.
FailedAn error occurred during the content processing.
RejectedNo violations were found.

notes

Any notes associated with the moderation when the complaint status is 'Confirmed’ or ‘Rejected’.

created_at

The date and time in the UTC timezone when the verification was created.

updated_at

The date and time in the UTC timezone when the verification was updated.

Error responses

CodeDescription
400
{"message": "field <field_name> not found", "status_code": 400}
Copy

Copied!

422
{"message": "invalid parameter", "status_code": 422}
Copy

Copied!

401
{"message": "invalid authorization", "status_code": 401}
Copy

Copied!

401
{"message": "Missing Api Key", "status_code": 401}
Copy

Copied!

500
{"message": "Internal Server Error","status_code": 500}
Copy

Copied!

API Call
POST /api/v1/complaint-moderation HTTP/1.1
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY

{
    "content": {
        "description": "Your description",
        "external_id": "YOUR-VIDEO-ID",
        "tags": [
            "DRUGS"
        ],
        "title": "Your title",
        "type": "video",
        "url": "https://example.com/video.mp4"
    },
    "customer": {
        "id": "YOUR-USER-ID"
    },
    "webhook": "https://example.com/webhook"
}
Copy

Copied!

curl -d '{"content": {"description": "Your description", "external_id": "YOUR-VIDEO-ID", "tags": ["VIOLATION_1"], "title": "Your title", "type": "video", "url": "https://example.com/video.mp4"}, "customer": {"id": "YOUR-USER-ID"}, "webhook": "https://example.com/webhook"}' \
-H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY" \
-X POST https://moderation.sandbox.verifymycontent.com/api/v1/complaint-moderation
Copy

Copied!

Response 201: (application/json)
{
  "external_id": "YOUR-CORRELATION-ID",
  "id": "ABC-123-5678-ABC",
  "notes": "Complaint received.",
  "status": "Awaiting Automation",
  "created_at": "2020-11-12 19:06:00",
  "updated_at": "2020-11-12 19:06:00"
}
Copy

Copied!

Receive the current status of a complaint

The complaint information can also be sent via webhook to your domain if you send it to us when you create a complaint.

Authorization Header

Generate HMAC with: Request Body
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Request parameters

id

Unique identifier generated by the VerifyMyContent API.

external_id

The unique identifier you send to correlate with the complaint.

status

The current status of the complaint flow. It will change depending on the step of the complaint.

StatusDescription
Awaiting AutomationThe complaint was received.
Awaiting ModerationThe moderators are about to confirm the moderation decision.
ConfirmedViolations were found.
FailedAn error occurred during the content processing.
RejectedNo violations were found.

notes

Any notes associated with the moderation when the complaint status is 'Confirmed’ or ‘Rejected’.

complaint_tags

The potential violations raised by the user.

moderated_tags

Any tags associated with the moderation when the moderation status is Confirmed.

created_at

The date and time in the UTC timezone when the complaint was created.

updated_at

The date and time in the UTC timezone when the complaint was updated.

Webhook Call
POST /your-path HTTP/1.1
Host: https://your-domain.com
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY

{
  "id": "ABC-123-5678-ABC",
  "external_id": "YOUR-CORRELATION-ID",
  "status": "Confirmed",
  "notes": "Harmful content found.",
  "complaint_tags": [
    "DRUGS"
  ],
  "moderated_tags":[
    "UNDERAGE",
  ]
  "created_at": "2020-11-12 19:06:00",
  "updated_at": "2020-11-12 19:06:00"
}
Copy

Copied!

curl -d '{"id": "ABC-123-5678-ABC", "external_id": "YOUR-CORRELATION-ID", "status": "Confirmed", "notes": "Harmful content found.", "tags": ["VIOLATION_1"], "created_at": "2020-11-12 19:06:00", "updated_at": "2020-11-12 19:06:00"}' \
-H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY" \
-X POST https://your-domain.com/your-path
Copy

Copied!

Response 2xx

Get current status of the complaint

When you already have the id of a complaint you can see the current details of the complaint.

Authorization Header

Generate HMAC with: Request URI
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Response parameters

id

Unique identifier generated by the VerifyMyContent API.

external_id

The unique identifier you send to correlate with the complaint.

status

The current status of the complaint flow. It will change depending on the step of the complaint.

StatusDescription
Awaiting AutomationThe complaint was received.
Awaiting ModerationThe moderators are about to confirm the moderation decision.
ConfirmedViolations were found.
FailedAn error occurred during the content processing.
RejectedNo violations were found.

notes

Any notes associated with the moderation when the complaint status is 'Confirmed’ or ‘Rejected’.

complaint_tags

The potential violations raised by the user.

StatusDescription
BESTIALITYAll content (images and video) that involves a person performing a sexual act with an animal (bestiality) or any animal genitalia will be rejected.
DRUGSAll content (images and video) where there is clear and obvious evidence of drug use will be rejected.
HATEAll content (images and video) where there is clear and obvious evidence of hate or symbols of hate will be rejected.
NECROPHILIAAll content (images and video) that involves a human corpse or sexual interference with a human corpse (necrophilia) will be rejected.
UNDERAGEAll content (images and video) that either exclusively or partially contains children will be rejected. Please note: this is based on the site being intended for people who are 18+
VIOLENCEAll content (images and video) where there is a clear and obvious threat to a person’s life (and portrayed in an explicit and realistic way) will be rejected.
URINE_AND_FAECESAll content (images and video) depicting activities involving urine and/or faeces will be rejected.
DEEPFAKEAll content (images and video) appearing to be using 'Deepfake' technology to replace the participant(s) with someone else's likeness will be rejected

moderated_tags

Any tags associated with the moderation when the moderation status is Confirmed.

StatusDescription
BESTIALITYAll content (images and video) that involves a person performing a sexual act with an animal (bestiality) or any animal genitalia will be rejected.
DRUGSAll content (images and video) where there is clear and obvious evidence of drug use will be rejected.
HATEAll content (images and video) where there is clear and obvious evidence of hate or symbols of hate will be rejected.
NECROPHILIAAll content (images and video) that involves a human corpse or sexual interference with a human corpse (necrophilia) will be rejected.
UNDERAGEAll content (images and video) that either exclusively or partially contains children will be rejected. Please note: this is based on the site being intended for people who are 18+
VIOLENCEAll content (images and video) where there is a clear and obvious threat to a person’s life (and portrayed in an explicit and realistic way) will be rejected.
URINE_AND_FAECESAll content (images and video) depicting activities involving urine and/or faeces will be rejected.
DEEPFAKEAll content (images and video) appearing to be using 'Deepfake' technology to replace the participant(s) with someone else's likeness will be rejected

created_at

The date and time in the UTC timezone when the verification was created.

updated_at

The date and time in the UTC timezone when the verification was updated.

API Call
GET /api/v1/complaint-moderation/{ID} HTTP/1.1
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-URI
Copy

Copied!

curl -H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-URI" \
https://moderation.sandbox.verifymycontent.com/api/v1/complaint-moderation/{ID}
Copy

Copied!

Response 200: (application/json)
{
  "id": "ABC-123-5678-ABC",
  "external_id": "YOUR-CORRELATION-ID",
  "notes": "Harmful content found.",
  "status": "Confirmed",
  "complaint_tags": [
    "DRUGS"
  ],
  "moderated_tags": [
    "UNDERAGE"
  ],
  "created_at": "2020-11-12 19:06:00",
  "updated_at": "2020-11-12 19:06:00"
}
Copy

Copied!

Create a consent complaint

To start a consent complaint, you need to send your content external id.

Authorization Header

Generate HMAC with: Request Body
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Request parameters

content required

The content with potential issues.

external_id required

The unique identifier you send to correlate with the complaint.

customer optional

Customer information.

id optional

Customer's unique ID.

webhook required

This is the URL where we will post status updates on the complaint.

Response parameters

id

Unique identifier generated by the VerifyMyContent API.

redirect_url

If a consent complaint was already created by the user for the same content this field will contain the redirect url to the existing complaint

status

The possible status returned by the consent complaint creation

StatusDescription
CreatedThe complaint was received.
DeliveredThe complaint was delivered.

Error responses

CodeDescription
400
{"message": "field <field_name> not found", "status_code": 400}
Copy

Copied!

422
{"message": "invalid parameter", "status_code": 422}
Copy

Copied!

401
{"message": "invalid authorization", "status_code": 401}
Copy

Copied!

401
{"message": "Missing Api Key", "status_code": 401}
Copy

Copied!

500
{"message": "Internal Server Error","status_code": 500}
Copy

Copied!

API Call
POST /api/v1/complaint-consent HTTP/1.1
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY

{
    "content": {
        "external_id": "string"
    },
    "customer": {
        "id": "string"
    },
    "webhook": "string"
}
Copy

Copied!

curl -d '{"content": {"external_id": "string"}, "customer": {"id": "string"}, "webhook": "string"}' \
-H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY" \
-X POST https://moderation.sandbox.verifymycontent.com/api/v1/complaint-consent
Copy

Copied!

Response 201: (application/json)
{
  "id": "ABC-123-5678-ABC",
  "redirect_url": "https://app.verifymycontent.com/v/ABC-123-5678-ABC",
  "status": "Created"
}
Copy

Copied!

Receive the current status of a consent complaint

The complaint information can also be sent via webhook to your domain if you send it to us when you create a complaint.

Authorization Header

Generate HMAC with: Request Body
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Request parameters

id

Unique identifier generated by the VerifyMyContent API.

consent

Consent information

external_id

The unique identifier you send to correlate with the complaint.

customer

Customer information

id

Customer's unique ID

email

Customer's email address

status

The current status of the complaint flow. It will change depending on the step of the complaint.

StatusDescription
CreatedThe complaint was received.
OpenedThe complaint was opened.
DeliveredThe complaint was delivered.

created_at

The date and time in the UTC timezone when the complaint was created.

updated_at

The date and time in the UTC timezone when the complaint was updated.

Webhook Call
POST /your-path HTTP/1.1
Host: https://your-domain.com
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY

{
  "id": "ABC-123-5678-ABC",
  "consent": {
    "external_id": "YOUR-CORRELATION-ID"
  },
  "customer": {
    "id": "YOUR ID",
    "email": "customer@email.com"
  },
  "status": "Delivered",
  "created_at": "2020-11-12 19:06:00",
  "updated_at": "2020-11-12 19:06:00"
}
Copy

Copied!

curl -d '{"id": "ABC-123-5678-ABC", "consent": { "external_id": "YOUR-CORRELATION-ID" }, "customer": { "id": "YOUR ID", "email": "customer@email.com" }, "status": "Created", "created_at": "2020-11-12 19:06:00", "updated_at": "2020-11-12 19:06:00"}' \
-H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY" \
-X POST https://your-domain.com/your-path
Copy

Copied!

Response 2xx

Get current status of the complaint consent

When you already have the id of a complaint consent you can see the current details of the complaint consent.

Authorization Header

Generate HMAC with: Request URI
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Response parameters

id

Unique identifier generated by the VerifyMyContent API.

consent

Consent information

external_id

The unique identifier you send to correlate with the complaint.

customer

Customer information

id

Customer's unique ID

email

Customer's email address

status

The current status of the complaint flow. It will change depending on the step of the complaint.

StatusDescription
CreatedThe complaint was received.
OpenedWhen customer inform the email
DeliveredThe complaint was delivered.
Delivery ErrorAn error occurred during the complaint delivery.

created_at

The date and time in the UTC timezone when the complaint was created.

updated_at

The date and time in the UTC timezone when the complaint was updated.

API Call
GET /api/v1/complaint-moderation/{ID} HTTP/1.1
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-URI
Copy

Copied!

curl -H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-URI" \
https://moderation.sandbox.verifymycontent.com/api/v1/complaint-moderation/{ID}
Copy

Copied!

Response 200: (application/json)
{
  "id": "ABC-123-5678-ABC",
  "content": {
    "external_id": "YOUR-CORRELATION-ID"
  },
  "customer": {
    "id": "YOUR ID",
    "email": "customer@email.com"
  },
  "status": "Delivered",
  "created_at": "2020-11-12 19:06:00",
  "updated_at": "2020-11-12 19:06:00"
}
Copy

Copied!

Create a live stream complaint

To start a complaint, you need to send the live stream information.

Authorization Header

Generate HMAC with: Request Body
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Request parameters

stream required

Represents the live stream with potential issues.

external_id required

The unique identifier you send to correlate with the complaint.

tags required

The potential violations raised by the user.

complained_at required

Date and time when the complaint was raised by the user.

webhook required

This is the URL where we will post status updates on the complaint.

customer optional

Customer information.

id optional

Customer's unique ID.

Response parameters

id

Unique identifier generated by the VerifyMyContent API.

external_id

The unique identifier you send to correlate with the complaint.

status

The current status of the complaint flow. It will change depending on the step of the complaint.

StatusDescription
Awaiting AutomationThe complaint was received.
Awaiting ModerationThe moderators are about to confirm the moderation decision.
ConfirmedViolations were found.
FailedAn error occurred during the content processing.
RejectedNo violations were found.

notes

Any notes associated with the moderation when the complaint status is 'Confirmed’ or ‘Rejected’.

created_at

The date and time in the UTC timezone when the verification was created.

updated_at

The date and time in the UTC timezone when the verification was updated.

API Call
POST /api/v1/complaint-livestream HTTP/1.1
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY

{
    "complained_at": "2022-11-04T12:04:08.658Z",
    "customer": {
        "id": "YOUR-USER-ID"
    },
    "stream": {
        "external_id": "YOUR-LIVESTREAM-ID",
        "tags": [
            "VIOLATION_1"
        ]
    },
    "webhook": "https://example.com/webhook"
}
Copy

Copied!

curl -d '{"complained_at": "2022-11-04T12:04:08.658Z", "customer": {"id": "YOUR-USER-ID"}, "stream": {"external_id": "YOUR-LIVESTREAM-ID", "tags": ["VIOLATION_1"]}, "webhook": "https://example.com/webhook"}' \
-H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY" \
-X POST https://moderation.sandbox.verifymycontent.com/api/v1/complaint-livestream
Copy

Copied!

Response 201: (application/json)
{
  "external_id": "YOUR-CORRELATION-ID",
  "id": "ABC-123-5678-ABC",
  "notes": "Complaint received.",
  "status": "Awaiting Automation",
  "created_at": "2020-11-12 19:06:00",
  "updated_at": "2020-11-12 19:06:00"
}
Copy

Copied!

Receive the current status of a live stream complaint

The complaint information can also be sent via webhook to your domain if you send it to us when you create a complaint.

Authorization Header

Generate HMAC with: Request Body
Authorization: hmac YOUR-API-KEY:GENERATED-HMAC

Request parameters

id

Unique identifier generated by the VerifyMyContent API.

external_id

The unique identifier you send to correlate with the complaint.

status

The current status of the complaint flow. It will change depending on the step of the complaint.

StatusDescription
Awaiting ModerationThe moderators are about to confirm the moderation decision.
ConfirmedViolations were found.
FailedAn error occurred during the content processing.
RejectedNo violations were found.

notes

Any notes associated with the moderation when the complaint status is 'Confirmed’ or ‘Rejected’.

complaint_tags

Any tags associated with the complaint when the complaint status is Confirmed.

moderated_tags

Any tags associated with the moderation when the moderation status is Confirmed.

created_at

The date and time in the UTC timezone when the complaint was created.

updated_at

The date and time in the UTC timezone when the complaint was updated.

Webhook Call
POST /your-path HTTP/1.1
Host: https://your-domain.com
Content-Type: application/json
Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY

{
  "id": "ABC-123-5678-ABC",
  "external_id": "YOUR-CORRELATION-ID",
  "status": "Confirmed",
  "notes": "Harmful content found.",
  "complaint_tags": [
    "VIOLATION_1"
  ],
  "moderated_tags": [],
  "created_at": "2020-11-12 19:06:00",
  "updated_at": "2020-11-12 19:06:00"
}
Copy

Copied!

curl -d '{"id": "ABC-123-5678-ABC", "external_id": "YOUR-CORRELATION-ID", "status": "Confirmed", "notes": "Harmful content found.", "complaint_tags": ["VIOLATION_1"], "moderated_tags": [], "created_at": "2020-11-12 19:06:00", "updated_at": "2020-11-12 19:06:00"}' \
-H "Content-Type: application/json" \
-H "Authorization: hmac YOUR-API-KEY:GENERATE-HMAC-WITH-REQUEST-BODY" \
-X POST https://your-domain.com/your-path
Copy

Copied!

Response 2xx