🎉 Tickety V3 has now been released! Read more →
APIHTTP EventsApplication Events

Submit

Triggered when a user submits an application

Event Type

"application.submit"

Description

This event is triggered when a user successfully submits an application through an application panel.

Payload Structure

Prop

Type

Question Fields

Prop

Type

Upload answers

Uploaded images are stored privately and have no permanent link. For an UPLOAD question, the question carries an upload object which you exchange for the image using your HTTP events token. See Uploads for the endpoint, and note that answerRaw is null for these questions because there is no raw text answer.

Prop

Type

Example Payload

{
  "type": "application.submit",
  "payload": {
    "applicationId": "APP-5678",
    "panelId": "staff-application",
    "submitterId": "713115896805064856",
    "submitDate": "2024-01-18T15:30:00.000Z",
    "questions": [
      {
        "question": "What is your timezone?",
        "description": "Please include your usual availability.",
        "required": true,
        "type": "TEXT",
        "choices": [],
        "skipped": false,
        "answer": "CET, usually available after 6 PM",
        "answerRaw": "CET, usually available after 6 PM",
        "upload": null
      },
      {
        "question": "Which roles are you applying for?",
        "description": null,
        "required": true,
        "type": "CHOICE",
        "choices": ["Moderator", "Support", "Developer"],
        "skipped": false,
        "answer": "Moderator, Support",
        "answerRaw": "0 1",
        "upload": null
      },
      {
        "question": "Upload a screenshot of your setup",
        "description": null,
        "required": false,
        "type": "UPLOAD",
        "choices": [],
        "skipped": false,
        "answer": "https://tickety.top/api/uploads/applications/APP-5678/a1b2c3d4.webp",
        "answerRaw": null,
        "upload": {
          "scope": "applications",
          "id": "APP-5678",
          "filename": "a1b2c3d4.webp",
          "url": "https://tickety.top/api/uploads/applications/APP-5678/a1b2c3d4.webp"
        }
      }
    ]
  }
}

Example Usage

app.post("/webhook", async (req, res) => {
  const { type, payload } = req.body;

  if (type === "application.submit") {
    console.log("New application submitted!");
    console.log(`Application ID: ${payload.applicationId}`);
    console.log(`Panel: ${payload.panelId}`);
    console.log(`Submitter: ${payload.submitterId}`);
    console.log(`Questions: ${payload.questions.length}`);

    await storeApplication({
      id: payload.applicationId,
      panelId: payload.panelId,
      submitterId: payload.submitterId,
      submittedAt: payload.submitDate,
      status: "pending",
      questions: payload.questions,
    });

    const summary = payload.questions.map(question => ({
      question: question.question,
      answer: question.answer,
      skipped: question.skipped,
    }));

    await notifyApplicationReviewers(payload.panelId, {
      applicationId: payload.applicationId,
      submitterId: payload.submitterId,
      summary,
    });
  }

  res.status(200).send("OK");
});

Use Cases

  • Track application submissions in your own database
  • Send notifications to review teams
  • Generate application metrics and analytics
  • Integrate with external HR or management systems
  • Automate initial application processing
  • Store full question and answer snapshots for auditing

On this page