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