---
updatedAt: 2026-06-09T08:33:52.000Z
---

Fetch the complete documentation index at: https://apidocs.hibob.com/llms.txt. Use this file to discover all available pages before exploring further.

# Bulk create attendance entries

Create one or more attendance entries (time log entries) for employees. Entries must match the <b>reporting method</b> (duration or start-end) and rules of the <b>attendance policy</b> linked to the employee.
<p><b>Before using this endpoint</b></p> <ul> <li>Read the <a href="/docs/explore-attendance-api" target="_blank">Explore Attendance API</a> for concepts, usage, rate limits, and permissions.</li> <li>Maximum <b>100 entries</b> per request.</li>
<li><b>Reporting method</b>: <ul> <li><b>Duration</b>: Use when you only need to log a total amount of time for a day. Send <code>clockInDate</code> (YYYY-MM-DD) and <code>duration</code> (minutes). Maximum <b>24 hours</b> </li> <li><b>Start-end</b>: Use when you know the actual start and end times. Send <code>clockInTime</code> (timestamp that includes the date) and optionally <code>clockOutTime</code>. The entry date is taken from <code>clockInTime</code>.</li> </ul> </li> <li><b>Cross-midnight</b>: <code>clockInTime</code> and <code>clockOutTime</code> must be on the <b>same date</b>. Sending an entry where clock-out is on another day than clock-in will return an error. Split cross-midnight work into two entries: one ending at 23:59 and one starting at 00:00 the next day.</li>
       
</ul>


**Error handling**

Pay attention to the following error when creating attendance entries:

* **Error: 400 Bad Request**
* **Error message**: `exception.attendance.entry.overlap`
* **Description**: One or more attendance entries in the request overlap with existing attendance entries for the employee.
* **How to handle**: Do not retry the request. Review the attendance entries being submitted and ensure that duplicate or overlapping entries are not sent

This error indicates a validation issue rather than a temporary failure. Retrying the same request will produce the same result unless the conflicting attendance entries are corrected or removed.

# OpenAPI definition

```json
{
  "openapi": "3.1.1",
  "info": {
    "title": "Attendance API",
    "contact": {
      "name": "Hi Bob, Inc."
    },
    "description": "Public API for importing attendance entries and managing attendance projects, tasks, and clients. Supports detailed field metadata and flexible filtering.",
    "license": {
      "name": "Proprietary",
      "url": "https://apidocs.hibob.com/docs/api-terms-of-use"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.hibob.com/v1",
      "description": "Production"
    },
    {
      "url": "https://api.sandbox.hibob.com/v1",
      "description": "Sandbox"
    }
  ],
  "x-readme": {
    "metrics-enabled": false
  },
  "tags": [
    {
      "name": "Attendance",
      "description": "Access attendance entries"
    }
  ],
  "paths": {
    "/attendance/entries": {
      "post": {
        "operationId": "post_attendance-entries",
        "tags": [
          "Attendance"
        ],
        "summary": "Bulk create attendance entries",
        "description": "Create one or more attendance entries (time log entries) for employees. Entries must match the <b>reporting method</b> (duration or start-end) and rules of the <b>attendance policy</b> linked to the employee.\n<p><b>Before using this endpoint</b></p> <ul> <li>Read the <a href=\"/docs/explore-attendance-api\" target=\"_blank\">Explore Attendance API</a> for concepts, usage, rate limits, and permissions.</li> <li>Maximum <b>100 entries</b> per request.</li>\n<li><b>Reporting method</b>: <ul> <li><b>Duration</b>: Use when you only need to log a total amount of time for a day. Send <code>clockInDate</code> (YYYY-MM-DD) and <code>duration</code> (minutes). Maximum <b>24 hours</b> </li> <li><b>Start-end</b>: Use when you know the actual start and end times. Send <code>clockInTime</code> (timestamp that includes the date) and optionally <code>clockOutTime</code>. The entry date is taken from <code>clockInTime</code>.</li> </ul> </li> <li><b>Cross-midnight</b>: <code>clockInTime</code> and <code>clockOutTime</code> must be on the <b>same date</b>. Sending an entry where clock-out is on another day than clock-in will return an error. Split cross-midnight work into two entries: one ending at 23:59 and one starting at 00:00 the next day.</li>\n       \n</ul>\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntriesCreateRequest"
              },
              "examples": {
                "createStartEndEntryWithProject": {
                  "summary": "Create start/end entry with project and task",
                  "description": "Create a single attendance entry with start/end reporting, including project and task. Required: employeeId, type, reportingMethod, and clockInTime. clockOutTime is optional—omit to create an open (clocked-in) entry.",
                  "value": {
                    "items": [
                      {
                        "objectType": "attendanceEntry",
                        "fields": {
                          "/attendanceEntry/employeeId": {
                            "value": "3308236575481004065"
                          },
                          "/attendanceEntry/type": {
                            "value": "work"
                          },
                          "/attendanceEntry/reportingMethod": {
                            "value": "startEnd"
                          },
                          "/attendanceEntry/clockInTime": {
                            "value": "2026-01-26T16:00:00"
                          },
                          "/attendanceEntry/clockOutTime": {
                            "value": "2026-01-26T17:30:00"
                          },
                          "/attendanceEntry/projectId": {
                            "value": 1682
                          },
                          "/attendanceEntry/taskId": {
                            "value": 5
                          }
                        }
                      }
                    ]
                  }
                },
                "createDurationEntry": {
                  "summary": "Create duration entry (date + duration)",
                  "description": "Create a single attendance entry using duration reporting. Required fields are employeeId, type, reportingMethod (duration), clockInDate, and duration.",
                  "value": {
                    "items": [
                      {
                        "objectType": "attendanceEntry",
                        "fields": {
                          "/attendanceEntry/employeeId": {
                            "value": "3308236575481004065"
                          },
                          "/attendanceEntry/type": {
                            "value": "work"
                          },
                          "/attendanceEntry/reportingMethod": {
                            "value": "duration"
                          },
                          "/attendanceEntry/clockInDate": {
                            "value": "2026-01-26"
                          },
                          "/attendanceEntry/duration": {
                            "value": 90
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Attendance entries created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntryIdsResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request is malformed or includes invalid parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed. Check your service user credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The service user or token is missing the required permissions to access the requested data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Feature not enabled for this company",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded - see <a href=\"https://apidocs.hibob.com/reference/attendance#rate-limiting\" target=\"_blank\">Rate limits</a>",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred. Try again or contact support if the issue persists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "basic": []
          },
          {
            "Bearer": []
          }
        ],
        "x-internal": false
      }
    }
  },
  "components": {
    "securitySchemes": {
      "basic": {
        "type": "http",
        "scheme": "basic",
        "description": "Basic HTTP authentication using service user credentials"
      },
      "Bearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "OAuth 2.0",
        "description": "OAuth 2.0 authentication using an Access Token is available for registered partners only.  Try It! does not support the full HiBob OAuth flow. You can follow <a href=\"https://apidocs.hibob.com/reference/oauth-20#testing-from-the-public-api-reference\" target=\"_blank\">these steps</a> to complete the OAuth 2.0 flow in Postman and then paste the token here."
      }
    },
    "schemas": {
      "ApiErrorResponse": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "Error key identifier"
          },
          "error": {
            "type": "string",
            "description": "Human-readable error message"
          },
          "args": {
            "type": "array",
            "description": "Optional error arguments providing additional context",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EntryCreateItemDuration": {
        "type": "object",
        "required": [
          "objectType",
          "fields"
        ],
        "properties": {
          "objectType": {
            "type": "string",
            "enum": [
              "attendanceEntry"
            ],
            "description": "Must be attendanceEntry"
          },
          "fields": {
            "type": "object",
            "description": "Fields for an entry using **duration** reporting (date + duration). Required: employeeId, type, reportingMethod (duration), clockInDate, duration.",
            "required": [
              "/attendanceEntry/employeeId",
              "/attendanceEntry/type",
              "/attendanceEntry/reportingMethod",
              "/attendanceEntry/clockInDate",
              "/attendanceEntry/duration"
            ],
            "properties": {
              "/attendanceEntry/employeeId": {
                "type": "object",
                "description": "The employee ID.",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                }
              },
              "/attendanceEntry/type": {
                "type": "object",
                "description": "Entry type — either \"work\" or \"break\".",
                "properties": {
                  "value": {
                    "type": "string",
                    "enum": [
                      "work",
                      "break"
                    ]
                  }
                }
              },
              "/attendanceEntry/reportingMethod": {
                "type": "object",
                "description": "Must be \"duration\" for this schema.",
                "properties": {
                  "value": {
                    "type": "string",
                    "enum": [
                      "duration"
                    ]
                  }
                }
              },
              "/attendanceEntry/clockInDate": {
                "type": "object",
                "description": "Entry date only (YYYY-MM-DD). Required for duration reporting. For start-end reporting you do not send this field — the date is taken from <code>clockInTime</code> automatically.",
                "properties": {
                  "value": {
                    "type": "string",
                    "format": "date"
                  }
                }
              },
              "/attendanceEntry/duration": {
                "type": "object",
                "description": "Duration in minutes. Required for duration reporting. Maximum 24 hours (1440 minutes) per entry.",
                "properties": {
                  "value": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1440
                  }
                }
              },
              "/attendanceEntry/reasonCode": {
                "type": "object",
                "description": "Reason code for the attendance entry. The value must be a valid string ID from the company's \"Time Log Entry Reason\" list (timeLogEntryReason). Use the <a href=\"https://apidocs.hibob.com/reference/get_company-named-lists-listname\" target=\"_blank\">company lists metadata endpoint</a> to retrieve the reasons list values and provide the list name (timeLogEntryReason) as a parameter. This parameter is optional.",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                }
              },
              "/attendanceEntry/notes": {
                "type": "object",
                "description": "Free-text notes for the attendance entry. This parameter is optional.",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                }
              },
              "/attendanceEntry/projectId": {
                "type": "object",
                "description": "Project ID for project tracking. This parameter is optional. Use the <a href=\"#operation/post_attendance-projects-search\">Search projects</a> endpoint to get available project IDs.",
                "properties": {
                  "value": {
                    "type": "integer",
                    "format": "int64"
                  }
                }
              },
              "/attendanceEntry/taskId": {
                "type": "object",
                "description": "Task ID for task tracking. This parameter is optional. Use the <a href=\"#operation/post_attendance-project-tasks-search\">Search tasks</a> endpoint to get available task IDs for a given project.",
                "properties": {
                  "value": {
                    "type": "integer",
                    "format": "int64"
                  }
                }
              }
            }
          }
        },
        "description": "Attendance entry create item using duration reporting (date + duration)."
      },
      "EntryCreateItemStartEnd": {
        "type": "object",
        "required": [
          "objectType",
          "fields"
        ],
        "properties": {
          "objectType": {
            "type": "string",
            "enum": [
              "attendanceEntry"
            ],
            "description": "Must be attendanceEntry"
          },
          "fields": {
            "type": "object",
            "description": "Fields for an entry using <b>start-end</b> reporting (clock-in and optional clock-out). Required: employeeId, type, reportingMethod (startEnd), clockInTime. <b>clockOutTime is optional</b>—omit it to create an open (clocked-in) entry.",
            "required": [
              "/attendanceEntry/employeeId",
              "/attendanceEntry/type",
              "/attendanceEntry/reportingMethod",
              "/attendanceEntry/clockInTime"
            ],
            "properties": {
              "/attendanceEntry/employeeId": {
                "type": "object",
                "description": "The employee ID.",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                }
              },
              "/attendanceEntry/type": {
                "type": "object",
                "description": "Entry type — either \"work\" or \"break\".",
                "properties": {
                  "value": {
                    "type": "string",
                    "enum": [
                      "work",
                      "break"
                    ]
                  }
                }
              },
              "/attendanceEntry/reportingMethod": {
                "type": "object",
                "description": "Must be \"startEnd\" for this schema.",
                "properties": {
                  "value": {
                    "type": "string",
                    "enum": [
                      "startEnd"
                    ]
                  }
                }
              },
              "/attendanceEntry/clockInTime": {
                "type": "object",
                "description": "Clock-in as a <b>timestamp</b> (date + time, e.g. ISO 8601). Required for start-end reporting. The <b>date part</b> of this timestamp is the entry date; the system uses it automatically.",
                "properties": {
                  "value": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Timestamp (date + time) in date-time format (e.g. ISO 8601).",
                    "example": "2026-01-26T09:00:00"
                  }
                }
              },
              "/attendanceEntry/clockOutTime": {
                "type": "object",
                "description": "Clock-out as a <b>timestamp</b> (date + time, e.g. ISO 8601). <b>Optional when creating an entry</b>—omit to create an open (clocked-in) entry; include to close the entry. When provided, the <b>date part</b> must be the same as the date in <code>clockInTime</code>; if clock-out is on another day, the API returns an error. Split cross-midnight work into two entries (e.g. one till 23:59, one from 00:00 the next day).",
                "properties": {
                  "value": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Timestamp (date + time) in date-time format (e.g. ISO 8601).",
                    "example": "2026-01-26T17:30:00"
                  }
                }
              },
              "/attendanceEntry/reasonCode": {
                "type": "object",
                "description": "Reason code for the attendance entry. This parameter is optional. Must be a valid string ID from the company's \"Time Log Entry Reason\" list. Use the <a href=\"https://apidocs.hibob.com/reference/get_company-named-lists-listname\" target=\"_blank\">company lists metadata endpoint</a> to retrieve the reasons list values and provide the list name (timeLogEntryReason) as a parameter.",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                }
              },
              "/attendanceEntry/notes": {
                "type": "object",
                "description": "Free-text notes for the attendance entry. This parameter is optional.",
                "properties": {
                  "value": {
                    "type": "string"
                  }
                }
              },
              "/attendanceEntry/projectId": {
                "type": "object",
                "description": "Project ID for project tracking. This parameter is optional. Use the <a href=\"#operation/post_attendance-projects-search\">Search projects</a> endpoint to get available project IDs.",
                "properties": {
                  "value": {
                    "type": "integer",
                    "format": "int64"
                  }
                }
              },
              "/attendanceEntry/taskId": {
                "type": "object",
                "description": "Task ID for task tracking. This parameter is optional. Use the <a href=\"#operation/post_attendance-project-tasks-search\">Search tasks</a> endpoint to get available task IDs for a given project.",
                "properties": {
                  "value": {
                    "type": "integer",
                    "format": "int64"
                  }
                }
              }
            }
          }
        },
        "description": "Attendance entry create item using start-end reporting (clock-in and optional clock-out)."
      },
      "EntriesCreateRequest": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/EntryCreateItemStartEnd"
                },
                {
                  "$ref": "#/components/schemas/EntryCreateItemDuration"
                }
              ]
            },
            "description": "One or more attendance entries to create. Each item must conform to either duration reporting (date + duration) or start-end reporting (clock-in and optional clock-out). Maximum 100 entries per request.",
            "default": [
              {
                "objectType": "attendanceEntry",
                "fields": {
                  "/attendanceEntry/employeeId": {
                    "value": "3308236575481004065"
                  },
                  "/attendanceEntry/type": {
                    "value": "work"
                  },
                  "/attendanceEntry/reportingMethod": {
                    "value": "startEnd"
                  },
                  "/attendanceEntry/clockInTime": {
                    "value": "2026-01-26T16:00:00"
                  },
                  "/attendanceEntry/clockOutTime": {
                    "value": "2026-01-26T17:30:00"
                  },
                  "/attendanceEntry/projectId": {
                    "value": 1682
                  },
                  "/attendanceEntry/taskId": {
                    "value": 5
                  }
                }
              }
            ],
            "example": [
              {
                "objectType": "attendanceEntry",
                "fields": {
                  "/attendanceEntry/employeeId": {
                    "value": "3308236575481004065"
                  },
                  "/attendanceEntry/type": {
                    "value": "work"
                  },
                  "/attendanceEntry/reportingMethod": {
                    "value": "startEnd"
                  },
                  "/attendanceEntry/clockInTime": {
                    "value": "2026-01-26T16:00:00"
                  },
                  "/attendanceEntry/clockOutTime": {
                    "value": "2026-01-26T17:30:00"
                  },
                  "/attendanceEntry/projectId": {
                    "value": 1682
                  },
                  "/attendanceEntry/taskId": {
                    "value": 5
                  }
                }
              }
            ]
          },
          "request_metadata": {
            "type": "object",
            "description": "Optional metadata for the request"
          }
        },
        "description": "Request body for creating attendance entries (max 100 items)"
      },
      "EntryIdsResponse": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of the created attendance entries"
          }
        },
        "description": "Response after creating one or more attendance entries"
      }
    }
  }
}
```