# Create a webhook for an app (app-scoped path)

Creates a new webhook for the specified app using normal bearer authentication. The app must be installed for the authenticated user's selected company. This endpoint is an app-scoped equivalent of the generic webhook creation endpoint.

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

## Path parameters:

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

## Request fields (application/json):

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

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

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

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

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

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

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

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

  - `serverlessFunction.createdBy.label` (string)

  - `serverlessFunction.createdBy.createdAt` (integer)

  - `serverlessFunction.createdBy.updatedAt` (integer)

  - `serverlessFunction.createdBy.deletedAt` (integer)

  - `serverlessFunction.createdBy.createdByUuid` (string)

  - `serverlessFunction.createdBy.updatedByUuid` (string)

  - `serverlessFunction.createdBy.deletedByUuid` (string)

  - `serverlessFunction.createdBy.index` (integer)

  - `serverlessFunction.createdBy.deleted` (boolean)

  - `serverlessFunction.createdBy.complete` (boolean)

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

  - `serverlessFunction.createdBy.properties` (array)

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

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

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

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

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

  - `serverlessFunction.createdBy.objects` (object)

  - `serverlessFunction.createdBy.user` (object)

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

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

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

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

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

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

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

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

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

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

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

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

  - `serverlessFunction.updatedBy.label` (string)

  - `serverlessFunction.updatedBy.createdAt` (integer)

  - `serverlessFunction.updatedBy.updatedAt` (integer)

  - `serverlessFunction.updatedBy.deletedAt` (integer)

  - `serverlessFunction.updatedBy.createdByUuid` (string)

  - `serverlessFunction.updatedBy.updatedByUuid` (string)

  - `serverlessFunction.updatedBy.deletedByUuid` (string)

  - `serverlessFunction.updatedBy.index` (integer)

  - `serverlessFunction.updatedBy.deleted` (boolean)

  - `serverlessFunction.updatedBy.complete` (boolean)

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

  - `serverlessFunction.updatedBy.properties` (array)

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

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

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

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

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

  - `serverlessFunction.updatedBy.objects` (object)

  - `serverlessFunction.updatedBy.user` (object)

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

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

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

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

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

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

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

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

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

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

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

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

  - `serverlessFunction.deletedBy.label` (string)

  - `serverlessFunction.deletedBy.createdAt` (integer)

  - `serverlessFunction.deletedBy.updatedAt` (integer)

  - `serverlessFunction.deletedBy.deletedAt` (integer)

  - `serverlessFunction.deletedBy.createdByUuid` (string)

  - `serverlessFunction.deletedBy.updatedByUuid` (string)

  - `serverlessFunction.deletedBy.deletedByUuid` (string)

  - `serverlessFunction.deletedBy.index` (integer)

  - `serverlessFunction.deletedBy.deleted` (boolean)

  - `serverlessFunction.deletedBy.complete` (boolean)

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

  - `serverlessFunction.deletedBy.properties` (array)

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

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

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

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

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

  - `serverlessFunction.deletedBy.objects` (object)

  - `serverlessFunction.deletedBy.user` (object)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  - `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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  - `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.

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

  - `relationFilters` (object)
    Filter criteria for relations

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  - `createdBy.name` (string, required)

  - `createdBy.label` (string)

  - `createdBy.createdAt` (integer)

  - `createdBy.updatedAt` (integer)

  - `createdBy.deletedAt` (integer)

  - `createdBy.createdByUuid` (string)

  - `createdBy.updatedByUuid` (string)

  - `createdBy.deletedByUuid` (string)

  - `createdBy.index` (integer)

  - `createdBy.deleted` (boolean)

  - `createdBy.complete` (boolean)

  - `createdBy.uuid` (string, required)

  - `createdBy.properties` (array)

  - `createdBy.properties.icon` (string)

  - `createdBy.properties.name` (string)

  - `createdBy.properties.value` (any)

  - `createdBy.properties.type` (string)

  - `createdBy.properties.label` (string)

  - `createdBy.objects` (object)

  - `createdBy.user` (object)

  - `createdBy.user.uuid` (string)

  - `createdBy.user.email` (string)

  - `createdBy.user.firstname` (string)

  - `createdBy.user.lastname` (string)

  - `createdBy.user.initials` (string)

  - `createdBy.user.scopes` (array)

  - `createdBy.user.filters` (object)

  - `createdBy.user.role` (string)

  - `createdBy.user.record` (object)

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

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

  - `updatedBy.name` (string, required)

  - `updatedBy.label` (string)

  - `updatedBy.createdAt` (integer)

  - `updatedBy.updatedAt` (integer)

  - `updatedBy.deletedAt` (integer)

  - `updatedBy.createdByUuid` (string)

  - `updatedBy.updatedByUuid` (string)

  - `updatedBy.deletedByUuid` (string)

  - `updatedBy.index` (integer)

  - `updatedBy.deleted` (boolean)

  - `updatedBy.complete` (boolean)

  - `updatedBy.uuid` (string, required)

  - `updatedBy.properties` (array)

  - `updatedBy.properties.icon` (string)

  - `updatedBy.properties.name` (string)

  - `updatedBy.properties.value` (any)

  - `updatedBy.properties.type` (string)

  - `updatedBy.properties.label` (string)

  - `updatedBy.objects` (object)

  - `updatedBy.user` (object)

  - `updatedBy.user.uuid` (string)

  - `updatedBy.user.email` (string)

  - `updatedBy.user.firstname` (string)

  - `updatedBy.user.lastname` (string)

  - `updatedBy.user.initials` (string)

  - `updatedBy.user.scopes` (array)

  - `updatedBy.user.filters` (object)

  - `updatedBy.user.role` (string)

  - `updatedBy.user.record` (object)

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

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

  - `deletedBy.name` (string, required)

  - `deletedBy.label` (string)

  - `deletedBy.createdAt` (integer)

  - `deletedBy.updatedAt` (integer)

  - `deletedBy.deletedAt` (integer)

  - `deletedBy.createdByUuid` (string)

  - `deletedBy.updatedByUuid` (string)

  - `deletedBy.deletedByUuid` (string)

  - `deletedBy.index` (integer)

  - `deletedBy.deleted` (boolean)

  - `deletedBy.complete` (boolean)

  - `deletedBy.uuid` (string, required)

  - `deletedBy.properties` (array)

  - `deletedBy.properties.icon` (string)

  - `deletedBy.properties.name` (string)

  - `deletedBy.properties.value` (any)

  - `deletedBy.properties.type` (string)

  - `deletedBy.properties.label` (string)

  - `deletedBy.objects` (object)

  - `deletedBy.user` (object)

  - `deletedBy.user.uuid` (string)

  - `deletedBy.user.email` (string)

  - `deletedBy.user.firstname` (string)

  - `deletedBy.user.lastname` (string)

  - `deletedBy.user.initials` (string)

  - `deletedBy.user.scopes` (array)

  - `deletedBy.user.filters` (object)

  - `deletedBy.user.role` (string)

  - `deletedBy.user.record` (object)

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

## Response 200 fields (application/json):

  - `message` (string)
    A message detailing the result of the operation.
    Example: "Success"

  - `data` (any)
    The data payload of the response, if any.

## 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"


