Guide

Quiz Builder REST API

Routes under prc-api/v3 for submissions, community groups, admin purge, and the Quizzes library list. Registered via prc_api_endpoints / rest_api_init in includes/class-rest-api.php.

Base path: /wp-json/prc-api/v3/

Auth summary

AccessRoutes
Public + quiz validation + per-IP rate limitPOST /quiz/submit
Firebase ID token (X-PRC-User-Token)POST /quiz/create-group
PublicGET /quiz/get-group
manage_optionsPOST /quiz/purge-archetypes
edit_posts (library)GET /quiz/library
edit_post on quizGET/DELETE /quiz/audiences, POST /quiz/build-audience, GET /quiz/audience-jobs/{job_id}
edit_posts_submissions field on quiz REST resource

Route index

MethodPathPurpose
POST/quiz/submitRecord submission; update archetype / group
POST/quiz/create-groupCreate Firebase group; owner from token sub
GET/quiz/get-groupGroup payload and URLs
POST/quiz/purge-archetypesWipe Firebase archetypes for a quiz
GET/quiz/libraryDataViews list rows and filters. Applies prc_wp_admin_dataview_query_args before WP_Query and prc_wp_admin_dataview_shape_row when shaping each row so Working on / Active editors / Watchers work on this custom restPath.
GET/quiz/audiencesList group-creators system audiences for a quiz
POST/quiz/build-audienceStart an async group-creators job. Returns 202 with the job view (not the finished email list).
GET/quiz/audience-jobs/{job_id}Poll a qz_ job. Inspectors may also poll Email Builder GET /prc-email-builder/v1/audience-jobs/{job_id}.
DELETE/quiz/audiencesDelete a group-creators audience option + _meta

Quiz REST does not insert email posts and does not wait for the Firebase scan. Editors create a transactional draft from Quiz Analytics, which calls Email Builder POST /prc-email-builder/v1/transactional/create-from-audience.

Submit behavior when Firebase is down

CaseResponse
Normal submit (no groupId)200 with persisted: false — in-session results still work
Group submit503
Create group without Firebase Auth503

Rate limit on submit: 100 submissions per quiz per IP per minute (see source). Emergency kill switch: Rest_API::$rest_disabled.

Request GET /wp-json/prc-api/v3/quiz/get-group?groupId=example-group
HeadersKey: value
Accept application/json
Response 200 OK
BodyJSON
{
  "group_id": "example-group",
  "total": 12
}

Was this helpful?