Skip to documentation
AdQuestDocs

Quest evidence overview

How each quest format collects proof, and the shared request helper the examples use.

On this page

Prerequisites

  • A working integration: participant sessions and a widget or client.
  • A quest in the format you want, created in the dashboard and active.
  • The public API key, API URL and the user’s participant token.

How completion works

Every quest ends with a completion request that AdQuest checks on its servers. What you send before it depends on the format.

Format (API type)You sendThen
Video (video)start, then watch progress, then the answer to the questioncomplete
Time-link (banner)start, the timer, an optional click, then the answercomplete
Survey (survey)start without a timer, then the answerscomplete
Quiz (quiz)start without a timer, then one answer per question; a first miss is asked again at the endThe last right answer completes it. A second miss rejects it.
Visit destination (visit)start, then the visitcomplete
Verified event (event)start, then the named eventcomplete
Profile (profile)the saved profile in a new participant sessioncomplete
Referral (referral)the inviter’s code from the invited friendcomplete
Streak (streak)one callback per day from your backendNo complete. The last day settles the quest.
Custom (custom)an event, a callback, a host flag or a review requestcomplete
Multi-step (multi_step)evidence for each step, sent with its step keycomplete, after every required step is verified

The request helper

Authenticated public API helper
type ApiConfig = { baseUrl: string; apiKey: string; participantToken: string; externalUserId: string; deliveryToken?: string };
export async function questRequest(config: ApiConfig, questId: number, action: string, body: Record<string, unknown> = {}) {
  const response = await fetch(config.baseUrl.replace(/[/]$/, "") + "/platform/quests/" + questId + "/" + action, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-AdQuest-Platform-Key": config.apiKey,
      "X-AdQuest-Participant-Token": config.participantToken,
    },
    body: JSON.stringify({ delivery_token: config.deliveryToken, ...body, external_user_id: config.externalUserId }),
  });
  const result = await response.json();
  if (!response.ok || !result.status) throw new Error(result.message || "Quest request failed");
  return result.data;
}

One page per format

Something unclear, missing or wrong here? Tell us