Skip to main content
Dilli automations let you catch inbound webhooks, validate the payload, and respond or call other services without managing servers.

How it works

  • Trigger: Each automation has a unique URL. Point external tools (payments, forms, shipping, etc.) at it.
  • Validate: Define simple rules so bad payloads are stopped before actions run.
  • Act: Chain outgoing HTTP calls, branch on conditions, and shape the final response you want to return.
  • Respond: Send back a clean HTTP reply (status, headers, body) to the caller.

Pause and resume

  • Pause an automation to stop processing temporarily (helpful during maintenance or testing).
  • While paused, new requests get a “temporarily unavailable” response and no actions run.
  • Resume to pick up normal processing instantly.

Inbox and replay

  • Every request is logged in an Inbox with method, path, body, timestamps, and whether it succeeded.
  • Replay any past request to test changes without waiting for a live event.
  • Logs stay for 30 days by default (plan-dependent retention options may apply).

Common uses

  • Catch payment or subscription webhooks and sync them to CRM records.
  • Power dynamic redirects after form submissions (e.g., route to different thank-you pages).
  • Enrich incoming data with a quick call to a third-party API, then return a tailored response.
actions:
  - name: "Get Auth Token"
    type: "http_request"
    method: "POST"
    url: "https://api.example.com/token"
    headers:
      Content-Type: "application/x-www-form-urlencoded"
    data:
      auth_type: "DEV"
      grant_type: "password"
      username: "dummy_user"
      password: "dummy_pass"
    set:
      access_token: output.access_token

  - name: "Fetch Destination City Code"
    type: "http_request"
    method: "GET"
    url: "https://api.example.com/cities"
    headers:
      Authorization: "Bearer {{ vars.access_token }}"
    data:
      zipCode: "{{ request.destination.postal_code }}"
    set:
      destination_city_code: output.city_id

  - name: "Generate Shipping Quote"
    type: "http_request"
    method: "POST"
    url: "https://api.example.com/shipping"
    headers:
      Authorization: "Bearer {{ vars.access_token }}"
      Content-Type: "application/json"
    data:
      OriginZipCode: "{{ request.origin.postal_code }}"
      OriginCityId: 1234
      DestinationZipCode: "{{ request.destination.postal_code }}"
      DestinationCityId: "{{ vars.destination_city_code }}"
      TotalWeight: 10.0
      InvoiceValue: 999.99
      ReceiverCpfcnpj: "00000000000000"
      ContactName: "Contact Name"
      ContactPhoneNumber: "123456789"
      Packs:
        - AmountPackages: 1
    set:
      carrier_name: "Example Carrier"
      carrier_code: "EXPRESS"
      price: output.total_price
      currency: "BRL"
      type: "ship"
      min_delivery_date: "2025-01-01T00:00:00-0300"
      max_delivery_date: "2025-01-05T00:00:00-0300"
      phone_required: true
      reference: "dummy_ref"

Redirection

If defined, the flow will redirect the request to a specific URL after all actions are executed.
redirect:
  to: "https://example.com/success"

Response

Define the structure of the automation response, including HTTP status, headers, and body.
response:
  status: 200
  headers:
    Content-Type: "application/json"
    X-Powered-By: "Dilli Studio"
  body:
    rates:
      - name: "{{ vars.carrier_name }}"
        code: "{{ vars.carrier_code }}"
        price: "{{ vars.price }}"
        currency: "{{ vars.currency }}"
        type: "{{ vars.type }}"
        min_delivery_date: "{{ vars.min_delivery_date }}"
        max_delivery_date: "{{ vars.max_delivery_date }}"
        phone_required: true
        reference: "{{ vars.reference }}"