Skip to main content
IT BIBLESign in

Webhooks

Events and payloads

Every event a webhook can receive, with an example of its data.

Each request body is a JSON object with id, event, created_at and data, as described in How webhooks work. This page describes the data of each event.

Team events

These two events are for team webhooks. They are only sent to the webhooks of the team the member is on, and only while the team has an active plan and is not suspended. A member who is not on a team triggers nothing.

Both share these fields in data:

Field Meaning
team.name The team's name.
team.slug The team's address name.
team.url The team's public page.
member.id The member's id on IT Bible. It never changes.
member.username The member's user name.
member.name The member's display name.
member.url The member's public profile.
member.role owner, admin or member.

No email address is ever included.

member.lab_completed

A team member finished a lab in IT Bible Labs.

{
  "id": "6f1c1d1e-2b7a-4a0e-9a53-0a4f0f5d6c11",
  "event": "member.lab_completed",
  "created_at": "2026-10-30T14:03:11+00:00",
  "data": {
    "team": { "name": "Northwind Traders", "slug": "northwind-traders", "url": "https://itbible.org/teams/northwind-traders" },
    "member": { "id": 42, "username": "sam", "name": "Sam Rivera", "url": "https://itbible.org/u/sam", "role": "member" },
    "lab": { "slug": "cisco-vlans", "name": "Switch VLANs", "url": "https://labs.itbible.org/completions/7", "private": false },
    "points": 50
  }
}
Field Meaning
lab.slug The lab's address name.
lab.name The lab's title, as shown on its badge.
lab.url A link to the completion on Labs. It can be null.
lab.private true for a lab your team uploaded, which gives no badge or points. false for a lab from the IT Bible catalog.
points The points the lab gave. It is always 0 for a private lab, and can be 0 for others.
lab.version The version of the lab that was finished. Only sent for a private lab, and null if Labs did not say.
completed_at When the lab was finished, as an ISO 8601 time. Only sent for a private lab.
duration_minutes Whole minutes from the start of the attempt to the finish. Only sent for a private lab. In a lab for two, both people get the same number.

To track training in your own systems, use the member's id, lab.slug, lab.version and completed_at. A member finishes a version of a lab once, so that combination is unique. Use the request's id to ignore a repeat of the same delivery.

For a private lab the data looks like this:

{
  "team": { "name": "Northwind Traders", "slug": "northwind-traders", "url": "https://itbible.org/teams/northwind-traders" },
  "member": { "id": 42, "username": "sam", "name": "Sam Rivera", "url": "https://itbible.org/u/sam", "role": "member" },
  "lab": { "slug": "name-a-vlan", "name": "Name a VLAN", "version": "1.0.0", "url": "https://labs.itbible.org/labs/team-7-name-a-vlan", "private": true },
  "points": 0,
  "completed_at": "2026-10-30T15:20:00+00:00",
  "duration_minutes": 23
}

member.badge_earned

A team member earned a badge. This covers badges earned by taking part (for example posting, answering or a visit streak), badges a staff member or an automatic rule gave them, and the badge for finishing a lab.

A lab completion therefore sends both member.lab_completed and member.badge_earned. If you subscribe to both, expect two requests. Subscribe to only the one you want.

{
  "id": "0b8e5a8c-4f77-4c1a-8d0b-5c1c8f8f2f90",
  "event": "member.badge_earned",
  "created_at": "2026-10-30T14:03:11+00:00",
  "data": {
    "team": { "name": "Northwind Traders", "slug": "northwind-traders", "url": "https://itbible.org/teams/northwind-traders" },
    "member": { "id": 42, "username": "sam", "name": "Sam Rivera", "url": "https://itbible.org/u/sam", "role": "member" },
    "badge": { "key": "first_reply", "name": "First Reply", "description": "Reply to someone else", "kind": "achievement" }
  }
}
Field Meaning
badge.key A stable name for the badge. Use it, not the display name, to recognize a badge.
badge.name The badge's display name.
badge.description What the badge is for. It can be null for a special badge.
badge.kind achievement for a badge earned by taking part, or special for a badge that was given or that comes from a lab.

Badges that members earned before their team had a webhook are not sent. Only new awards are.

The test event

ping

Sent when you press Send a test event. It is always delivered, even if the webhook is not subscribed to it or is turned off.

{
  "id": "9d2d3c0e-8c1a-47f1-9b0e-3a2f6e9a7a10",
  "event": "ping",
  "created_at": "2026-10-30T14:00:00+00:00",
  "data": { "message": "This is a test from IT Bible." }
}

Forum events (administrators)

An administrator of the site can add webhooks that report public forum activity. These are not available to teams. They only ever carry what a visitor who is not signed in could read, so they never include private categories, held or hidden posts or email addresses.

Event When
topic.created A topic is created.
post.created A post is created, including the first post of a topic.
post.flagged A post is flagged. data.reason says why.
answer.accepted A reply is accepted as the answer.
user.created A member joins. data.user has id, username, name and url.

The post events share this shape in data:

{
  "post": {
    "id": 1201,
    "number": 3,
    "url": "https://itbible.org/t/example/55#post-3",
    "excerpt": "The first 300 characters of the post as plain text...",
    "author": { "id": 42, "username": "sam", "name": "Sam Rivera", "url": "https://itbible.org/u/sam" }
  },
  "topic": {
    "id": 55,
    "title": "How do I trunk a VLAN?",
    "url": "https://itbible.org/t/example/55",
    "category": { "name": "Networking", "slug": "networking" }
  }
}