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 form instance is updated.

Integration Details

  • Subscription Key: form.form_instance.updated
  • Use Case: Track form revision history or detect changes to submitted data.
  • Related Events: form.form_instance.created

Trigger

  • Event Type: form_form_instance_updated
  • Source: Update of a record in the frm.form_instance table.
This is a versioned-snapshot event. The payload includes both old (previous state) and new (current state) at the root level because frm.form_instance has no history table. See Versioned-Snapshot Objects.

Payload Example

{
  "old": {
    "id": 601,
    "form_data": {
      "uuid-1": "Jon",
      "uuid-2": "Doe",
      "uuid-3": "Good experience"
    },
    "submitted_at": "2023-11-10T11:00:00Z",
    "updated_at": "2023-11-10T11:00:00Z"
  },
  "new": {
    "id": 601,
    "external_id": "ext_form_601",
    "model_id": 1234,
    "old_id": 5001,
    "form_data": {
      "uuid-1": "John",
      "uuid-2": "Doe",
      "uuid-3": "Great experience!"
    },
    "form_version_id": 701,
    "submitted_by": 123,
    "submitted_at": "2023-11-10T11:00:00Z",
    "meta": {},
    "created_at": "2023-11-10T11:00:00Z",
    "created_by": 1,
    "updated_at": "2023-11-10T12:00:00Z",
    "updated_by": 1,
    "form_version": {
      "id": 701,
      "version": 1,
      "status": "published",
      "structure": {},
      "created_at": "2023-11-01T10:00:00Z",
      "created_by": 1,
      "updated_at": "2023-11-01T10:00:00Z",
      "updated_by": 1,
      "form_fields": [
        {
          "id": 901,
          "uuid": "uuid-1",
          "name": "First Name",
          "type": "text",
          "external_name": "first_name",
          "created_at": "2023-11-01T10:00:00Z",
          "created_by": 1,
          "updated_at": "2023-11-01T10:00:00Z",
          "updated_by": 1
        }
      ],
      "form": {
        "id": 801,
        "name": "Candidate Feedback Form",
        "type": "feedback",
        "url": "https://example.com/forms/feedback",
        "is_active": true,
        "external_id": "ext_frm_801",
        "old_id": 4001,
        "created_at": "2023-11-01T10:00:00Z",
        "created_by": 1,
        "updated_at": "2023-11-01T10:00:00Z",
        "updated_by": 1
      }
    }
  }
}

Payload Type Showcase

{
  old: Partial<FormInstance>;
  new: FormInstance;
}

// where FormInstance is:
{
  id: number;
  external_id: string | null;
  model_id: number | null;
  old_id: number | null;
  form_data: Record<string, any>;
  form_version_id: number;
  submitted_by: number | null;
  submitted_at: string | null;
  meta: Record<string, any> | null;
  created_at: string;
  created_by: number;
  updated_at: string;
  updated_by: number;
  form_version: {
    id: number;
    version: number;
    status: string;
    structure: Record<string, any>;
    created_at: string;
    created_by: number;
    updated_at: string;
    updated_by: number;
    form_fields: {
      id: number;
      uuid: string;
      name: string;
      type: string;
      external_name: string | null;
      created_at: string;
      created_by: number;
      updated_at: string;
      updated_by: number;
    }[];
    form: {
      id: number;
      name: string;
      type: string;
      url: string | null;
      is_active: boolean;
      external_id: string | null;
      old_id: number | null;
      created_at: string;
      created_by: number;
      updated_at: string;
      updated_by: number;
    };
  };
}

Field Notes

  • form_data is JSONB containing the actual submission values keyed by field UUID. Use form_fields to interpret the keys.
  • meta is JSONB with submission context (source, device, etc.).
  • structure on form_version is JSONB defining the form layout and field configuration.
  • The form_version → form join provides the parent form metadata (name, type, active status).