# Test an unsaved webhook for an app

Generates a test webhook payload from webhook configuration supplied in the request body without persisting the webhook. When recordUuid is omitted, auto-resolves the latest matching record, prefers records that submitted the topic form and that have as many includeRelations as possible, and uses the event from the webhook topic. If no record exists, a simulated record is used and context.testNote (also X-Webhook-Test-Note) explains that plus any missing includeRelations.

Endpoint: POST /api/v2/apps/{appUuid}/webhooks/test
Version: 2.0
Security: bearerAuth

## Path parameters:

  - `appUuid` (string, required)
    UUID of the app the webhook belongs to

## Request fields (application/json):

  - `webhook` (object, required)
    Webhook configuration to test (not saved).

  - `webhook.url` (string)
    The URL of the webhook where requests will be sent.
    Example: "https://example.com/webhook"

  - `webhook.serverlessFunction` (object)
    UUID of the serverless function to invoke when the webhook is triggered (must belong to the same app).

  - `webhook.serverlessFunction.uuid` (string, required)
    Unique identifier for the entity

  - `webhook.serverlessFunction.name` (string, required)
    The name of the entity

  - `webhook.serverlessFunction.label` (string)
    Display label for the entity, can be different from name

  - `webhook.serverlessFunction.createdAt` (integer)
    Unix timestamp when the entity was created

  - `webhook.serverlessFunction.createdBy` (object)
    Identifier of the user who created the entity

  - `webhook.serverlessFunction.createdBy.name` (string, required)

  - `webhook.serverlessFunction.createdBy.label` (string)

  - `webhook.serverlessFunction.createdBy.createdAt` (integer)

  - `webhook.serverlessFunction.createdBy.updatedAt` (integer)

  - `webhook.serverlessFunction.createdBy.deletedAt` (integer)

  - `webhook.serverlessFunction.createdBy.createdByUuid` (string)

  - `webhook.serverlessFunction.createdBy.updatedByUuid` (string)

  - `webhook.serverlessFunction.createdBy.deletedByUuid` (string)

  - `webhook.serverlessFunction.createdBy.index` (integer)

  - `webhook.serverlessFunction.createdBy.deleted` (boolean)

  - `webhook.serverlessFunction.createdBy.complete` (boolean)

  - `webhook.serverlessFunction.createdBy.uuid` (string, required)

  - `webhook.serverlessFunction.createdBy.properties` (array)

  - `webhook.serverlessFunction.createdBy.properties.icon` (string)

  - `webhook.serverlessFunction.createdBy.properties.name` (string)

  - `webhook.serverlessFunction.createdBy.properties.value` (any)

  - `webhook.serverlessFunction.createdBy.properties.type` (string)

  - `webhook.serverlessFunction.createdBy.properties.label` (string)

  - `webhook.serverlessFunction.createdBy.objects` (object)

  - `webhook.serverlessFunction.createdBy.user` (object)

  - `webhook.serverlessFunction.createdBy.user.uuid` (string)

  - `webhook.serverlessFunction.createdBy.user.email` (string)

  - `webhook.serverlessFunction.createdBy.user.firstname` (string)

  - `webhook.serverlessFunction.createdBy.user.lastname` (string)

  - `webhook.serverlessFunction.createdBy.user.initials` (string)

  - `webhook.serverlessFunction.createdBy.user.scopes` (array)

  - `webhook.serverlessFunction.createdBy.user.filters` (object)

  - `webhook.serverlessFunction.createdBy.user.role` (string)

  - `webhook.serverlessFunction.createdBy.user.record` (object)

  - `webhook.serverlessFunction.updatedAt` (integer)
    Unix timestamp when the entity was last updated

  - `webhook.serverlessFunction.updatedBy` (object)
    Identifier of the user who last updated the entity

  - `webhook.serverlessFunction.updatedBy.name` (string, required)

  - `webhook.serverlessFunction.updatedBy.label` (string)

  - `webhook.serverlessFunction.updatedBy.createdAt` (integer)

  - `webhook.serverlessFunction.updatedBy.updatedAt` (integer)

  - `webhook.serverlessFunction.updatedBy.deletedAt` (integer)

  - `webhook.serverlessFunction.updatedBy.createdByUuid` (string)

  - `webhook.serverlessFunction.updatedBy.updatedByUuid` (string)

  - `webhook.serverlessFunction.updatedBy.deletedByUuid` (string)

  - `webhook.serverlessFunction.updatedBy.index` (integer)

  - `webhook.serverlessFunction.updatedBy.deleted` (boolean)

  - `webhook.serverlessFunction.updatedBy.complete` (boolean)

  - `webhook.serverlessFunction.updatedBy.uuid` (string, required)

  - `webhook.serverlessFunction.updatedBy.properties` (array)

  - `webhook.serverlessFunction.updatedBy.properties.icon` (string)

  - `webhook.serverlessFunction.updatedBy.properties.name` (string)

  - `webhook.serverlessFunction.updatedBy.properties.value` (any)

  - `webhook.serverlessFunction.updatedBy.properties.type` (string)

  - `webhook.serverlessFunction.updatedBy.properties.label` (string)

  - `webhook.serverlessFunction.updatedBy.objects` (object)

  - `webhook.serverlessFunction.updatedBy.user` (object)

  - `webhook.serverlessFunction.updatedBy.user.uuid` (string)

  - `webhook.serverlessFunction.updatedBy.user.email` (string)

  - `webhook.serverlessFunction.updatedBy.user.firstname` (string)

  - `webhook.serverlessFunction.updatedBy.user.lastname` (string)

  - `webhook.serverlessFunction.updatedBy.user.initials` (string)

  - `webhook.serverlessFunction.updatedBy.user.scopes` (array)

  - `webhook.serverlessFunction.updatedBy.user.filters` (object)

  - `webhook.serverlessFunction.updatedBy.user.role` (string)

  - `webhook.serverlessFunction.updatedBy.user.record` (object)

  - `webhook.serverlessFunction.deletedAt` (integer)
    Unix timestamp when the entity was deleted (null if not deleted)

  - `webhook.serverlessFunction.deletedBy` (object)
    Identifier of the user who deleted the entity

  - `webhook.serverlessFunction.deletedBy.name` (string, required)

  - `webhook.serverlessFunction.deletedBy.label` (string)

  - `webhook.serverlessFunction.deletedBy.createdAt` (integer)

  - `webhook.serverlessFunction.deletedBy.updatedAt` (integer)

  - `webhook.serverlessFunction.deletedBy.deletedAt` (integer)

  - `webhook.serverlessFunction.deletedBy.createdByUuid` (string)

  - `webhook.serverlessFunction.deletedBy.updatedByUuid` (string)

  - `webhook.serverlessFunction.deletedBy.deletedByUuid` (string)

  - `webhook.serverlessFunction.deletedBy.index` (integer)

  - `webhook.serverlessFunction.deletedBy.deleted` (boolean)

  - `webhook.serverlessFunction.deletedBy.complete` (boolean)

  - `webhook.serverlessFunction.deletedBy.uuid` (string, required)

  - `webhook.serverlessFunction.deletedBy.properties` (array)

  - `webhook.serverlessFunction.deletedBy.properties.icon` (string)

  - `webhook.serverlessFunction.deletedBy.properties.name` (string)

  - `webhook.serverlessFunction.deletedBy.properties.value` (any)

  - `webhook.serverlessFunction.deletedBy.properties.type` (string)

  - `webhook.serverlessFunction.deletedBy.properties.label` (string)

  - `webhook.serverlessFunction.deletedBy.objects` (object)

  - `webhook.serverlessFunction.deletedBy.user` (object)

  - `webhook.serverlessFunction.deletedBy.user.uuid` (string)

  - `webhook.serverlessFunction.deletedBy.user.email` (string)

  - `webhook.serverlessFunction.deletedBy.user.firstname` (string)

  - `webhook.serverlessFunction.deletedBy.user.lastname` (string)

  - `webhook.serverlessFunction.deletedBy.user.initials` (string)

  - `webhook.serverlessFunction.deletedBy.user.scopes` (array)

  - `webhook.serverlessFunction.deletedBy.user.filters` (object)

  - `webhook.serverlessFunction.deletedBy.user.role` (string)

  - `webhook.serverlessFunction.deletedBy.user.record` (object)

  - `webhook.serverlessFunction.index` (integer)
    Index number for ordering entities

  - `webhook.serverlessFunction.runtime` (string)
    Runtime identifier (e.g. javascript, python)

  - `webhook.serverlessFunction.code` (string)
    Function source code

  - `webhook.serverlessFunction.sourceFiles` (object)
    Additional source files relative to the function folder (e.g. shared.js)

  - `webhook.serverlessFunction.description` (string)
    Optional description of the serverless function

  - `webhook.deliveryMode` (string)
    Delivery mode for this webhook: HTTP (use url) or SERVERLESS (use serverlessFunctionUuid). If omitted, legacy behavior applies based on presence of url/serverlessFunctionUuid.

  - `webhook.waitUntilComplete` (boolean)
    When true, install or settings save waits for this lifecycle hook to finish and returns the settings it wrote.

  - `webhook.secret` (string)
    The secret used for webhook validation.
    Example: "abcd1234"

  - `webhook.topic` (string)
    The topic for which the webhook is subscribed.
    Example: "user.created"

  - `webhook.description` (string)
    Optional human-readable description for this webhook

  - `webhook.webhookFormat` (string)
    Webhook payload format (LEGACY, USER_FRIENDLY)
    Example: "LEGACY"

  - `webhook.parseRecord` (boolean)
    Whether to parse the record before returning it
    Example: true

  - `webhook.filter` (object)
    Filter criteria for webhook triggers

  - `webhook.filter.groups` (array)
    A collection of filter groups.

  - `webhook.filter.groups.items` (object)
    A set of filter items included in the group.

  - `webhook.filter.groups.items.object` (string)
    The name of the object to which this pagination item belongs.
    Example: "User"

  - `webhook.filter.groups.items.relation` (string)
    The relationship between objects.
    Example: "hasProperty"

  - `webhook.filter.groups.items.relationDirection` (string)
    Optional relation direction: outgoing (related→main), incoming (main→related), or omit for undirected.
    Example: "outgoing"

  - `webhook.filter.groups.items.property` (string)
    The name of the property within the object.
    Example: "email"

  - `webhook.filter.groups.items.relationIncluded` (boolean)
    Specifies whether the relation is included.
    Example: true

  - `webhook.filter.groups.items.operator` (string)
    Defines the operator used in the filter. Available operators are defined in the API documentation.
    Example: "EQUALS"

  - `webhook.filter.groups.items.value` (any)
    Represents the value to filter against.
    Example: 12345

  - `webhook.filter.groups.items.smartContent` (boolean)
    When true, filter fields contain smart content placeholders resolved at runtime.
    Example: true

  - `webhook.filter.groups.items.edgeProperty` (boolean)
    When true, propertyName refers to a property stored on the relation edge itself (declared on the relation schema, e.g. partstat on attendees) instead of a property of the related record. Requires relation and propertyName.

  - `webhook.includeRelations` (array)
    Records to include in webhook payload
    Example: ["candidate","vacancy"]

  - `webhook.relationFilters` (object)
    Filter criteria for relations

  - `webhook.relationLimit` (integer)
    Maximum number of relations to include
    Example: 10

  - `webhook.retryEnabled` (boolean)
    Whether retry is enabled for failed deliveries (defaults to true if omitted)
    Example: true

  - `webhook.maxRetries` (integer)
    Maximum number of retries
    Example: 3

  - `webhook.retryBackoffMs` (integer)
    Retry backoff in milliseconds
    Example: 1000

  - `webhook.triggerOffsetSeconds` (integer)
    Offset from the target date in seconds (required for date_due webhooks)
    Example: 604800

  - `webhook.scheduleDirection` (string)
    Whether the webhook fires BEFORE or AFTER the target date
    Example: "BEFORE"

  - `webhook.scheduleRecurring` (string)
    Recurrence for date_due webhooks: NONE, DAILY, WEEKLY, MONTHLY, QUARTERLY, HALF_YEARLY, YEARLY, or CRON
    Example: "YEARLY"

  - `webhook.scheduleCronExpression` (string)
    Spring cron expression used when scheduleRecurring is CRON

  - `webhook.scheduleVersion` (integer)
    Internal schedule version incremented when schedule config changes

  - `webhook.uuid` (string, required)
    Unique identifier for the entity

  - `webhook.name` (string, required)
    The name of the entity

  - `webhook.label` (string)
    Display label for the entity, can be different from name

  - `webhook.createdAt` (integer)
    Unix timestamp when the entity was created

  - `webhook.createdBy` (object)
    Identifier of the user who created the entity

  - `webhook.createdBy.name` (string, required)

  - `webhook.createdBy.label` (string)

  - `webhook.createdBy.createdAt` (integer)

  - `webhook.createdBy.updatedAt` (integer)

  - `webhook.createdBy.deletedAt` (integer)

  - `webhook.createdBy.createdByUuid` (string)

  - `webhook.createdBy.updatedByUuid` (string)

  - `webhook.createdBy.deletedByUuid` (string)

  - `webhook.createdBy.index` (integer)

  - `webhook.createdBy.deleted` (boolean)

  - `webhook.createdBy.complete` (boolean)

  - `webhook.createdBy.uuid` (string, required)

  - `webhook.createdBy.properties` (array)

  - `webhook.createdBy.properties.icon` (string)

  - `webhook.createdBy.properties.name` (string)

  - `webhook.createdBy.properties.value` (any)

  - `webhook.createdBy.properties.type` (string)

  - `webhook.createdBy.properties.label` (string)

  - `webhook.createdBy.objects` (object)

  - `webhook.createdBy.user` (object)

  - `webhook.createdBy.user.uuid` (string)

  - `webhook.createdBy.user.email` (string)

  - `webhook.createdBy.user.firstname` (string)

  - `webhook.createdBy.user.lastname` (string)

  - `webhook.createdBy.user.initials` (string)

  - `webhook.createdBy.user.scopes` (array)

  - `webhook.createdBy.user.filters` (object)

  - `webhook.createdBy.user.role` (string)

  - `webhook.createdBy.user.record` (object)

  - `webhook.updatedAt` (integer)
    Unix timestamp when the entity was last updated

  - `webhook.updatedBy` (object)
    Identifier of the user who last updated the entity

  - `webhook.updatedBy.name` (string, required)

  - `webhook.updatedBy.label` (string)

  - `webhook.updatedBy.createdAt` (integer)

  - `webhook.updatedBy.updatedAt` (integer)

  - `webhook.updatedBy.deletedAt` (integer)

  - `webhook.updatedBy.createdByUuid` (string)

  - `webhook.updatedBy.updatedByUuid` (string)

  - `webhook.updatedBy.deletedByUuid` (string)

  - `webhook.updatedBy.index` (integer)

  - `webhook.updatedBy.deleted` (boolean)

  - `webhook.updatedBy.complete` (boolean)

  - `webhook.updatedBy.uuid` (string, required)

  - `webhook.updatedBy.properties` (array)

  - `webhook.updatedBy.properties.icon` (string)

  - `webhook.updatedBy.properties.name` (string)

  - `webhook.updatedBy.properties.value` (any)

  - `webhook.updatedBy.properties.type` (string)

  - `webhook.updatedBy.properties.label` (string)

  - `webhook.updatedBy.objects` (object)

  - `webhook.updatedBy.user` (object)

  - `webhook.updatedBy.user.uuid` (string)

  - `webhook.updatedBy.user.email` (string)

  - `webhook.updatedBy.user.firstname` (string)

  - `webhook.updatedBy.user.lastname` (string)

  - `webhook.updatedBy.user.initials` (string)

  - `webhook.updatedBy.user.scopes` (array)

  - `webhook.updatedBy.user.filters` (object)

  - `webhook.updatedBy.user.role` (string)

  - `webhook.updatedBy.user.record` (object)

  - `webhook.deletedAt` (integer)
    Unix timestamp when the entity was deleted (null if not deleted)

  - `webhook.deletedBy` (object)
    Identifier of the user who deleted the entity

  - `webhook.deletedBy.name` (string, required)

  - `webhook.deletedBy.label` (string)

  - `webhook.deletedBy.createdAt` (integer)

  - `webhook.deletedBy.updatedAt` (integer)

  - `webhook.deletedBy.deletedAt` (integer)

  - `webhook.deletedBy.createdByUuid` (string)

  - `webhook.deletedBy.updatedByUuid` (string)

  - `webhook.deletedBy.deletedByUuid` (string)

  - `webhook.deletedBy.index` (integer)

  - `webhook.deletedBy.deleted` (boolean)

  - `webhook.deletedBy.complete` (boolean)

  - `webhook.deletedBy.uuid` (string, required)

  - `webhook.deletedBy.properties` (array)

  - `webhook.deletedBy.properties.icon` (string)

  - `webhook.deletedBy.properties.name` (string)

  - `webhook.deletedBy.properties.value` (any)

  - `webhook.deletedBy.properties.type` (string)

  - `webhook.deletedBy.properties.label` (string)

  - `webhook.deletedBy.objects` (object)

  - `webhook.deletedBy.user` (object)

  - `webhook.deletedBy.user.uuid` (string)

  - `webhook.deletedBy.user.email` (string)

  - `webhook.deletedBy.user.firstname` (string)

  - `webhook.deletedBy.user.lastname` (string)

  - `webhook.deletedBy.user.initials` (string)

  - `webhook.deletedBy.user.scopes` (array)

  - `webhook.deletedBy.user.filters` (object)

  - `webhook.deletedBy.user.role` (string)

  - `webhook.deletedBy.user.record` (object)

  - `webhook.index` (integer)
    Index number for ordering entities

  - `recordUuid` (string)
    UUID of the record to base the event on. Omit to auto-resolve from webhook topic.
    Example: "record-uuid"

  - `eventType` (string)
    Event type to simulate (created, updated, deleted, etc.).
    Example: "created"

  - `propertyName` (string)
    Property name when simulating property_changed.
    Example: "status"

## Response 400 fields (application/json):

  - `message` (string)
    The error message providing details about the failure.
    Example: "Resource not found."

  - `errors` (array)
    A list of error types providing further details about the error.

  - `errors.message` (string, required)
    The error message providing details about the failure.
    Example: "Invalid file type."

  - `errors.type` (string, required)
    The type of error.
    Enum: "VALIDATION", "NOT_FOUND", "TEST", "RELATION_NOT_ALLOWED", "INVALID_VALUE", "GENERAL", "INVALID_FILE_TYPE", "INTERNAL_SERVER_ERROR", "CARAER_ERROR", "INVALID_EMAIL", "INVALID_DATE"

  - `errors.correctionSuggestion` (string, required)
    A suggestion on how to correct the error.
    Example: "Try uploading a different file type."

  - `status` (integer)
    The HTTP status code associated with the error.
    Example: 400

  - `stackTrace` (string)

  - `roles` (array)
    Roles the caller is missing when the failure is an authorization error.
    Enum: "USER", "ADMIN", "RESELLER", "DEVELOPER", "SUPER_ADMIN"

  - `scopes` (array)
    Scopes the caller is missing when the failure is an authorization error.

  - `requestId` (string)
    Request correlation ID for support and log tracing.
    Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

## Response 401 fields (application/json):

  - `message` (string)
    The error message providing details about the failure.
    Example: "Resource not found."

  - `errors` (array)
    A list of error types providing further details about the error.

  - `errors.message` (string, required)
    The error message providing details about the failure.
    Example: "Invalid file type."

  - `errors.type` (string, required)
    The type of error.
    Enum: "VALIDATION", "NOT_FOUND", "TEST", "RELATION_NOT_ALLOWED", "INVALID_VALUE", "GENERAL", "INVALID_FILE_TYPE", "INTERNAL_SERVER_ERROR", "CARAER_ERROR", "INVALID_EMAIL", "INVALID_DATE"

  - `errors.correctionSuggestion` (string, required)
    A suggestion on how to correct the error.
    Example: "Try uploading a different file type."

  - `status` (integer)
    The HTTP status code associated with the error.
    Example: 400

  - `stackTrace` (string)

  - `roles` (array)
    Roles the caller is missing when the failure is an authorization error.
    Enum: "USER", "ADMIN", "RESELLER", "DEVELOPER", "SUPER_ADMIN"

  - `scopes` (array)
    Scopes the caller is missing when the failure is an authorization error.

  - `requestId` (string)
    Request correlation ID for support and log tracing.
    Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

## Response 403 fields (application/json):

  - `message` (string)
    The error message providing details about the failure.
    Example: "Resource not found."

  - `errors` (array)
    A list of error types providing further details about the error.

  - `errors.message` (string, required)
    The error message providing details about the failure.
    Example: "Invalid file type."

  - `errors.type` (string, required)
    The type of error.
    Enum: "VALIDATION", "NOT_FOUND", "TEST", "RELATION_NOT_ALLOWED", "INVALID_VALUE", "GENERAL", "INVALID_FILE_TYPE", "INTERNAL_SERVER_ERROR", "CARAER_ERROR", "INVALID_EMAIL", "INVALID_DATE"

  - `errors.correctionSuggestion` (string, required)
    A suggestion on how to correct the error.
    Example: "Try uploading a different file type."

  - `status` (integer)
    The HTTP status code associated with the error.
    Example: 400

  - `stackTrace` (string)

  - `roles` (array)
    Roles the caller is missing when the failure is an authorization error.
    Enum: "USER", "ADMIN", "RESELLER", "DEVELOPER", "SUPER_ADMIN"

  - `scopes` (array)
    Scopes the caller is missing when the failure is an authorization error.

  - `requestId` (string)
    Request correlation ID for support and log tracing.
    Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

## Response 404 fields (application/json):

  - `message` (string)
    The error message providing details about the failure.
    Example: "Resource not found."

  - `errors` (array)
    A list of error types providing further details about the error.

  - `errors.message` (string, required)
    The error message providing details about the failure.
    Example: "Invalid file type."

  - `errors.type` (string, required)
    The type of error.
    Enum: "VALIDATION", "NOT_FOUND", "TEST", "RELATION_NOT_ALLOWED", "INVALID_VALUE", "GENERAL", "INVALID_FILE_TYPE", "INTERNAL_SERVER_ERROR", "CARAER_ERROR", "INVALID_EMAIL", "INVALID_DATE"

  - `errors.correctionSuggestion` (string, required)
    A suggestion on how to correct the error.
    Example: "Try uploading a different file type."

  - `status` (integer)
    The HTTP status code associated with the error.
    Example: 400

  - `stackTrace` (string)

  - `roles` (array)
    Roles the caller is missing when the failure is an authorization error.
    Enum: "USER", "ADMIN", "RESELLER", "DEVELOPER", "SUPER_ADMIN"

  - `scopes` (array)
    Scopes the caller is missing when the failure is an authorization error.

  - `requestId` (string)
    Request correlation ID for support and log tracing.
    Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

## Response 500 fields (application/json):

  - `message` (string)
    The error message providing details about the failure.
    Example: "Resource not found."

  - `errors` (array)
    A list of error types providing further details about the error.

  - `errors.message` (string, required)
    The error message providing details about the failure.
    Example: "Invalid file type."

  - `errors.type` (string, required)
    The type of error.
    Enum: "VALIDATION", "NOT_FOUND", "TEST", "RELATION_NOT_ALLOWED", "INVALID_VALUE", "GENERAL", "INVALID_FILE_TYPE", "INTERNAL_SERVER_ERROR", "CARAER_ERROR", "INVALID_EMAIL", "INVALID_DATE"

  - `errors.correctionSuggestion` (string, required)
    A suggestion on how to correct the error.
    Example: "Try uploading a different file type."

  - `status` (integer)
    The HTTP status code associated with the error.
    Example: 400

  - `stackTrace` (string)

  - `roles` (array)
    Roles the caller is missing when the failure is an authorization error.
    Enum: "USER", "ADMIN", "RESELLER", "DEVELOPER", "SUPER_ADMIN"

  - `scopes` (array)
    Scopes the caller is missing when the failure is an authorization error.

  - `requestId` (string)
    Request correlation ID for support and log tracing.
    Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"


