Event Overview

The media.created event is triggered immediately after media is successfully submitted through the /submit-media endpoint. This allows you to track when content enters the moderation queue.

Payload Structure

{
  "event": "media.created",
  "timestamp": "2024-01-15T14:30:00Z",
  "data": {
    "media_id": "123e4567-e89b-12d3-a456-426614174000",
    "app_media_id": "user-upload-123",
    "site_id": "98765432-dcba-4321-fedc-210987654321",
    "status": "pending",
    "content_type": "image",
    "created_at": "2024-01-15T14:30:00Z",
    "metadata": {
      "user_id": "abc-987",
      "gender": "male"
    }
  }
}

Payload Fields

event
string
required
The event type. Always media.created for this event.
timestamp
string
required
ISO 8601 timestamp of when the event occurred.
data.media_id
string
required
Unique identifier for the media item in Pixel Patrol.
data.app_media_id
string
Your application’s identifier for this media item.
data.site_id
string
required
The site ID associated with this media submission.
data.status
string
required
The current status. Always pending for newly created media.
data.content_type
string
required
Type of content: text, image, or video.
data.created_at
string
required
Timestamp when the media was created.
data.metadata
object
Custom metadata provided during submission.

Example Implementation

app.post('/webhook', (req, res) => {
  const signature = req.headers['x-pixelpatrol-signature'];
  
  // Verify signature (see verification guide)
  if (!verifyWebhookSignature(req.body, signature)) {
    return res.status(401).send('Invalid signature');
  }
  
  const { event, data } = req.body;
  
  if (event === 'media.created') {
    // Track media submission in your system
    console.log(`Media ${data.media_id} submitted for moderation`);
    
    // Update your database
    await db.media.update({
      where: { id: data.app_media_id },
      data: { 
        pixelpatrol_id: data.media_id,
        moderation_status: 'pending'
      }
    });
  }
  
  res.status(200).send('OK');
});

Use Cases

  • Tracking: Monitor submission rates and queue sizes
  • User Notifications: Inform users their content is being reviewed
  • Analytics: Track submission patterns and volumes
  • Synchronization: Keep your database in sync with moderation status