# Create approvals Approvals are not created or updated directly. Rather, approvable records are submitted or approved through this POST request. > Note: Only administrators and portfolio editors can approve records. API users can only submit records (set status to pending), but not approve them. Endpoint: POST /approvals Version: v1 Security: AuthToken ## Request fields (application/json): - `approvables` (array, required) An array of records being submitted or approved. - `approvables.id` (integer, required) The ID of the Time Entry or Expense Item. Example: 123 - `approvables.type` (string, required) The type of resource being submitted. Enum: "TimeEntry", "ExpenseItem" - `approvables.updated_at` (string, required) The current updated_at timestamp of the record, required for concurrency checks. Example: "2016-10-04T15:33:32Z" - `status` (string, required) The desired status change. Enum: "pending", "approved" - `updated_at` (string) The current updated_at timestamp of the record, required for concurrency checks. This value must exactly match the timestamp from the latest GET response to ensure the record hasn't been modified by another user. Example: "2016-10-04T15:33:32Z" ## Response 200 fields (application/json): - `paging` (object) - `paging.per_page` (integer) The maximum number of items to show per response page. Example: 100 - `paging.page` (integer) The current response page number. Example: 1 - `paging.previous` (string,null) If you're on the first page, this value is null; otherwise the value is the path and query parameters to get the previous page of items. Example: "/api/v1/users?per_page=1000&page=1" - `paging.self` (string) The path and query parameters to get the current page of items. Example: "/api/v1/users?per_page=1000&page=2" - `paging.next` (string,null) If there are more items, this value is the path and query parameters to get the next page of items; otherwise, it's null. Example: "/api/v1/users?per_page=1000&page=3" - `paging.count` (integer,null) The total number of items in all the pages. - `data` (array) - `data.id` (integer) Unique identifier for the approval record. Example: 890 - `data.status` (string) The current status of the approval. Enum: "pending", "approved", "rejected" - `data.approvable_id` (integer) The ID of the record being approved (TimeEntry or ExpenseItem). Example: 123 - `data.approvable_type` (string) The type of record being approved. Enum: "TimeEntry", "ExpenseItem" - `data.submitted_by` (integer) The ID of the user who submitted the record. Example: 8 - `data.submitted_at` (string) The timestamp when the record was submitted for approval. Example: "2016-10-13T20:16:40Z" - `data.approved_by` (integer,null) The ID of the user who approved the record, or null if not yet approved. - `data.approved_at` (string,null) The timestamp when the record was approved, or null if not yet approved. - `data.created_at` (string) - `data.updated_at` (string) ## Response 403 fields (application/json): - `message` (string) Example: "forbidden" - `errors` (array) ## Response 400 fields