{"templateId":"../@theme/Templates/BlogWithAuthors","sharedDataIds":{"sidebar":"sidebar-blog/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"What a ServerlessFunction is","description":"Developer documentation for the Caraer platform. REST API reference, Bearer authentication, tutorials, and guides for records, forms, webpages, webhooks, and automations.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This post is a dedicated deep dive into ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ServerlessFunction"]}," in Caraer apps and"," ","how it connects to webhook delivery."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-a-serverlessfunction-is","__idx":0},"children":["What a ServerlessFunction is"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ServerlessFunction"]}," is linked to an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["App"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Core fields:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["runtime"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"supported-runtimes","__idx":1},"children":["Supported runtimes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Current allowed runtimes are:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nodejs22"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["python312"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Validation rejects values outside that allowlist."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"deployment-behavior-on-save","__idx":2},"children":["Deployment behavior on save"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This means save operations are operationally significant: they can provision or"," ","update cloud infrastructure."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-this-integrates-with-webhooks","__idx":3},"children":["How this integrates with webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhooks can link to a serverless function through"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USES_SERVERLESS_FUNCTION"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Typical pattern:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Define serverless function in the app."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Reference that function in webhook configuration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use webhook delivery mode and filters to control invocation behavior."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"when-to-use-serverless-function-delivery","__idx":4},"children":["When to use serverless function delivery"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use serverless when you need:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["low-latency processing close to event trigger"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["lightweight transformation/enrichment before forwarding"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["internal execution without exposing public webhook endpoints"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use HTTP webhook delivery when you need centralized integration handling in your"," ","own backend."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"operational-checklist","__idx":5},"children":["Operational checklist"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keep function code idempotent."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Guard against retries/duplicate webhook events."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Version function behavior carefully across app updates."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Monitor cloud function logs and failure rates."]}]}]},"headings":[{"value":"What a ServerlessFunction is","id":"what-a-serverlessfunction-is","depth":2},{"value":"Supported runtimes","id":"supported-runtimes","depth":2},{"value":"Deployment behavior on save","id":"deployment-behavior-on-save","depth":2},{"value":"How this integrates with webhooks","id":"how-this-integrates-with-webhooks","depth":2},{"value":"When to use serverless function delivery","id":"when-to-use-serverless-function-delivery","depth":2},{"value":"Operational checklist","id":"operational-checklist","depth":2}],"frontmatter":{"title":"Serverless functions in Caraer apps","authors":["sem_tadema"],"tags":["documentation","app"],"template":"../@theme/Templates/BlogWithAuthors","seo":{"title":"What a ServerlessFunction is"}},"lastModified":"2026-03-25T15:23:57.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/blog/2026-03-25-serverless-functions-in-caraer-apps","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}