Projects: Create, list, update & delete
Updated (WIP):
This guide walks you through creating, updating and archiving projects using our Open API.
Jump to section:
- POST /projects/create
- POST/projects/list
- PATCH / projects/update
- DELETE /projects/softDelete
- DELETE /projects/hardDelete
POST /projects/create
AUse commonthis requirementendpoint isto create new projects.
Authentication
Endpoint:
POST https://[DOMAIN]/api/v1/projects/create
Headers:
accept: application/jsonX-API-KEY: YOUR_API_KEY(ReplaceYOUR_API_KEYwith your actual API key.)Content-Type: application/json
Request structure
Every request to create a new project frommust meta data that you already hold, such asinclude a customerJSON name,object addresswith andthe postcode.following:
YouOwner canfield: create projects using theThe /projects/createownerendpoint.
Projects must have an "owner", which must be specified in the request POST. The owner email mustshould be a membervalid email address of thean proEasy PV Pro team thatmember. ownsThis email will become the APIprimary key.project Theowner.
Meta canobject: then subsequently shareUse the projectmeta withobject other members of the team if they wish.
Fields you canto pass across in the 'meta' object are: projectName customerName customerEmail customerPhone address postcode crmReference
crmReference can be usedparameters for your internal reference - it's likely that you will have a unique database ID that you want to be associated with the project. All fields are optional.
You
buildDaterun this fromSets thecommanddesignlinemodeto try it out. Changefor theownerproject.emailAllowedtovalues:auser"pre2000""post2000""post2006"
withinprojectNamecustomerNamecustomerEmailcustomerPhoneaddresspostcodelatandlng- provide theEasy PV team (probably your own if you want to be able to check it has been successful),latitude andput your keylongitude in theX-API-KEYdecimalheader.degrees formatstatus- set the status of the project. Allowed values:"Lead""Quote""Sale""Install""Completed""Rejected"
crmReference- include an ID or reference to the customer record or project in your CRM
Example API request and response
Example API Request
Below is an example using curl that demonstrates how to create a project with the required fields:
curl -X 'POST'POST 'https://sandbox.heatpunk.co.uk/api/v1/projects/create' \
-H 'accept: application/json' \
-H 'X-API-KEY: **********KEY***********'YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"owner": "sales@midsummerenergy.co.uk"sales@example.com",
"meta": {
"customerName": "Joe Bloggs",
"address": "123 Sample Street",
"postcode": "AB12 3CD"
}
}'
Response
TheA successful call returns a JSON object containing a projectId which you should store in your own database for future reference.
You can use the ID to construct a link directly to the project using the following link structure:
https://heatpunk.co.uk/?project=[PROJECT ID]
POST /projects/list
Use this endpoint willto returnget a list of projects.
Authentication
Endpoint:
POST https://[DOMAIN]/api/v1/projects/list
Headers:
X-API-KEY: [YOUR_API_KEY](Replace[YOUR_API_KEY]with your actual API key.)
Request structure
Every request to update a project must contain a JSON object with the following.
User email: The userEmail should be a valid projectIdproperty.email Youaddress willof almostan certainlyEasy wantPV Pro team member who has access to savethe this projectId within your own database.projects.
YouStart candate: linkstart directlyshould be in the format (YYYY-MM-DD)
End date: end should be in the format (YYYY-MM-DD)
Example API request and response
Example API Request
Below is an example using curl that demonstrates how to a project withretrieve a linklist of the following form:projects:
curl -X POST 'https://heatpunk.co.uk/?project=872019api/v1/projects/list' \
-H 'X-API-KEY: YOUR_API_KEY' \
-d '{
"ownerEmail": "matt.agnes+proBasic@midsummerenergy.co.uk",
"start": "2025-05-22",
"end": "2025-11-22"
}'
Response
A successful request returns a projects object containing a list of projects within the specified date range. For example:
{
"status": "success",
"projects": [
{
"ID": 1353680,
"owner": 27091,
"dateCreated": "2025-09-01T09:14:30.000Z",
"dateModified": "2025-12-04T11:52:18.000Z",
"projectName": "Mon Sep 01 2025",
"customerName": "",
"address": "105 Sample Road Cambridge Cambridgeshire",
"postcode": "CB1 3QD",
"lat": 52.193912506103516,
"lng": 0.15014299750328064,
"status": "Lead"
},
...
],
"ownerEmail": "matt.agnes+proBasic@midsummerenergy.co.uk",
"ownerID": 00123
}
PATCH /projects/update
Use this endpoint to update core project data for an existing project.
Authentication
Endpoint:
PATCH https://[DOMAIN]/api/v1/projects/update
Headers:
accept: application/jsonX-API-KEY: [YOUR_API_KEY](Replace[YOUR_API_KEY]with your actual API key.)Content-Type: application/json
Request structure
Every request to update a project must contain the project id, user email, and new data to be updated. The data must be an object with keys for each field to be updated.
Congratulations!Project You'veID: usedThe ourprojectId as a number.
User email: The userEmail should be a valid email address of an Easy PV Pro team member who has access to the project.
Data object: Include a data object that will contain the information to be updated. We currently support a meta object with keys for each field to be updated. See the projects/create and projects/data endpoint documentation for the list of project meta fields that can be updated.
Example API request and response
Example API Request
Below is an example using curl that demonstrates how to createupdate a project.project:
curl on-X PATCH 'https://heatpunk.co.uk/api/v1/projects/update' \
-H 'accept: application/json' \
-H 'X-API-KEY: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"projectId": 986206,
"userEmail": "matt.agnes+pro@midsummerenergy.co.uk",
"data": {
"meta": { "status": "Completed"}
}
}'
Response
If the request is successful you will receive a 204 success response.
DELETE /projects/softDelete
Use this endpoint to seereversibly how you can retrieve files and form data fromsoft-delete a project.
Authentication
Endpoint:
DELETE https://[DOMAIN]/api/v1/projects/softDelete
Headers:
accept: application/jsonX-API-KEY: [YOUR_API_KEY](Replace[YOUR_API_KEY]with your actual API key.)Content-Type: application/json
Request structure
Every request to archive a project must contain the project id and user email.
Project ID: The projectId as a number.
User email: The userEmail should be a valid email address of an Easy PV Pro team member who has access to the project.
Example API request and response
Example API Request
Below is an example using curl that demonstrates how to soft delete a project:
curl -X DELETE 'https://heatpunk.co.uk/api/v1/projects/softDelete' \
-H 'accept: application/json' \
-H 'X-API-KEY: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"projectId": 986206,
"userEmail": "matt.agnes+pro@midsummerenergy.co.uk",
}'
Response
If the request is successful you will receive a 204 success response.
DELETE /projects/hardDelete
Use this endpoint to permanently delete a project, together with its associated data.
Authentication
Endpoint:
DELETE https://[DOMAIN]/api/v1/projects/hardDelete
Headers:
accept: application/jsonX-API-KEY: [YOUR_API_KEY](Replace[YOUR_API_KEY]with your actual API key.)Content-Type: application/json
Request structure
Every request to archive a project must contain the project id and user email.
Project ID: The projectId as a number.
User email: The userEmail should be a valid email address of an Easy PV Pro team member who has access to the project.
Example API request and response
Example API Request
Below is an example using curl that demonstrates how to hard delete a project:
curl -X DELETE 'https://heatpunk.co.uk/api/v1/projects/hardDelete' \
-H 'accept: application/json' \
-H 'X-API-KEY: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"projectId": 986206,
"userEmail": "matt.agnes+pro@midsummerenergy.co.uk",
}'
Response
If the request is successful you will receive a 204 success response.
We have updated the attribute used by the API when specifying the email address of the user that owns the record so it is consistent across all our endpoints. We now always refer to this attribute as userEmail. If you previously used ownerEmail this will still work as it has been set up as an alias of userEmail.