ProjectCreatedEvent
Sodtrack sends this payload when a new project is created in the platform, regardless of the channel it originated from: the admin panel, the Integration API (Project Creation), the execution of a bu…
POST with Content-Type: application/json to the endpoint configured for your tenant. See webhooks overview for delivery and security guidance.Payload
{
"timestamp": 1761494400,
"userTriggererEmail": "pedro.rojas@example.com",
"project": {
"id": 88,
"reference": "PROJ-EXT-100",
"name": "Living room remodeling",
"status": "created",
"description": "Full remodeling of the living room",
"startDate": null,
"endDate": null,
"createdDate": "2025-03-10T14:22:00.000Z",
"customer": {
"id": 2001,
"email": "laura.gomez@example.com",
"phone": "+56987654321",
"name": "Laura",
"lastname": "Gómez",
"reference": "EXT-CUSTOMER-REF-001"
},
"provider": {
"id": 42,
"isCompany": true,
"user": {
"id": 5120,
"email": "contacto@serviciosdelsur.example.com",
"phone": "+56912345678",
"name": "Servicios del Sur",
"lastname": "SpA"
}
},
"service": {
"id": 10,
"name": "Instalación"
},
"address": {
"id": 3001,
"address": "Av. Providencia 1234",
"formatted_address": "Av. Providencia 1234, Santiago, Chile",
"coordinate": {
"lng": -70.58645659063548,
"lat": -33.43324794409109
},
"areas": []
},
"dynamicFieldValues": [
{
"id": 910,
"value": "1500 USD",
"dynamicField": {
"id": 12,
"name": "estimated_budget",
"label": "Estimated budget",
"type": "text",
"value": ""
}
}
]
}
}Purpose
Sodtrack sends this payload when a new project is created in the platform, regardless of the channel it originated from: the admin panel, the Integration API (Project Creation), the execution of a budget that generates bookings, or the creation of bookings that open a new project.
The payload is a snapshot of the project at the moment of creation, together with its customer, provider, service and address, so the receiving system can register the project locally without any additional call to Sodtrack. Bookings are not part of this payload: each booking is notified with BookingCreatedEvent, which carries the id and reference of its project.
Trigger Condition
This webhook is triggered when:
-
A new project has been successfully persisted in the Sodtrack system, and
-
The project-level dynamic field values received on creation have been saved.
The event is emitted right after the project is created, before any shopping cart or booking is linked to it.
Example Use Cases
-
Register Sodtrack projects in the store or ERP system as soon as they are created.
-
Link the bookings received later through BookingCreatedEvent to a project already stored locally, using
project.idorproject.reference. -
Keep third-party dashboards synchronized with project creation activity.
Field Definitions
📋 Event
| Field | Type | Description |
|---|---|---|
timestamp | number | Moment the event was built, as a Unix timestamp in seconds. |
userTriggererEmail | string | Email of the user that created the project. system when no user is associated with the request. |
📁 Project — project
| Field | Type | Description |
|---|---|---|
project.id | number | Unique Sodtrack project ID. |
project.reference | string | null |
project.name | string | Project name. |
project.status | string | Project status. "created" for a newly created project. |
project.description | string | null |
project.startDate | string | null |
project.endDate | string | null |
project.createdDate | string | Project creation timestamp. |
project.customer | object | null |
project.provider | object | null |
project.service | object | null |
project.address | object | null |
project.dynamicFieldValues | array | Project-level dynamic field values (see Dynamic field value). Empty when there are none. |
🧍 Customer — project.customer
Current values read from the customer record when the event is emitted.
| Field | Type | Description |
|---|---|---|
project.customer.id | number | Sodtrack customer ID. |
project.customer.reference | string | null |
project.customer.name | string | Customer first name. |
project.customer.lastname | string | Customer last name. |
project.customer.email | string | Customer email. |
project.customer.phone | string | null |
👷 Provider — project.provider
| Field | Type | Description |
|---|---|---|
project.provider.id | number | Sodtrack provider ID of the provider assigned to the project. |
project.provider.isCompany | boolean | true when the provider is a company. |
project.provider.user | object | User data of the provider (id, name, lastname, email, phone). |
project.provider.parent | object | Only present when the provider belongs to a company: the company (id, isCompany, user). |
🏠 Address — project.address
| Field | Type | Description |
|---|---|---|
project.address.id | number | Sodtrack address ID. |
project.address.address | string | Address as entered. |
project.address.formatted_address | string | Normalized address as resolved by Sodtrack. |
project.address.coordinate | object | null |
project.address.areas | array | Always empty in this event. |
🧩 Dynamic field value — project.dynamicFieldValues[]
| Field | Type | Description |
|---|---|---|
id | number | Value ID. |
value | string | Loaded value. |
dynamicField | object | Field definition (id, name, label, type, value). |
Payload Example
{
"timestamp": 1761494400,
"userTriggererEmail": "pedro.rojas@example.com",
"project": {
"id": 88,
"reference": "PROJ-EXT-100",
"name": "Living room remodeling",
"status": "created",
"description": "Full remodeling of the living room",
"startDate": null,
"endDate": null,
"createdDate": "2025-03-10T14:22:00.000Z",
"customer": {
"id": 2001,
"email": "laura.gomez@example.com",
"phone": "+56987654321",
"name": "Laura",
"lastname": "Gómez",
"reference": "EXT-CUSTOMER-REF-001"
},
"provider": {
"id": 42,
"isCompany": true,
"user": {
"id": 5120,
"email": "contacto@serviciosdelsur.example.com",
"phone": "+56912345678",
"name": "Servicios del Sur",
"lastname": "SpA"
}
},
"service": {
"id": 10,
"name": "Instalación"
},
"address": {
"id": 3001,
"address": "Av. Providencia 1234",
"formatted_address": "Av. Providencia 1234, Santiago, Chile",
"coordinate": {
"lng": -70.58645659063548,
"lat": -33.43324794409109
},
"areas": []
},
"dynamicFieldValues": [
{
"id": 910,
"value": "1500 USD",
"dynamicField": {
"id": 12,
"name": "estimated_budget",
"label": "Estimated budget",
"type": "text",
"value": ""
}
}
]
}
}Project created through Project Creation, without provider, service or address:
{
"timestamp": 1761494400,
"userTriggererEmail": "system",
"project": {
"id": 90,
"reference": "PROJ-EXT-102",
"name": "Kitchen repair",
"status": "created",
"description": null,
"startDate": null,
"endDate": null,
"createdDate": "2025-04-02T11:00:00.000Z",
"customer": {
"id": 2001,
"email": "laura.gomez@example.com",
"phone": "+56987654321",
"name": "Laura",
"lastname": "Gómez",
"reference": "EXT-CUSTOMER-REF-001"
},
"provider": null,
"service": null,
"address": null,
"dynamicFieldValues": []
}
}Business Rules & Constraints
When the webhook is sent
-
The event is emitted for every project created in Sodtrack. The payload carries no field identifying the origin channel.
-
The event is emitted asynchronously. A delivery failure does not affect the creation of the project.
Projects and bookings
-
The project is notified before any shopping cart or booking is linked to it, so this payload never includes bookings.
-
Each booking is notified separately with BookingCreatedEvent, which includes the
idandreferenceof its project. Use them to link the booking to the project received in this event. -
To retrieve the full project later, including its shopping carts and bookings, use Get Project.
Provider
-
When the provider assigned to the project belongs to a company,
providerdescribes the assigned provider and the company is inprovider.parent. -
For an independent provider or a company,
provider.parentis not present.
Nullable objects
-
customer,provider,serviceandaddresscan each benullas a whole, not only their inner fields. A receiver must not assume the objects are present. -
address.coordinateisnullwhen the address was registered without geolocation.
Data and format
-
All identifiers are delivered as numbers.
-
timestampis a Unix timestamp in seconds. Dates (createdDate,startDate,endDate) use ISO 8601 (UTC). -
address.coordinateis a flat object withlngandlatproperties. It is not GeoJSON. -
Inside
addressandprovider, field names keep Sodtrack's internal format (for exampleformatted_address,isCompany).