curl --request POST \
--url https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"client_id": "d3e77fe4b9cae1e82d8a",
"project_id": "e34204233797f4b637c5",
"task_id": "4d0d7ad1-91ce-44d0-abfe-6718422716dd",
"email": "adam@example.com",
"recorded_on": "2025-06-06",
"hours": "2",
"notes": "Completed working on adding tests.",
"metadata": {
"source": "external_api"
},
"checklist_items": [
{
"id": "fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2",
"is_completed": true
}
],
"is_override": false
}
'import requests
url = "https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries"
payload = {
"client_id": "d3e77fe4b9cae1e82d8a",
"project_id": "e34204233797f4b637c5",
"task_id": "4d0d7ad1-91ce-44d0-abfe-6718422716dd",
"email": "adam@example.com",
"recorded_on": "2025-06-06",
"hours": "2",
"notes": "Completed working on adding tests.",
"metadata": { "source": "external_api" },
"checklist_items": [
{
"id": "fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2",
"is_completed": True
}
],
"is_override": False
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
client_id: 'd3e77fe4b9cae1e82d8a',
project_id: 'e34204233797f4b637c5',
task_id: '4d0d7ad1-91ce-44d0-abfe-6718422716dd',
email: 'adam@example.com',
recorded_on: '2025-06-06',
hours: '2',
notes: 'Completed working on adding tests.',
metadata: {source: 'external_api'},
checklist_items: [{id: 'fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2', is_completed: true}],
is_override: false
})
};
fetch('https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 'd3e77fe4b9cae1e82d8a',
'project_id' => 'e34204233797f4b637c5',
'task_id' => '4d0d7ad1-91ce-44d0-abfe-6718422716dd',
'email' => 'adam@example.com',
'recorded_on' => '2025-06-06',
'hours' => '2',
'notes' => 'Completed working on adding tests.',
'metadata' => [
'source' => 'external_api'
],
'checklist_items' => [
[
'id' => 'fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2',
'is_completed' => true
]
],
'is_override' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries"
payload := strings.NewReader("{\n \"client_id\": \"d3e77fe4b9cae1e82d8a\",\n \"project_id\": \"e34204233797f4b637c5\",\n \"task_id\": \"4d0d7ad1-91ce-44d0-abfe-6718422716dd\",\n \"email\": \"adam@example.com\",\n \"recorded_on\": \"2025-06-06\",\n \"hours\": \"2\",\n \"notes\": \"Completed working on adding tests.\",\n \"metadata\": {\n \"source\": \"external_api\"\n },\n \"checklist_items\": [\n {\n \"id\": \"fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2\",\n \"is_completed\": true\n }\n ],\n \"is_override\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"client_id\": \"d3e77fe4b9cae1e82d8a\",\n \"project_id\": \"e34204233797f4b637c5\",\n \"task_id\": \"4d0d7ad1-91ce-44d0-abfe-6718422716dd\",\n \"email\": \"adam@example.com\",\n \"recorded_on\": \"2025-06-06\",\n \"hours\": \"2\",\n \"notes\": \"Completed working on adding tests.\",\n \"metadata\": {\n \"source\": \"external_api\"\n },\n \"checklist_items\": [\n {\n \"id\": \"fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2\",\n \"is_completed\": true\n }\n ],\n \"is_override\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"client_id\": \"d3e77fe4b9cae1e82d8a\",\n \"project_id\": \"e34204233797f4b637c5\",\n \"task_id\": \"4d0d7ad1-91ce-44d0-abfe-6718422716dd\",\n \"email\": \"adam@example.com\",\n \"recorded_on\": \"2025-06-06\",\n \"hours\": \"2\",\n \"notes\": \"Completed working on adding tests.\",\n \"metadata\": {\n \"source\": \"external_api\"\n },\n \"checklist_items\": [\n {\n \"id\": \"fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2\",\n \"is_completed\": true\n }\n ],\n \"is_override\": false\n}"
response = http.request(request)
puts response.read_body{
"notice_code": "<string>",
"organization_id": "<string>",
"subdomain": "<string>",
"id": "<string>",
"hours": 123,
"notes": "<string>",
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_email": "jsmith@example.com",
"recorded_on": "2023-12-25",
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}Create time entry
Create a time entry.
curl --request POST \
--url https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"client_id": "d3e77fe4b9cae1e82d8a",
"project_id": "e34204233797f4b637c5",
"task_id": "4d0d7ad1-91ce-44d0-abfe-6718422716dd",
"email": "adam@example.com",
"recorded_on": "2025-06-06",
"hours": "2",
"notes": "Completed working on adding tests.",
"metadata": {
"source": "external_api"
},
"checklist_items": [
{
"id": "fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2",
"is_completed": true
}
],
"is_override": false
}
'import requests
url = "https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries"
payload = {
"client_id": "d3e77fe4b9cae1e82d8a",
"project_id": "e34204233797f4b637c5",
"task_id": "4d0d7ad1-91ce-44d0-abfe-6718422716dd",
"email": "adam@example.com",
"recorded_on": "2025-06-06",
"hours": "2",
"notes": "Completed working on adding tests.",
"metadata": { "source": "external_api" },
"checklist_items": [
{
"id": "fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2",
"is_completed": True
}
],
"is_override": False
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
client_id: 'd3e77fe4b9cae1e82d8a',
project_id: 'e34204233797f4b637c5',
task_id: '4d0d7ad1-91ce-44d0-abfe-6718422716dd',
email: 'adam@example.com',
recorded_on: '2025-06-06',
hours: '2',
notes: 'Completed working on adding tests.',
metadata: {source: 'external_api'},
checklist_items: [{id: 'fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2', is_completed: true}],
is_override: false
})
};
fetch('https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 'd3e77fe4b9cae1e82d8a',
'project_id' => 'e34204233797f4b637c5',
'task_id' => '4d0d7ad1-91ce-44d0-abfe-6718422716dd',
'email' => 'adam@example.com',
'recorded_on' => '2025-06-06',
'hours' => '2',
'notes' => 'Completed working on adding tests.',
'metadata' => [
'source' => 'external_api'
],
'checklist_items' => [
[
'id' => 'fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2',
'is_completed' => true
]
],
'is_override' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries"
payload := strings.NewReader("{\n \"client_id\": \"d3e77fe4b9cae1e82d8a\",\n \"project_id\": \"e34204233797f4b637c5\",\n \"task_id\": \"4d0d7ad1-91ce-44d0-abfe-6718422716dd\",\n \"email\": \"adam@example.com\",\n \"recorded_on\": \"2025-06-06\",\n \"hours\": \"2\",\n \"notes\": \"Completed working on adding tests.\",\n \"metadata\": {\n \"source\": \"external_api\"\n },\n \"checklist_items\": [\n {\n \"id\": \"fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2\",\n \"is_completed\": true\n }\n ],\n \"is_override\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"client_id\": \"d3e77fe4b9cae1e82d8a\",\n \"project_id\": \"e34204233797f4b637c5\",\n \"task_id\": \"4d0d7ad1-91ce-44d0-abfe-6718422716dd\",\n \"email\": \"adam@example.com\",\n \"recorded_on\": \"2025-06-06\",\n \"hours\": \"2\",\n \"notes\": \"Completed working on adding tests.\",\n \"metadata\": {\n \"source\": \"external_api\"\n },\n \"checklist_items\": [\n {\n \"id\": \"fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2\",\n \"is_completed\": true\n }\n ],\n \"is_override\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetoinvoice.com/api/external/v2/time-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"client_id\": \"d3e77fe4b9cae1e82d8a\",\n \"project_id\": \"e34204233797f4b637c5\",\n \"task_id\": \"4d0d7ad1-91ce-44d0-abfe-6718422716dd\",\n \"email\": \"adam@example.com\",\n \"recorded_on\": \"2025-06-06\",\n \"hours\": \"2\",\n \"notes\": \"Completed working on adding tests.\",\n \"metadata\": {\n \"source\": \"external_api\"\n },\n \"checklist_items\": [\n {\n \"id\": \"fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2\",\n \"is_completed\": true\n }\n ],\n \"is_override\": false\n}"
response = http.request(request)
puts response.read_body{
"notice_code": "<string>",
"organization_id": "<string>",
"subdomain": "<string>",
"id": "<string>",
"hours": 123,
"notes": "<string>",
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_email": "jsmith@example.com",
"recorded_on": "2023-12-25",
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{your-subdomain} with your workspace’s subdomain. Learn how to find your subdomain in Workspace subdomain.
Headers
Use the X-Api-Key header to provide your workspace API key. Refer to Authentication for more information.
Body
Unique ID of the client. Refer to Getting the Client ID section for detailed instructions.
"d3e77fe4b9cae1e82d8a"
Unique ID of the project. Refer to Getting the Project ID section for detailed instructions.
"e34204233797f4b637c5"
Unique ID of the task. Refer to Getting the Task ID section for detailed instructions.
"4d0d7ad1-91ce-44d0-abfe-6718422716dd"
Email address of the user.
"adam@example.com"
Date on which the time entry needs to be added.
"2025-06-06"
Number of hours worked on that particular task.
"2"
Additional notes for the task.
"Completed working on adding tests."
Additional metadata for the time entry.
{ "source": "external_api" }List of checklist items.
Hide child attributes
Hide child attributes
Unique ID of the checklist item. Refer to Getting the Checklist ID section for detailed instructions.
"fe067c21-ee1e-432a-9f38-f1ae0d7ceaf2"
Status of the checklist item.
true
Whether to override autolock settings for this time entry.
false
Response
Created - Time entry created successfully