Logbook REST APIs
- Last updated
- Save as PDF
Overview
You can use the Logbook RESTful API to create, read, update, and delete logbook entries. All API endpoints are hosted at:
https://api-<your-region>.logbook.planview.com/api/rest/
Replace <your-region> with one of the following based on the hosting location of your environment:
- us
- eu
- ap
For example, if your environment is hosted in the United States, use the following endpoint to call the Log types with configuration API:
https://api-us.logbook.planview.com/api/rest/v1/log-types-with-configs
NOTE
Regarding rate limiting:
- All API endpoints are rate-limited to 500 requests per second per region. If this limit is exceeded, the API will return a "429 Too Many Requests" response.
- Clients should implement retry logic with exponential backoff to handle such scenarios gracefully.
Authentication and authorization
Logbbok API requests require a bearer token obtained using OAuth2 credentials. Follow the steps below to generate and use the token.
- In Planview Admin create an OAuth2 credential for the Logbook integration application.
- Use the OAuth2 credential to obtain an access token. For more information, see OAuth2 Client Credentials.
- Use the access token in API requests by including it in the header of each request as follows:
curl --location 'https://api-us.logbook.planview.com/api/rest/v1/log-types-with-configs' \ --header 'Authorization: Bearer <id_token>'
NOTE
The id_token is valid for the duration specified in the expires_in field (in seconds). You must regenerate the token once it expires to continue using the APIs.
Logbook API
openapi: 3.0.1
info:
title: Logbook API
version: 1.0.0
description: API for managing logs, including custom and system attributes, status, and configurations.
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
LogTypesWithConfigsResponse:
type: object
description: >
Response containing a log type ID and its associated system attribute log types.
properties:
id:
type: integer
description: Unique identifier for the log type.
example: 18
log_types:
type: array
description: List of log types with their section configurations.
items:
$ref: "#/components/schemas/LogTypeWithSectionResponse"
system_attribute_log_types:
type: array
description: >
List of system attribute log types associated with this log type.
items:
$ref: "#/components/schemas/SystemAttributesLogTypeResponse"
required:
- id
- log_types
- system_attribute_log_types
LogTypeWithSectionResponse:
type: object
description: >
A log type including section configurations.
properties:
id:
type: integer
example: 18
type_name:
type: string
example: "Decision"
description:
type: string
example: "NO"
is_published:
type: boolean
example: false
is_deleted:
type: boolean
example: false
created_at:
type: string
format: date-time
example: "2024-01-12T09:25:37.853187"
log_type_categories_id:
type: integer
example: 5
log_types_section:
type: array
items:
$ref: "#/components/schemas/LogTypesSection"
required:
- id
- type_name
- is_published
- is_deleted
- created_at
- log_type_categories_id
- log_types_section
LogTypeLogResponse:
type: object
properties:
id:
type: integer
example: 18
type_name:
type: string
example: "Decision"
description:
type: string
example: "NO"
is_published:
type: boolean
example: false
log_type_categories_id:
type: integer
example: 5
allow_email_notification:
type: boolean
example: true
required:
- id
- type_name
- description
- is_published
- log_type_categories_id
- allow_email_notification
LogTypesSection:
type: object
properties:
id:
type: integer
example: 4
is_default_section:
type: boolean
example: true
section_custom_attribute:
type: array
items:
type: object
example: []
required:
- id
- is_default_section
- section_custom_attribute
SystemAttributesLogTypeResponse:
type: object
description: >
System attribute configurations tied to a log type.
properties:
id:
type: string
example: "839"
is_mandatory:
type: boolean
example: false
name:
type: string
example: "Description"
sa_ids:
type: array
items:
type: integer
example: [1]
config_type:
type: string
enum: [longtext, singleselect, multiselect, date]
example: "longtext"
config_value:
type: object
nullable: true
description: "Configuration value for attributes like options for selects"
properties:
options:
type: array
items:
$ref: "#/components/schemas/Option"
required:
- id
- is_mandatory
- name
- sa_ids
- config_type
AppContext:
type: array
items:
type: object
required:
- container_id
- container_source
- container_type
properties:
container_id:
type: integer
container_source:
type: string
container_type:
type: string
LogResponse:
type: object
properties:
id:
type: integer
name:
type: string
log_type:
$ref: "#/components/schemas/LogTypeLogResponse"
custom_attribute_values:
type: object
additionalProperties: true
example:
values:
574:
ca_config_id: 574
section_ca_id: 1969
value:
id: "UUID"
label: "New 02"
value: "New 02"
system_attribute_values:
type: object
additionalProperties: true
example:
values:
1:
id: 3165
sa_id: 1
value:
id: 1
is_visible: true
label: "New"
value: "New"
created_at:
type: string
format: date-time
transferred_from:
$ref: "#/components/schemas/TransferredLog"
transferred_to:
type: array
items:
$ref: "#/components/schemas/TransferredLog"
required:
- id
LogSystemAttributeValueInput:
type: object
required:
- id
- sa_id
properties:
id:
type: integer
example: 3165
sa_id:
type: integer
example: 1
value:
oneOf:
- type: string
example: "<p>test desc</p>"
- type: object
properties:
id:
type: integer
example: 1
is_visible:
type: boolean
example: true
label:
type: string
example: "New"
value:
type: string
example: "New"
- type: object
properties:
avatar:
type: string
format: uri
example: "url"
email:
type: string
format: email
example: "email@example.com"
id:
type: integer
example: 1037
name:
type: string
example: "John Doe"
planview_user_id:
type: string
example: "uuid"
tenant_user_id:
type: string
example: "tid"
- type: array
items:
type: object
properties:
artifact_id:
type: integer
example: 111
artifact_title:
type: string
example: "Card 1"
artifact_type:
type: string
example: "card"
id:
type: integer
example: 111
type:
type: string
example: "mitigation"
- type: string
format: date
example: "2025-05-23"
LogCustomAttributeValueInput:
type: object
properties:
ca_config_id:
type: integer
example: 574
section_ca_id:
type: integer
example: 1969
value:
oneOf:
- type: string
example: "2025-05-22"
- type: object
properties:
id:
type: string
example: "UUID"
label:
type: string
example: "New 02"
value:
type: string
example: "New 02"
example:
id: "UUID"
label: "New 02"
value: "New 02"
- type: array
items:
type: object
properties:
id:
type: string
example: "UUID"
label:
type: string
example: "1"
selected:
type: boolean
example: true
value:
type: string
example: "1"
example:
- id: "UUID"
label: "1"
selected: true
value: "1"
required:
- ca_config_id
- section_ca_id
TransferredLog:
type: object
properties:
id:
type: integer
example: 123
name:
type: string
example: "User A"
planview_user_id:
type: string
example: "uuid"
tenant_user_id:
type: string
example: "tid"
email:
type: string
format: email
example: "user@example.com"
avatar:
type: string
format: uri
example: "https://example.com/avatar.png"
required:
- id
- name
Option:
type: object
properties:
id:
oneOf:
- type: integer
- type: string
example: 1
is_visible:
type: boolean
nullable: true
example: true
label:
type: string
example: "New"
value:
oneOf:
- type: string
- type: integer
example: "New"
required:
- id
- label
- value
security:
- BearerAuth: []
paths:
/api/rest/v1/logs/list:
post:
summary: Get logs of a workspace/work
tags:
- Logs
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
app_context:
$ref: "#/components/schemas/AppContext"
required:
- app_context
responses:
"200":
description: list of logs of that workspace/work
content:
application/json:
schema:
type: object
properties:
rest_logs_data:
type: array
items:
$ref: "#/components/schemas/LogResponse"
/api/rest/v1/logs:
post:
summary: Create multiple or a single log
tags:
- Logs
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
logs:
type: array
items:
type: object
required:
- log_types_id
- name
- app_context
properties:
log_types_id:
type: integer
name:
type: string
transferred_from_id:
type: integer
custom_attribute_values:
type: array
items:
$ref: "#/components/schemas/LogCustomAttributeValueInput"
system_attribute_values:
type: array
items:
$ref: "#/components/schemas/LogSystemAttributeValueInput"
app_context:
$ref: "#/components/schemas/AppContext"
responses:
"200":
description: Log created
content:
application/json:
schema:
type: object
properties:
rest_add_log:
type: object
properties:
Data:
type: array
items:
$ref: "#/components/schemas/LogResponse"
Failed:
type: array
items:
type: object
properties:
failed_message:
type: string
log_types_id:
type: integer
name:
type: string
transferred_from_id:
type: integer
custom_attribute_values:
type: array
items:
$ref: "#/components/schemas/LogCustomAttributeValueInput"
system_attribute_values:
type: array
items:
$ref: "#/components/schemas/LogSystemAttributeValueInput"
app_context:
$ref: "#/components/schemas/AppContext"
/api/rest/v1/log/delete/{log_id}:
post:
summary: Delete single Log
tags:
- Logs
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
app_context:
$ref: "#/components/schemas/AppContext"
required:
- app_context
parameters:
- name: log_id
in: path
required: true
schema:
type: string
description: The ID of Log to delete
responses:
"200":
description: Log delete
content:
application/json:
schema:
type: object
properties:
rest_delete_log:
type: object
properties:
deleted_id:
type: string
example: 4
example:
rest_delete_log:
deleted_id: "123"
"400":
description: Bad request
content:
application/json:
examples:
LogDoesNotExist:
summary: The log does not exist
value:
code: LOG_DOES_NOT_EXIST
message: The log does not exist in the system
LogDeleted:
summary: The log is already deleted
value:
code: LOG_DELETED
message: The log you are trying to delete is already deleted
LogTransferred:
summary: Log has already been transferred
value:
code: LOG_TRANSFERRED
message: Can not delete a log which already been transferred to another type
"401":
description: Unauthorized
content:
application/json:
examples:
InvalidContainer:
summary: The logs does not belong to the container
value:
code: INVALID_CONTAINER
message: The log does not exist in the provided container in app_context
InvalidTenant:
summary: The log does not belong to the tenant
value:
code: INVALID_TENANT
message: The log does not belong to the provided tenant_group
/api/rest/v1/log/{log_id}:
put:
summary: Update single Log
tags:
- Logs
security:
- BearerAuth: []
parameters:
- name: log_id
in: path
required: true
schema:
type: string
description: The ID of Log to update
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- app_context
properties:
name:
type: string
custom_attribute_values:
type: array
items:
$ref: "#/components/schemas/LogCustomAttributeValueInput"
system_attribute_values:
type: array
items:
$ref: "#/components/schemas/LogSystemAttributeValueInput"
app_context:
$ref: "#/components/schemas/AppContext"
responses:
"200":
description: Log updated
content:
application/json:
schema:
type: object
properties:
rest_modify_log:
type: object
$ref: "#/components/schemas/LogResponse"
/api/rest/v1/log-types-with-configs:
get:
summary: Get log types and configurations
tags:
- Configs
security:
- BearerAuth: []
responses:
"200":
description: Log types and their system attribute configurations.
content:
application/json:
schema:
type: object
properties:
rest_log_types_with_configs:
type: array
items:
$ref: "#/components/schemas/LogTypesWithConfigsResponse"
example:
rest_log_types_with_configs:
- id: 101
log_types:
- id: 101
type_name: "Incident"
description: "Incident logs"
is_published: true
is_deleted: false
created_at: "2024-01-12T09:25:37.853187"
log_type_categories_id: 1
log_types_section:
- id: 11
is_default_section: true
section_custom_attribute: []
system_attribute_log_types:
- id: "5"
name: "Priority"
is_mandatory: true
sa_ids: [1]
config_type: "singleselect"
config_value:
options:
- id: "opt1"
label: "High"
value: "High"
- id: "opt2"
label: "Low"
value: "Low"
- id: "6"
name: "Status"
is_mandatory: false
sa_ids: [2]
config_type: "multiselect"
config_value:
options:
- id: "opt1"
label: "Open"
value: "Open"
- id: "opt2"
label: "Closed"
value: "Closed"

