API Documentation

API Endpoint

Overheads

Overheads

For more details about what overheads are, please refer to the help article.

The Overhead object represents overhead costs for a particular month of a fiscal year. Productive generates overhead objects automatically every month, starting the month when you opened your Productive account.

Please note that some overhead settings are also defined at the organisation level. This settings can be changed by modifying the Organizations object.

Supported attributes

  • facility_costs (integer)

  • facility_costs_breakdown (json)

  • use_overhead (boolean)

  • overhead_controls (json)

  • averaging_period (integer)

Costs are always defined in cents.

Facility cost breakdown can be defined as:

{
  "sections": [
    {
      "name": "Section",
      "rows": [
        {
          "cost": 200000,
          "name": "Facility cost"
        }
      ]
    }
  ]
}

There are six overhead controls which can be set to true or false inside a json object:

{
  "exclude_work_overhead": false,
  "exclude_expense_overhead": false,
  "exclude_facility_overhead": false,
  "exclude_overtime_overhead": true,
  "exclude_time_off_overhead": false,
  "exclude_undertime_overhead": true
}

These are default control settings when a new overhead is created. When changed for the current month, the settings are transferred to the next month.

Averaging period can only contain integer values from 1 to 12 which represents the number of months.

To change the overhead recalculation day and to globally enable or disable overhead, please use the Organization object.

Supported filters

There are no supported filters for Overhead objects.

Supported sort params

There are no supported params for Overhead objects. Default sorting is by Overhead id in a descending order (from newest to oldest).

GET /api/v2/overheads
Requestsreturns overheads

GET  /api/v2/overheads

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": [
    {
      "id": "1",
      "type": "overheads",
      "attributes": {
        "started_on": "2025-07-01",
        "ended_on": null,
        "exchange_rate": "1.0",
        "updated_at": "2025-08-01T06:06:31.913+02:00",
        "facility_costs_breakdown": {},
        "recalculated_at": null,
        "use_overhead": false,
        "overhead_controls": {},
        "recalculating_status": {},
        "uses_averaging": false,
        "averaging_period": 1,
        "total_hours": "0.0",
        "client_hours": "0.0",
        "internal_hours": "0.0",
        "time_off_hours": "0.0",
        "overhead_hours": "0.0",
        "client_overhead_hours": "0.0",
        "internal_overhead_hours": "0.0",
        "time_off_overhead_hours": "0.0",
        "overtracked_hours": "0.0",
        "undertracked_hours": "0.0",
        "capacity": "0.0",
        "currency": "USD",
        "currency_default": "USD",
        "currency_normalized": "USD",
        "facility_costs": 0,
        "facility_costs_default": 0,
        "facility_costs_normalized": 0,
        "internal_work_costs": 0,
        "internal_work_costs_default": 0,
        "internal_work_costs_normalized": 0,
        "time_off_costs": 0,
        "time_off_costs_default": 0,
        "time_off_costs_normalized": 0,
        "internal_expense_costs": 0,
        "internal_expense_costs_default": 0,
        "internal_expense_costs_normalized": 0,
        "facility_cost_per_hour": 1500,
        "facility_cost_per_hour_default": 1500,
        "facility_cost_per_hour_normalized": 1500,
        "overtracked_costs": 0,
        "overtracked_costs_default": 0,
        "overtracked_costs_normalized": 0,
        "undertracked_costs": 0,
        "undertracked_costs_default": 0,
        "undertracked_costs_normalized": 0,
        "new_internal_cost_per_hour": 1000,
        "new_internal_cost_per_hour_default": 1000,
        "new_internal_cost_per_hour_normalized": 1000,
        "internal_componentized_costs": 0,
        "internal_componentized_costs_default": 0,
        "internal_componentized_costs_normalized": 0
      },
      "relationships": {
        "organization": {
          "data": {
            "type": "organizations",
            "id": "794"
          }
        },
        "updater": {
          "meta": {
            "included": false
          }
        },
        "subsidiary": {
          "meta": {
            "included": false
          }
        }
      }
    }
  ],
  "links": {
    "first": "http://api-test.productive.io/api/v2/overheads?page%5Bnumber%5D=1&page%5Bsize%5D=30",
    "last": "http://api-test.productive.io/api/v2/overheads?page%5Bnumber%5D=1&page%5Bsize%5D=30"
  },
  "meta": {
    "current_page": 1,
    "total_pages": 1,
    "total_count": 1,
    "page_size": 30,
    "max_page_size": 200
  }
}

Get overheads
GET/api/v2/overheads


GET /api/v2/overheads/1
Requestsreturns overhead

GET  /api/v2/overheads/2

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "2",
    "type": "overheads",
    "attributes": {
      "started_on": "2025-07-01",
      "ended_on": null,
      "exchange_rate": "1.0",
      "updated_at": "2025-08-01T06:06:31.979+02:00",
      "facility_costs_breakdown": {},
      "recalculated_at": null,
      "use_overhead": false,
      "overhead_controls": {},
      "recalculating_status": {},
      "uses_averaging": false,
      "averaging_period": 1,
      "total_hours": "0.0",
      "client_hours": "0.0",
      "internal_hours": "0.0",
      "time_off_hours": "0.0",
      "overhead_hours": "0.0",
      "client_overhead_hours": "0.0",
      "internal_overhead_hours": "0.0",
      "time_off_overhead_hours": "0.0",
      "overtracked_hours": "0.0",
      "undertracked_hours": "0.0",
      "capacity": "0.0",
      "currency": "USD",
      "currency_default": "USD",
      "currency_normalized": "USD",
      "facility_costs": 0,
      "facility_costs_default": 0,
      "facility_costs_normalized": 0,
      "internal_work_costs": 0,
      "internal_work_costs_default": 0,
      "internal_work_costs_normalized": 0,
      "time_off_costs": 0,
      "time_off_costs_default": 0,
      "time_off_costs_normalized": 0,
      "internal_expense_costs": 0,
      "internal_expense_costs_default": 0,
      "internal_expense_costs_normalized": 0,
      "facility_cost_per_hour": 1500,
      "facility_cost_per_hour_default": 1500,
      "facility_cost_per_hour_normalized": 1500,
      "overtracked_costs": 0,
      "overtracked_costs_default": 0,
      "overtracked_costs_normalized": 0,
      "undertracked_costs": 0,
      "undertracked_costs_default": 0,
      "undertracked_costs_normalized": 0,
      "new_internal_cost_per_hour": 1000,
      "new_internal_cost_per_hour_default": 1000,
      "new_internal_cost_per_hour_normalized": 1000,
      "internal_componentized_costs": 0,
      "internal_componentized_costs_default": 0,
      "internal_componentized_costs_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "795"
        }
      },
      "updater": {
        "meta": {
          "included": false
        }
      },
      "subsidiary": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

Gets an overhead
GET/api/v2/overheads/{id}

URI Parameters
HideShow
id
number (required) Example: 1

overhead id


PATCH /api/v2/overheads/1
Requestsupdates overheadreturns error

PATCH  /api/v2/overheads/3

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "overheads",
    "attributes": {
      "facility_costs": 1000000,
      "use_overhead": true,
      "averaging_period": 10,
      "overhead_controls": {
        "exclude_work_overhead": false,
        "exclude_time_off_overhead": false,
        "exclude_expense_overhead": false,
        "exclude_undertime_overhead": true,
        "exclude_overtime_overhead": true
      }
    }
  }
}
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "3",
    "type": "overheads",
    "attributes": {
      "started_on": "2025-07-01",
      "ended_on": null,
      "exchange_rate": "1.0",
      "updated_at": "2025-08-01T06:06:32.078+02:00",
      "facility_costs_breakdown": {},
      "recalculated_at": null,
      "use_overhead": true,
      "overhead_controls": {
        "exclude_work_overhead": false,
        "exclude_time_off_overhead": false,
        "exclude_expense_overhead": false,
        "exclude_undertime_overhead": true,
        "exclude_overtime_overhead": true
      },
      "recalculating_status": {},
      "uses_averaging": false,
      "averaging_period": 10,
      "total_hours": "0.0",
      "client_hours": "0.0",
      "internal_hours": "0.0",
      "time_off_hours": "0.0",
      "overhead_hours": "0.0",
      "client_overhead_hours": "0.0",
      "internal_overhead_hours": "0.0",
      "time_off_overhead_hours": "0.0",
      "overtracked_hours": "0.0",
      "undertracked_hours": "0.0",
      "capacity": "0.0",
      "currency": "USD",
      "currency_default": "USD",
      "currency_normalized": "USD",
      "facility_costs": 1000000,
      "facility_costs_default": 1000000,
      "facility_costs_normalized": 1000000,
      "internal_work_costs": 0,
      "internal_work_costs_default": 0,
      "internal_work_costs_normalized": 0,
      "time_off_costs": 0,
      "time_off_costs_default": 0,
      "time_off_costs_normalized": 0,
      "internal_expense_costs": 0,
      "internal_expense_costs_default": 0,
      "internal_expense_costs_normalized": 0,
      "facility_cost_per_hour": 1500,
      "facility_cost_per_hour_default": 1500,
      "facility_cost_per_hour_normalized": 1500,
      "overtracked_costs": 0,
      "overtracked_costs_default": 0,
      "overtracked_costs_normalized": 0,
      "undertracked_costs": 0,
      "undertracked_costs_default": 0,
      "undertracked_costs_normalized": 0,
      "new_internal_cost_per_hour": 1000,
      "new_internal_cost_per_hour_default": 1000,
      "new_internal_cost_per_hour_normalized": 1000,
      "internal_componentized_costs": 0,
      "internal_componentized_costs_default": 0,
      "internal_componentized_costs_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "796"
        }
      },
      "updater": {
        "meta": {
          "included": false
        }
      },
      "subsidiary": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

PATCH  /api/v2/overheads/4

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "overheads",
    "attributes": {
      "facility_costs": ""
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "can't be blank",
      "source": {
        "pointer": "data/attributes/facility_costs"
      }
    }
  ]
}

Update an overhead
PATCH/api/v2/overheads/{id}

URI Parameters
HideShow
id
number (required) Example: 1

overhead id


PATCH /api/v2/overheads/1/recalculate
Requestsrecalculates overhead

PATCH  /api/v2/overheads/5/recalculate

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "5",
    "type": "overheads",
    "attributes": {
      "started_on": "2020-09-01",
      "ended_on": "2020-09-30",
      "exchange_rate": "1.0",
      "updated_at": "2025-08-01T06:06:32.733+02:00",
      "facility_costs_breakdown": {},
      "recalculated_at": "2025-08-01T06:06:32.733+02:00",
      "use_overhead": false,
      "overhead_controls": {},
      "recalculating_status": {
        "time_entries": false,
        "bookings": false
      },
      "uses_averaging": false,
      "averaging_period": 1,
      "total_hours": "20.0",
      "client_hours": "20.0",
      "internal_hours": "0.0",
      "time_off_hours": "0.0",
      "overhead_hours": "20.0",
      "client_overhead_hours": "20.0",
      "internal_overhead_hours": "0.0",
      "time_off_overhead_hours": "0.0",
      "overtracked_hours": "0.0",
      "undertracked_hours": "0.0",
      "capacity": "0.0",
      "currency": "USD",
      "currency_default": "USD",
      "currency_normalized": "USD",
      "facility_costs": 1000000,
      "facility_costs_default": 1000000,
      "facility_costs_normalized": 1000000,
      "internal_work_costs": 0,
      "internal_work_costs_default": 0,
      "internal_work_costs_normalized": 0,
      "time_off_costs": 0,
      "time_off_costs_default": 0,
      "time_off_costs_normalized": 0,
      "internal_expense_costs": 0,
      "internal_expense_costs_default": 0,
      "internal_expense_costs_normalized": 0,
      "facility_cost_per_hour": 50000,
      "facility_cost_per_hour_default": 50000,
      "facility_cost_per_hour_normalized": 50000,
      "overtracked_costs": 0,
      "overtracked_costs_default": 0,
      "overtracked_costs_normalized": 0,
      "undertracked_costs": 0,
      "undertracked_costs_default": 0,
      "undertracked_costs_normalized": 0,
      "new_internal_cost_per_hour": 0,
      "new_internal_cost_per_hour_default": 0,
      "new_internal_cost_per_hour_normalized": 0,
      "internal_componentized_costs": 0,
      "internal_componentized_costs_default": 0,
      "internal_componentized_costs_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "798"
        }
      },
      "updater": {
        "meta": {
          "included": false
        }
      },
      "subsidiary": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

Recalculate an overhead
PATCH/api/v2/overheads/{id}/recalculate

URI Parameters
HideShow
id
number (required) Example: 1

overhead id


Generated by aglio on 01 Aug 2025