Skip to main content
For general webhook concepts like bubble-up behavior, payload visibility rules, and versioned snapshots, see Webhook Concepts.

Description

This event is triggered when a new test instance (candidate assessment attempt) is created.

Integration Details

  • Subscription Key: ae.test_instance.created
  • Use Case: Notify a proctor or recruiter that a candidate has started their assessment.
  • Related Events: ae.test_instance.updated

Trigger

  • Event Type: ae_test_instance_created
  • Source: Insertion of a record into the ti.instance table.

Cross-Service References

This payload joins data from multiple services:
  • Candidate (can.candidate): Snapshot of the candidate’s profile.
  • Catalog (ae.catalog_assessment): Assessment and catalog metadata.
  • Evaluation (tcf.measurement): Scoring breakdown with attributes and skills.

Payload Example

{
  "id": 789,
  "external_id": "ext_ti_789",
  "old_id": 1234,
  "score": null,
  "instance_status": "in_progress",
  "candidate_id": 101,
  "catalog_assessment_id": 202,
  "measurement_id": 505,
  "session_instance_id": 3001,
  "workflow_candidate_step_id": 4001,
  "created_at": "2023-11-05T10:00:00Z",
  "created_by": 1,
  "updated_at": "2023-11-05T10:00:00Z",
  "updated_by": 1,
  "candidate": {
    "id": 101,
    "external_id": "ext_can_101",
    "user_id": 123,
    "email": "candidate@example.com",
    "first_name": "Jane",
    "last_name": "Doe",
    "middle_name": "Marie",
    "phone_number": "+19876543210",
    "country": "USA",
    "is_tnc_accepted": true,
    "is_recording_consent_accepted": true,
    "resume_file_id": 2001,
    "profile_pic_file_id": 3001,
    "cf": {}
  },
  "catalog_assessment": {
    "id": 202,
    "assessment": {
      "id": 303,
      "name": "Python Proficiency Test",
      "level": "intermediate",
      "status": "published",
      "created_at": "2023-11-01T10:00:00Z",
      "updated_at": "2023-11-01T10:00:00Z"
    },
    "catalog": {
      "id": 404,
      "name": "Standard Assessments",
      "description": "Standard assessment catalog for technical roles."
    }
  },
  "measurement": {
    "id": 505,
    "status": "pending",
    "time_taken": "00:00:00",
    "report_url": null,
    "report_file_id": null,
    "measured_at": "2023-11-05T10:00:00Z",
    "measured_by": null,
    "form_instance_id": null,
    "measurement_attributes": [
      {
        "id": 1,
        "numerical_score": null,
        "percentile_score": null,
        "remarks": null,
        "description": "Initial state",
        "additional_attributes": {},
        "created_at": "2023-11-05T10:00:00Z",
        "created_by": 1,
        "updated_at": "2023-11-05T10:00:00Z",
        "updated_by": 1,
        "section_configuration_attribute": {
          "id": 10,
          "type": "numerical",
          "recommended_value": 70,
          "recommended_ordinal_id": null,
          "attribute": {
            "id": 10,
            "name": "Logical Reasoning",
            "attribute_type": "skill",
            "is_required": true,
            "min_value": 0,
            "max_value": 100,
            "skill": {
              "id": 5,
              "name": "Logic"
            }
          }
        },
        "ordinal": null
      }
    ]
  }
}

Payload Type Showcase

{
  id: number;
  external_id: string | null;
  old_id: number | null;
  score: number | null;
  instance_status: string;
  candidate_id: number;
  catalog_assessment_id: number;
  measurement_id: number | null;
  session_instance_id: number | null;
  workflow_candidate_step_id: number | null;
  created_at: string;
  created_by: number;
  updated_at: string;
  updated_by: number;
  candidate: {
    id: number;
    external_id: string | null;
    user_id: number;
    email: string;
    first_name: string | null;
    last_name: string | null;
    middle_name: string | null;
    phone_number: string | null;
    country: string | null;
    is_tnc_accepted: boolean;
    is_recording_consent_accepted: boolean | null;
    resume_file_id: number | null;
    profile_pic_file_id: number | null;
    cf: Record<string, any>;
  };
  catalog_assessment: {
    id: number;
    assessment: {
      id: number;
      name: string;
      level: string;
      status: string;
      created_at: string;
      updated_at: string;
    };
    catalog: {
      id: number;
      name: string;
      description: string | null;
    };
  };
  measurement: {
    id: number;
    status: string;
    time_taken: string | null;
    report_url: string | null;
    report_file_id: number | null;
    measured_at: string;
    measured_by: number | null;
    form_instance_id: number | null;
    measurement_attributes: {
      id: number;
      numerical_score: number | null;
      percentile_score: number | null;
      remarks: string | null;
      description: string | null;
      additional_attributes: Record<string, any> | null;
      created_at: string;
      created_by: number;
      updated_at: string;
      updated_by: number;
      section_configuration_attribute: {
        id: number;
        type: string;
        recommended_value: number | null;
        recommended_ordinal_id: number | null;
        attribute: {
          id: number;
          name: string;
          attribute_type: string;
          is_required: boolean;
          min_value: number;
          max_value: number;
          skill: {
            id: number;
            name: string;
          } | null;
        };
      };
      ordinal: {
        id: number;
        label: string;
        value: string;
        sort_key: number;
        min_value: number | null;
        max_value: number | null;
      } | null;
    }[];
  };
}

Field Notes

  • cf on candidate is JSONB — shape varies per tenant configuration.
  • time_taken on measurement is a Postgres INTERVAL rendered as a string.
  • additional_attributes on measurement attributes is JSONB.
  • instance_status references the ti.instance_status enum.