Get invoiced amount per month (Insights widget)
Insights endpoint invoiced-per-month-widget-data. Help text: 'Compares the monthly invoicing in the current fiscal year to the previous fiscal year. You can only see data from projects you manage, and all invoices are included, no matter their status. Values are shown in system currency, and invoices in different currencies are converted.' Formula, VAT basis, conversion rate/date, fiscal-year boundaries and timezone are not established. PASS-THROUGH PROXY. Insights' HTTP status, headers and body are returned to the caller unchanged. The controller says it exists only so the React frontend can reach Insights and must not be used for anything else.
Use it to:
- Show a project manager their projects' invoicing trend
Not for:
- Revenue reporting — no stable contract; use the invoicing APIs
Behaviour:
- Read-after-write consistency: not yet documented.
Not yet documented: behaviour; examples; purpose → description; response → default ordering; response → empty result; response → pagination; response → success.
curl -X GET "https://app3.timelog.com/your-account/api/v2/insights-service/invoiced-per-month" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://app3.timelog.com/your-account/api/v2/insights-service/invoiced-per-month"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://app3.timelog.com/your-account/api/v2/insights-service/invoiced-per-month", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://app3.timelog.com/your-account/api/v2/insights-service/invoiced-per-month", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://app3.timelog.com/your-account/api/v2/insights-service/invoiced-per-month')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"Properties": {
"type": "example_string",
"width": 3.14,
"height": 3.14,
"sortOrder": 3.14,
"baseCurrencyAbb": "example_string",
"data": [
{
"invoicedAmount": 3.14,
"invoicedAmountLastYear": 3.14,
"year": 3.14,
"lastYear": 3.14,
"month": "example_string"
}
]
},
"Links": [
{
"Href": "example_string",
"Rel": "example_string"
}
],
"Actions": [
{}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Internal Server Error",
"message": "An unexpected error occurred on the server",
"code": 500,
"requestId": "req_1234567890"
}
{
"Code": 42,
"Message": "example_string",
"Details": [
"null"
],
"Parameters": "null",
"Url": "example_string"
}
/v2/insights-service/invoiced-per-month
Target server for requests. Edit to use your own host.
OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
> Not yet documented: how to obtain a token.
> Not yet documented: token lifetime.
Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
> Not yet documented: how to obtain a token.
> Not yet documented: token lifetime.Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
Not yet documented: how to obtain a token.
Not yet documented: token lifetime.
Responses
Invoiced per month widget: monthly invoicing of the current fiscal year vs the previous one. Not paged. CONSUMER-DECLARED SHAPE. Meanings come from the frontend's use and the product's widget help text, not from the producer.
Not yet documented: source type.