# trial.started

> The ByDomu trial.started event (trial.started): when it fires, how to subscribe, its fields and the payload delivered by webhook.


trial.started

Object · deal Includes · contact Instant

## When it fires

The free trial of the chosen plan started. The deal moves on its own to "Trialing" and never moves back on its own.

Instantly, when it happens in ByDomu: from the app, the API, Noa, an automation or an integration. `actor.kind` tells you who: USER, NOA, SYSTEM, API, AUTOMATION or INTEGRATION.

## Subscribe with

- `trial.started` Only this event
- `trial.*` Every event of Opportunity
- `*` The whole catalog

## Fields it carries

paths for filters and templates

`deal.id` Opportunity id

`deal.code` Opportunity code

`deal.title` Opportunity title

`deal.value` Value

`deal.currency` Currency

`deal.probability` Probability

`deal.status` Status

`deal.intent` Intent

`deal.leadSource` Lead source

`deal.agentId` Agent

`deal.contactId` Contact

`deal.pipelineId` Pipeline

`deal.stageId` Stage id

`deal.stageName` Stage

`deal.previousStageId` Previous stage id

`deal.previousStageName` Previous stage

`deal.lostReason` Lost reason

`deal.aiCreated` Created by Noa

`deal.saasPlanId`

`deal.saasMrrAmount`

`deal.trialStartedAt`

`deal.trialEndsAt`

`contact.id` Contact id

`contact.code` Contact code

`contact.firstName` First name

`contact.lastName` Last name

`contact.email` Email

`contact.phone` Phone

`contact.source` Source

`contact.status` Status

`contact.type` Contact type

`contact.score` Score

`contact.ownerId` Owner

`contact.preferredCity` City of interest

`contact.preferredType` Property type they want

`contact.budget` Budget

`contact.tags` Tags

Up to 5 attempts (0 s, 5 s, 30 s, 2 min and 10 min) on network errors, 429 or 5xx. Reply 2xx in under 10 s.

Payload:

```
{
  "event": "trial.started",
  "id": "5f3a0c1e-7d2b-4f7e-9a51-0b6c1d2e3f40",
  "type": "trial.started",
  "timestamp": "2026-09-22T14:30:00.000Z",
  "organizationId": "clx1org001",
  "actor": {
    "kind": "SYSTEM",
    "userId": null
  },
  "data": {
    "deal": {
      "id": "clx1deal002",
      "code": "N-0418",
      "title": "Lumbre · Transportes Río Claro",
      "value": null,
      "currency": "COP",
      "probability": 60,
      "status": "OPEN",
      "intent": null,
      "leadSource": null,
      "lostReason": null,
      "aiCreated": false,
      "agentId": "clx1usr001",
      "contactId": "clx1con001",
      "pipelineId": "clx1pip002",
      "stageId": "clx1stg013",
      "stageName": "En prueba",
      "stageEnteredAt": "2026-09-17T09:00:00.000Z",
      "expectedCloseDate": null,
      "closedAt": null,
      "createdAt": "2026-09-20T15:05:00.000Z",
      "saasPlanId": "clx1plan002",
      "saasPlanName": "Crecer",
      "saasBillingPeriod": "ANNUAL",
      "saasMrrAmount": 207500,
      "trialStartedAt": "2026-09-17T09:00:00.000Z",
      "trialEndsAt": "2026-10-01T09:00:00.000Z"
    },
    "contact": {
      "id": "clx1con001",
      "code": "C-0042",
      "firstName": "Laura",
      "lastName": "Restrepo",
      "fullName": "Laura Restrepo",
      "email": "laura.restrepo@example.com",
      "phone": "+573000000001",
      "source": "WEBSITE",
      "status": "QUALIFIED",
      "type": "CLIENT",
      "score": 72,
      "ownerId": "clx1usr001",
      "preferredCity": "Bogotá",
      "preferredType": "APARTMENT",
      "budget": 450000000,
      "currency": "COP",
      "tags": [
        "Compra",
        "Chapinero"
      ],
      "createdAt": "2026-09-20T15:04:00.000Z"
    }
  }
}
```

Headers:

```
X-Domu-Event: trial.started
X-Domu-Signature: t=1790610130,v1=9c1e…
User-Agent: Domu-Webhooks/2
```

Verify signature:

```
import { createHmac, timingSafeEqual } from "node:crypto";

// header = X-Domu-Signature: t=<timestamp>,v1=<hmac>
function verifyWebhook(rawBody, header, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const timestamp = Number(parts.t);
  if (!timestamp || !parts.v1) return false;
  if (Math.abs(Date.now() / 1000 - timestamp) > toleranceSec) return false;
  const expected = createHmac("sha256", secret)
    .update(`${timestamp}.${rawBody}`)
    .digest("hex");
  const a = Buffer.from(expected);
  const b = Buffer.from(parts.v1);
  return a.length === b.length && timingSafeEqual(a, b);
}
```

**Get it with your test data** GET /v1/webhooks/sample/trial.started

[Try it](https://developers.bydomu.com/en/referencia/get-webhook-sample?probar=1&type=trial.started)
