API Reference

REST API for headless queue integration.

Base URL: https://velvetrope.dev/api/v1

Get Queue Status

GET /campaigns/:slug/status
# Example
curl https://velvetrope.dev/api/v1/campaigns/my-drop/status

Response:

{
  "campaign": {
    "id": "abc123",
    "slug": "my-drop",
    "status": "active",
    "rate_per_minute": 100,
    "skip_pass_enabled": true
  },
  "queue": {
    "length": 12847,
    "vip_length": 234,
    "forwarded": 2156,
    "paused": false
  }
}

Join Queue

POST /campaigns/:slug/join
# Example
curl -X POST https://velvetrope.dev/api/v1/campaigns/my-drop/join \
-H "Content-Type: application/json" \
-d '{"user_id": "user123"}'

Response:

{
  "user_id": "user123",
  "position": 12848,
  "queue_url": "https://velvetrope.dev/q/my-drop",
  "websocket_topic": "queue:abc123:user:user123"
}

WebSocket Integration

For real-time queue updates, connect to our Phoenix Channel:

import { Socket } from "phoenix";

const socket = new Socket("wss://velvetrope.dev/socket");
socket.connect();

const channel = socket.channel(`queue:${campaignId}`, { user_id: "user123" });
channel.join();

channel.on("position_update", (payload) => {
  console.log("Position:", payload.position);
  console.log("Wait:", payload.estimated_wait_seconds);
});

channel.on("forwarded", (payload) => {
  window.location.href = payload.destination_url;
});