Configuring FireHydrant incident data export

Overview

The data export feature can be used to incorporate granular FireHydrant incident data into your organization's custom reports and data pipelines. After installing this integration, you will be able to retrieve data periodically exported by FireHydrant in CSV format from the FireHydrant API.

Installing the data export integration

Data exports are only available for Enterprise-level FireHydrant accounts.  A FireHydrant owner role is required to configure the data export integration.

To begin generating data, first install the Data Export integration from the Integrations section of FireHydrant.

Screen_Shot_2022-07-06_at_1.55.59_PM.png

Generating data exports

Once configured, the data will automatically be exported in CSV format on a daily cadence.

Retrieving data exports

Retrieving exported data is a two-step process. First, retrieve a list of all the export requests that have completed and are new since you last checked for data:

GET <api host>/v1/integrations/data_export/export_requests?status=completed&newer_than=<datetime of earliest export to consider>

This will return a list of exports, each of which will have a url field that can be used to fetch the raw exported data.  In the API response, & is encoded as u0026. You can reformat this by piping the response through jq, for example:

curl --request GET --url 'https://api.firehydrant.io/v1/integrations/data_export/export_requests?newer_than=2022-11-22T00%3A00%3A00' --header 'Authorization: TOKEN_HERE' --header 'Content-Type: application/json' | jq

 

  • The url will expire in 5 minutes, beyond which you will need to fetch a new url.
  • Data exports are expunged from the platform after 30 days.
  • Incident data is intentionally overlapped between exports to ensure that no incident data is missed.  You will need to deduplicate redundant incidents as part of data pre-processing.

For additional details, see the data export API documentation.

Export data format

The following is the data dictionary for exported data.  Some of the field types that store duration use ISO 8061 format.  For details on the specification, see this resource on ISO 8601 duration encoding.

# Data Dictionary

## text/csv+incident-20220525 These items represent incidents in FireHydrant **Format:** text/csv ### Fields | Name | Type | Description | | ---:|:--- |:--- | | id | String | The unique identifier for this incident. | | account_id | String | The id for the account that owns this incident | | organization_id | String | The id for the organization that owns this incident | | created_at | DateTime | The utc date and time when this incident was created | | updated_at | DateTime | The utc date and time when this incident was last directly updated | | number | String | The incident number for this incident. | | name | String | The name/title of this incident. | | severity | String | The currently assigned severity. | | priority | String | The currently assigned priority. | | started_at | DateTime | The time at which the incident started. | | detected_at | DateTime | The time at which the incident entered the detected milestone. | | acknowledged_at | DateTime | The time at which the incident entered the acknowledged milestone. | | investigating_at | DateTime | The time at which the incident entered the investigating milestone. | | identified_at | DateTime | The time at which the incident entered the identified milestone. | | mitigated_at | DateTime | The time at which the incident entered the mitigated milestone. | | resolved_at | DateTime | The time at which the incident entered the resolved milestone. | | retrospective_started_at | DateTime | The time at which the incident entered the retrospective_started milestone. | | retrospective_completed_at | DateTime | The time at which the incident entered the retrospective_completed milestone. | | opened_at | DateTime | The time at which the incident was opened. | | started_by | String | The actor that opened the incident. | | active_duration | String | ISO 8601 Duration that the incident has been or was active. | --- ## text/csv+incident_role_assignment-20220525
Entities representing incident role assignments **Format:** text/csv ### Fields | Name | Type | Description | | ---:|:--- |:--- | | id | String | The unique identifier for this incident. | | account_id | String | The id for the account that owns this incident | | organization_id | String | The id for the organization that owns this incident | | created_at | DateTime | The utc date and time when this incident was created | | updated_at | DateTime | The utc date and time when this incident was last directly updated | | status | String | Is the role assignment currently active (assigned) | | incident_role_id | String | Unique identifier for the role. | | incident_role_name | String | Name of the role. | | incident_id | String | Unique identifier for the associated incident. | | assigned_user_id | String | Unique identifier for the assigned user. | | assigned_user_name | String | Name of the assigned user. | --- ## text/csv+incident_event-20220525 Entities representing the stream of events related to an incident. **Format:** text/csv ### Fields | Name | Type | Description | | ---:|:--- |:--- | | id | String | The unique identifier for this incident. | | account_id | String | The id for the account that owns this incident | | organization_id | String | The id for the organization that owns this incident | | created_at | DateTime | The utc date and time when this incident was created | | updated_at | DateTime | The utc date and time when this incident was last directly updated | | incident_id | String | Unique identifier of the associated incident. | | created_by_name | String | Name of the actor that cause the event. | | type | String | The type of event | | event_details_schema | String | JSON-encoded JSONSchema of the details of the event. The event_details field should conform to this schema and the schema has descriptive comments about the embedded fields. | | event_details | String | JSON-encoded object containing the details for this event based on it's type. | --- ## text/csv+incident_impact-20220525 No description available. **Format:** text/csv --- ## text/csv+retrospective-20220525 Entities representing incident retrospectives **Format:** text/csv ### Fields | Name | Type | Description | | ---:|:--- |:--- | | id | String | The unique identifier for this incident. | | account_id | String | The id for the account that owns this incident | | organization_id | String | The id for the organization that owns this incident | | created_at | DateTime | The utc date and time when this incident was created | | updated_at | DateTime | The utc date and time when this incident was last directly updated | | name | String | Name/title of the retrospective. | | summary | String | Longer description of the retrospective. | | tags | String | JSON-encoded array of tags. | | incident_id | String | Id of associated incident. | | additional_details | String | Freeform information about the retrospective. | | questions | String | JSON array containing question responses with question title, body, and unique question type id. Responses with the same type id are logically responses to the same question even if the title varies. | --- ## Incident Event Details Schemata ### Type: IncidentStatus **Schema:**: ``` { "type": "object", "properties": { "new_status": { "type": [ "string" ], "$comment": "The status the incident is moving to." } } } ``` ### Type: BulkMilestoneUpdate **Schema:**: ``` { "type": "object", "properties": { "original_milestone": { "type": [ "string" ], "$comment": "The name of the milestone prior to this update" }, "current_milestone": { "type": [ "string" ], "$comment": "The name of the milestone due to this update" } } } ``` ### Type: ImpactUpdate **Schema:**: ``` { "type": "object", "properties": { "update_type": { "type": [ "string" ], "$comment": "Whether this event represents an addition, removal, update, or no-op." }, "impacted_type": { "type": [ "string" ], "$comment": "The type of the item for which impact was updated" }, "impacted_id": { "type": [ "string" ], "$comment": "The id of the item for which impact was updated" }, "old_condition_name": { "type": [ "string", "null" ], "$comment": "The name of the previous condition before this update" }, "new_condition_name": { "type": [ "string", "null" ], "$comment": "The name of the condition set in this update" } } } ``` ### Type: GeneralUpdate **Schema:**: ``` { "type": "object", "properties": { "description": { "type": [ "string" ], "$comment": "Description of the event" } } } ``` ### Type: Note **Schema:**: ``` { "type": "object", "properties": { "body": { "type": [ "string" ], "$comment": "The content of the note." } } } ``` ### Type: RoleUpdate **Schema:**: ``` { "type": "object", "properties": { "role_assignment_id": { "type": [ "string" ], "$comment": "Id of role assignment. See the incident role assignment docs." }, "incident_role_name": { "type": [ "string" ], "$comment": "Name of the role refrenced in this update." }, "operation": { "type": [ "string" ], "$comment": "Type of operation performed in this update." }, "assigned_user_id": { "type": [ "string" ], "$comment": "Id of user (un)assigned in this update." }, "assigned_user_name": { "type": [ "string" ], "$comment": "Name of user (un)assigned in this update." } } } ``` ### Type: ChatMessage **Schema:**: ``` { "type": "object", "properties": { "chat_user_id": { "type": [ "string" ], "$comment": "The chat-provider user id of the user who sent the message." } } } ``` ### Type: AddTaskList **Schema:**: ``` { "type": "object", "properties": { "task_list_id": { "type": [ "string" ], "$comment": "ID of task list" }, "task_list_name": { "type": [ "string" ], "$comment": "Name of task list" } } } ``` ### Type: RunbookAttachment **Schema:**: ``` { "type": "object", "properties": { "runbook_id": { "type": [ "string" ], "$comment": "Id of the runbook that was attached." }, "runbook_name": { "type": [ "string" ], "$comment": "Name of the runbook that was attached." } } } ``` ### Type: RunbookStepExecutionUpdate **Schema:**: ``` { "type": "object", "properties": { "description": { "type": [ "string" ], "$comment": "A description of the update" }, "step_execution_id": { "type": [ "string" ], "$comment": "Unique ID for this invocation of the step." }, "step_id": { "type": [ "string" ], "$comment": "Id of the step." }, "step_name": { "type": [ "string" ], "$comment": "Name of the step." } } } ``` ### Type: TaskUpdate **Schema:**: ``` { "type": "object", "properties": { "task_id": { "type": [ "string" ], "$comment": "Unique id of the task being updated" }, "task_summary": { "type": [ "string" ], "$comment": "Summary of the task being updated" }, "task_description": { "type": [ "string" ], "$comment": "Description of the task being updated" }, "operation": { "type": [ "string" ], "$comment": "Type of of update" }, "new_state": { "type": [ "string" ], "$comment": "New state of the task after this update" } } } ``` ### Type: TeamAssignment **Schema:**: ``` { "type": "object", "properties": { "team_id": { "type": [ "string" ], "$comment": "Unique id of the team being being assigned" }, "team_name": { "type": [ "string" ], "$comment": "Name of the team being being assigned" } } } ``` ### Type: TicketUpdate **Schema:**: ``` { "type": "object", "properties": { "ticket_id": { "type": [ "string" ], "$comment": "Unique id of the task being updated" }, "ticket_type": { "type": [ "string" ], "$comment": "Type of ticket, eg incident, task, etc" }, "ticket_provider_id": { "type": [ "string", "null" ], "$comment": "Id of ticket in non-firehydrant ticketing provider (eg Jira) if the ticket is synced." } } } ``` ### Type: GenericResourceChange **Schema:**: ``` { "type": "object", "properties": { "operation": { "type": [ "string" ], "$comment": "Nature of operation." }, "resource_type": { "type": [ "string" ], "$comment": "Type of resource changed." }, "resource_id": { "type": [ "string" ], "$comment": "Unique id of the resource changed." }, "fields": { "type": [ "object" ], "$comment": "Object containing changed fields." } } } ```

 

 

 

 

Was this article helpful?
0 out of 0 found this helpful

Articles in this section

Contact Our Support Team
Got a Question or Suggestion? We're here to help!
Follow us on Twitter
Get the latest news and updates first