From 0b4385c83c5225acf0a9b0c76f9e890600a449af Mon Sep 17 00:00:00 2001 From: "Dr. Strangelove" Date: Mon, 18 Oct 2021 12:52:42 -0400 Subject: [PATCH] feat: 21.16 release (#859) * ci: 21.16 image * feat: Looker 21.16 release * resubmit after all tests passing * Remove 21_10 from tested versions * fix lint issues --- csharp/rtl/Constants.cs | 2 +- csharp/sdk/3.1/models.cs | 12 +- csharp/sdk/4.0/methods.cs | 95 +- csharp/sdk/4.0/models.cs | 81 +- go/sdk/v3/models.go | 10 +- go/sdk/v4/methods.go | 73 +- go/sdk/v4/models.go | 139 +- kotlin/src/main/com/looker/sdk/4.0/methods.kt | 100 +- kotlin/src/main/com/looker/sdk/4.0/models.kt | 92 +- kotlin/src/main/com/looker/sdk/4.0/streams.kt | 100 +- kotlin/src/main/com/looker/sdk/Constants.kt | 2 +- packages/sdk/src/3.1/models.ts | 16 +- packages/sdk/src/4.0/funcs.ts | 122 +- packages/sdk/src/4.0/methods.ts | 118 +- packages/sdk/src/4.0/methodsInterface.ts | 95 +- packages/sdk/src/4.0/models.ts | 125 +- packages/sdk/src/4.0/streams.ts | 126 +- packages/sdk/src/constants.ts | 2 +- python/looker_sdk/sdk/api31/methods.py | 79 +- python/looker_sdk/sdk/api31/models.py | 1196 +- python/looker_sdk/sdk/api40/methods.py | 198 +- python/looker_sdk/sdk/api40/models.py | 1441 +- python/looker_sdk/sdk/constants.py | 2 +- spec/Looker.3.1.json | 1626 +- spec/Looker.3.1.oas.json | 1539 +- spec/Looker.4.0.json | 2097 +- spec/Looker.4.0.oas.json | 44912 +++++++++++++++- swift/looker/rtl/constants.swift | 2 +- swift/looker/sdk/methods.swift | 113 +- swift/looker/sdk/models.swift | 230 +- swift/looker/sdk/streams.swift | 113 +- 31 files changed, 51708 insertions(+), 3150 deletions(-) diff --git a/csharp/rtl/Constants.cs b/csharp/rtl/Constants.cs index c7da254f5..e01d8b6a0 100644 --- a/csharp/rtl/Constants.cs +++ b/csharp/rtl/Constants.cs @@ -61,7 +61,7 @@ public struct Constants public const string DefaultApiVersion = "4.0"; public const string AgentPrefix = "CS-SDK"; - public const string LookerVersion = "21.14"; + public const string LookerVersion = "21.16"; public const string Bearer = "Bearer"; public const string LookerAppiId = "x-looker-appid"; diff --git a/csharp/sdk/3.1/models.cs b/csharp/sdk/3.1/models.cs index 315df3527..a45325815 100644 --- a/csharp/sdk/3.1/models.cs +++ b/csharp/sdk/3.1/models.cs @@ -706,9 +706,9 @@ public class CustomWelcomeEmail : SdkModel public bool? enabled { get; set; } = null; /// The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. public string? content { get; set; } = null; - /// The text to appear in the email subject line. + /// The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. public string? subject { get; set; } = null; - /// The text to appear in the header line of the email body. + /// The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. public string? header { get; set; } = null; } @@ -769,6 +769,8 @@ public class Dashboard : SdkModel public Url? edit_uri { get; set; } = null; /// Number of times favorited (read-only) public long? favorite_count { get; set; } = null; + /// Sets the default state of the filters bar to collapsed or open + public bool? filters_bar_collapsed { get; set; } = null; /// Time the dashboard was last accessed (read-only) public DateTime? last_accessed_at { get; set; } = null; /// Time last viewed in the Looker web UI (read-only) @@ -4486,9 +4488,9 @@ public class WriteCustomWelcomeEmail : SdkModel public bool? enabled { get; set; } = null; /// The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. public string? content { get; set; } = null; - /// The text to appear in the email subject line. + /// The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. public string? subject { get; set; } = null; - /// The text to appear in the header line of the email body. + /// The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. public string? header { get; set; } = null; } @@ -4528,6 +4530,8 @@ public class WriteDashboard : SdkModel public bool? crossfilter_enabled { get; set; } = null; /// Whether or not a dashboard is 'soft' deleted. public bool? deleted { get; set; } = null; + /// Sets the default state of the filters bar to collapsed or open + public bool? filters_bar_collapsed { get; set; } = null; /// configuration option that governs how dashboard loading will happen. public string? load_configuration { get; set; } = null; /// Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. diff --git a/csharp/sdk/4.0/methods.cs b/csharp/sdk/4.0/methods.cs index a32d917d9..3d8935927 100644 --- a/csharp/sdk/4.0/methods.cs +++ b/csharp/sdk/4.0/methods.cs @@ -21,7 +21,7 @@ /// SOFTWARE. /// -/// 423 API methods +/// 425 API methods #nullable enable using System; @@ -49,6 +49,7 @@ public Looker40SDK(IAuthSession authSession): base(authSession, "4.0") { } /// /// (Optional) Number of results to return (used with `offset`). /// (Optional) Number of results to skip before returning any (used with `limit`). + /// (Optional) Dimension by which to order the results(`dashboard` | `owner`) /// (Optional) Requested fields. /// (Optional) Filter on returning only enabled or disabled alerts. /// (Optional) Filter on alert frequency, such as: monthly, weekly, daily, hourly, minutes @@ -59,6 +60,7 @@ public Looker40SDK(IAuthSession authSession): base(authSession, "4.0") { } public async Task> search_alerts( long? limit = null, long? offset = null, + string? group_by = null, string? fields = null, bool? disabled = null, string? frequency = null, @@ -71,6 +73,7 @@ public async Task> search_alerts( return await AuthRequest(HttpMethod.Get, "/alerts/search", new Values { { "limit", limit }, { "offset", offset }, + { "group_by", group_by }, { "fields", fields }, { "disabled", disabled }, { "frequency", frequency }, @@ -189,6 +192,23 @@ public async Task> create_alert( return await AuthRequest(HttpMethod.Post, "/alerts", null,body,options); } + /// ### Enqueue an Alert by ID + /// + /// POST /alerts/{alert_id}/enqueue -> void + /// + /// void Alert successfully added to the queue. Does not indicate it has been run () + /// + /// ID of an alert + /// Whether to enqueue an alert again if its already running. + public async Task> enqueue_alert( + long alert_id, + bool? force = null, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Post, $"/alerts/{alert_id}/enqueue", new Values { + { "force", force }},null,options); + } + #endregion Alert: Alert #region ApiAuth: API Authentication @@ -1671,7 +1691,7 @@ public async Task> custom_welcome_ema /// /// If true a test email with the content from the request will be sent to the current user after saving public async Task> update_custom_welcome_email( - WriteCustomWelcomeEmail body, + CustomWelcomeEmail body, bool? send_test_welcome_email = null, ITransportSettings? options = null) { @@ -1855,6 +1875,7 @@ public async Task> mobile_settings( /// - marketplace_auto_install_enabled /// - marketplace_enabled /// - whitelabel_configuration + /// - custom_welcome_email /// /// GET /setting -> Setting /// @@ -1876,6 +1897,7 @@ public async Task> get_setting( /// - marketplace_auto_install_enabled /// - marketplace_enabled /// - whitelabel_configuration + /// - custom_welcome_email /// /// See the `Setting` type for more information on the specific values that can be configured. /// @@ -3065,52 +3087,52 @@ public async Task> dashboard_lookml( return await AuthRequest(HttpMethod.Get, $"/dashboards/lookml/{dashboard_id}", null,null,options); } - /// ### Copy an existing dashboard - /// - /// Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + /// ### Move an existing dashboard /// - /// `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - /// `folder_id` will default to the existing folder. + /// Moves a dashboard to a specified folder, and returns the moved dashboard. /// - /// If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - /// or '(copy <# of copies>)' appended. + /// `dashboard_id` and `folder_id` are required. + /// `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. /// - /// POST /dashboards/{dashboard_id}/copy -> Dashboard + /// PATCH /dashboards/{dashboard_id}/move -> Dashboard /// /// Dashboard Dashboard (application/json) /// - /// Dashboard id to copy. - /// Folder id to copy to. - public async Task> copy_dashboard( + /// Dashboard id to move. + /// Folder id to move to. + public async Task> move_dashboard( string dashboard_id, - string? folder_id = null, + string folder_id, ITransportSettings? options = null) { dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Post, $"/dashboards/{dashboard_id}/copy", new Values { + return await AuthRequest(HttpMethod.Patch, $"/dashboards/{dashboard_id}/move", new Values { { "folder_id", folder_id }},null,options); } - /// ### Move an existing dashboard + /// ### Copy an existing dashboard /// - /// Moves a dashboard to a specified folder, and returns the moved dashboard. + /// Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. /// - /// `dashboard_id` and `folder_id` are required. - /// `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + /// `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + /// `folder_id` will default to the existing folder. /// - /// PATCH /dashboards/{dashboard_id}/move -> Dashboard + /// If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + /// or '(copy <# of copies>)' appended. + /// + /// POST /dashboards/{dashboard_id}/copy -> Dashboard /// /// Dashboard Dashboard (application/json) /// - /// Dashboard id to move. - /// Folder id to move to. - public async Task> move_dashboard( + /// Dashboard id to copy. + /// Folder id to copy to. + public async Task> copy_dashboard( string dashboard_id, - string folder_id, + string? folder_id = null, ITransportSettings? options = null) { dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Patch, $"/dashboards/{dashboard_id}/move", new Values { + return await AuthRequest(HttpMethod.Post, $"/dashboards/{dashboard_id}/copy", new Values { { "folder_id", folder_id }},null,options); } @@ -9006,6 +9028,29 @@ public async Task> send_user_credential { "fields", fields }},null,options); } + /// ### Change a disabled user's email addresses + /// + /// Allows the admin to change the email addresses for all the user's + /// associated credentials. Will overwrite all associated email addresses with + /// the value supplied in the 'email' body param. + /// The user's 'is_disabled' status must be true. + /// + /// POST /users/{user_id}/update_emails -> User + /// + /// User New state for specified user. (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> wipeout_user_emails( + long user_id, + UserEmailOnly body, + string? fields = null, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/update_emails", new Values { + { "fields", fields }},body,options); + } + /// Create an embed user from an external user ID /// /// POST /users/embed_user -> UserPublic diff --git a/csharp/sdk/4.0/models.cs b/csharp/sdk/4.0/models.cs index c235ae4cf..75fedbbdb 100644 --- a/csharp/sdk/4.0/models.cs +++ b/csharp/sdk/4.0/models.cs @@ -21,7 +21,7 @@ /// SOFTWARE. /// -/// 296 API models: 219 Spec, 0 Request, 58 Write, 19 Enum +/// 297 API models: 220 Spec, 0 Request, 57 Write, 20 Enum #nullable enable using System; @@ -64,21 +64,36 @@ public class Alert : SdkModel public string? custom_title { get; set; } = null; /// ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) public long? dashboard_element_id { get; set; } = null; + /// An optional description for the alert. This supplements the title + public string? description { get; set; } = null; /// Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` public AlertDestination[]? destinations { get; set; } = null; public AlertField? field { get; set; } + /// Whether or not the user follows this alert. (read-only) + public bool? followed { get; set; } = null; + /// Whether or not the alert is followable (read-only) + public bool? followable { get; set; } = null; /// ID of the alert (read-only) public long? id { get; set; } = null; /// Whether or not the alert is disabled public bool? is_disabled { get; set; } = null; /// Whether or not the alert is public public bool? is_public { get; set; } = null; + /// The type of the investigative content Valid values are: "dashboard". + [JsonConverter(typeof(StringEnumConverter))] + public InvestigativeContentType? investigative_content_type { get; set; } + /// The ID of the investigative content. For dashboards, this will be the dashboard ID + public string? investigative_content_id { get; set; } = null; + /// The title of the investigative content. (read-only) + public string? investigative_content_title { get; set; } = null; /// ID of the LookML dashboard associated with the alert public string? lookml_dashboard_id { get; set; } = null; /// ID of the LookML dashboard element associated with the alert public string? lookml_link_id { get; set; } = null; /// User id of alert owner public long? owner_id { get; set; } = null; + /// Alert owner's display name (read-only) + public string? owner_display_name { get; set; } = null; /// Value of the alert threshold public double? threshold { get; set; } = null; public AlertConditionState? time_series_condition_state { get; set; } @@ -239,10 +254,8 @@ public class BoardItem : SdkModel public long? content_metadata_id { get; set; } = null; /// Last time the content that this item is based on was updated (read-only) public string? content_updated_at { get; set; } = null; - /// (Write-Only) base64 encoded image data - public string? custom_image_data_base64 { get; set; } = null; - /// Custom image_url entered by the user, if present (read-only) - public string? custom_image_url { get; set; } = null; + /// Custom description entered by the user, if present + public string? custom_description { get; set; } = null; /// Custom title entered by the user, if present public string? custom_title { get; set; } = null; /// Custom url entered by the user, if present @@ -1025,15 +1038,13 @@ public class CredentialsTotp : SdkModel public class CustomWelcomeEmail : SdkModel { - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; /// If true, custom email content will replace the default body of welcome emails public bool? enabled { get; set; } = null; /// The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. public string? content { get; set; } = null; - /// The text to appear in the email subject line. + /// The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. public string? subject { get; set; } = null; - /// The text to appear in the header line of the email body. + /// The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. public string? header { get; set; } = null; } @@ -1093,6 +1104,8 @@ public class Dashboard : SdkModel public string? edit_uri { get; set; } = null; /// Number of times favorited (read-only) public long? favorite_count { get; set; } = null; + /// Sets the default state of the filters bar to collapsed or open + public bool? filters_bar_collapsed { get; set; } = null; /// Time the dashboard was last accessed (read-only) public DateTime? last_accessed_at { get; set; } = null; /// Time last viewed in the Looker web UI (read-only) @@ -1507,6 +1520,8 @@ public class DBConnection : SdkModel public bool? disable_context_comment { get; set; } = null; /// An External OAuth Application to use for authenticating to the database public long? oauth_application_id { get; set; } = null; + /// When true, error PDTs will be retried every regenerator cycle + public bool? always_retry_failed_builds { get; set; } = null; } public class DBConnectionBase : SdkModel @@ -2253,6 +2268,13 @@ public class InternalHelpResourcesContent : SdkModel public string? markdown_content { get; set; } = null; } +/// The type of the investigative content Valid values are: "dashboard". +public enum InvestigativeContentType +{ + [EnumMember(Value = "dashboard")] + dashboard +} + public class LDAPConfig : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -4312,6 +4334,7 @@ public class Setting : SdkModel /// Toggle marketplace on or off public bool? marketplace_enabled { get; set; } = null; public WhitelabelConfiguration? whitelabel_configuration { get; set; } + public CustomWelcomeEmail? custom_welcome_email { get; set; } } public class Snippet : SdkModel @@ -4733,6 +4756,12 @@ public class UserAttributeWithValue : SdkModel public string? hidden_value_domain_whitelist { get; set; } = null; } +public class UserEmailOnly : SdkModel +{ + /// Email Address + public string email { get; set; } = ""; +} + public class UserLoginLockout : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -4873,7 +4902,7 @@ public class Workspace : SdkModel } /// Dynamic writeable type for Alert removes: -/// id +/// followed, followable, id, investigative_content_title, owner_display_name public class WriteAlert : SdkModel { /// Filters coming from the dashboard that are applied. Example `[{ "filter_title": "Name", "field_name": "distribution_centers.name", "filter_value": "Los Angeles CA" }]` @@ -4887,6 +4916,8 @@ public class WriteAlert : SdkModel public string? custom_title { get; set; } = null; /// ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) public long? dashboard_element_id { get; set; } = null; + /// An optional description for the alert. This supplements the title + public string? description { get; set; } = null; /// Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` public AlertDestination[]? destinations { get; set; } = null; public AlertField? field { get; set; } @@ -4894,6 +4925,11 @@ public class WriteAlert : SdkModel public bool? is_disabled { get; set; } = null; /// Whether or not the alert is public public bool? is_public { get; set; } = null; + /// The type of the investigative content Valid values are: "dashboard". + [JsonConverter(typeof(StringEnumConverter))] + public InvestigativeContentType? investigative_content_type { get; set; } + /// The ID of the investigative content. For dashboards, this will be the dashboard ID + public string? investigative_content_id { get; set; } = null; /// ID of the LookML dashboard associated with the alert public string? lookml_dashboard_id { get; set; } = null; /// ID of the LookML dashboard element associated with the alert @@ -4944,11 +4980,11 @@ public class WriteBoard : SdkModel } /// Dynamic writeable type for BoardItem removes: -/// can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, title, url, view_count +/// can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, description, favorite_count, id, image_url, location, title, url, view_count public class WriteBoardItem : SdkModel { - /// (Write-Only) base64 encoded image data - public string? custom_image_data_base64 { get; set; } = null; + /// Custom description entered by the user, if present + public string? custom_description { get; set; } = null; /// Custom title entered by the user, if present public string? custom_title { get; set; } = null; /// Custom url entered by the user, if present @@ -5099,20 +5135,6 @@ public class WriteCredentialsEmail : SdkModel public bool? forced_password_reset_at_next_login { get; set; } = null; } -/// Dynamic writeable type for CustomWelcomeEmail removes: -/// can -public class WriteCustomWelcomeEmail : SdkModel -{ - /// If true, custom email content will replace the default body of welcome emails - public bool? enabled { get; set; } = null; - /// The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - public string? content { get; set; } = null; - /// The text to appear in the email subject line. - public string? subject { get; set; } = null; - /// The text to appear in the header line of the email body. - public string? header { get; set; } = null; -} - /// Dynamic writeable type for Dashboard removes: /// can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count, url public class WriteDashboard : SdkModel @@ -5144,6 +5166,8 @@ public class WriteDashboard : SdkModel public bool? crossfilter_enabled { get; set; } = null; /// Whether or not a dashboard is 'soft' deleted. public bool? deleted { get; set; } = null; + /// Sets the default state of the filters bar to collapsed or open + public bool? filters_bar_collapsed { get; set; } = null; /// configuration option that governs how dashboard loading will happen. public string? load_configuration { get; set; } = null; /// Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. @@ -5368,6 +5392,8 @@ public class WriteDBConnection : SdkModel public bool? disable_context_comment { get; set; } = null; /// An External OAuth Application to use for authenticating to the database public long? oauth_application_id { get; set; } = null; + /// When true, error PDTs will be retried every regenerator cycle + public bool? always_retry_failed_builds { get; set; } = null; } /// Dynamic writeable type for DBConnectionOverride removes: @@ -6014,6 +6040,7 @@ public class WriteSetting : SdkModel /// id, logo_url, favicon_url /// public WriteWhitelabelConfiguration? whitelabel_configuration { get; set; } + public CustomWelcomeEmail? custom_welcome_email { get; set; } } /// Dynamic writeable type for SshServer removes: diff --git a/go/sdk/v3/models.go b/go/sdk/v3/models.go index 3fa39adc4..ace12f2f0 100644 --- a/go/sdk/v3/models.go +++ b/go/sdk/v3/models.go @@ -459,8 +459,8 @@ type CustomWelcomeEmail struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Enabled *bool `json:"enabled,omitempty"` // If true, custom email content will replace the default body of welcome emails Content *string `json:"content,omitempty"` // The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - Subject *string `json:"subject,omitempty"` // The text to appear in the email subject line. - Header *string `json:"header,omitempty"` // The text to appear in the header line of the email body. + Subject *string `json:"subject,omitempty"` // The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. + Header *string `json:"header,omitempty"` // The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. } @@ -494,6 +494,7 @@ type Dashboard struct { DeleterId *int64 `json:"deleter_id,omitempty"` // Id of User that 'soft' deleted the dashboard. EditUri *url.URL `json:"edit_uri,omitempty"` // Relative path of URI of LookML file to edit the dashboard (LookML dashboard only). FavoriteCount *int64 `json:"favorite_count,omitempty"` // Number of times favorited + FiltersBarCollapsed *bool `json:"filters_bar_collapsed,omitempty"` // Sets the default state of the filters bar to collapsed or open LastAccessedAt *time.Time `json:"last_accessed_at,omitempty"` // Time the dashboard was last accessed LastViewedAt *time.Time `json:"last_viewed_at,omitempty"` // Time last viewed in the Looker web UI LoadConfiguration *string `json:"load_configuration,omitempty"` // configuration option that governs how dashboard loading will happen. @@ -3216,8 +3217,8 @@ type WriteCredentialsEmail struct { type WriteCustomWelcomeEmail struct { Enabled *bool `json:"enabled,omitempty"` // If true, custom email content will replace the default body of welcome emails Content *string `json:"content,omitempty"` // The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - Subject *string `json:"subject,omitempty"` // The text to appear in the email subject line. - Header *string `json:"header,omitempty"` // The text to appear in the header line of the email body. + Subject *string `json:"subject,omitempty"` // The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. + Header *string `json:"header,omitempty"` // The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. } // Dynamic writeable type for Dashboard removes: @@ -3238,6 +3239,7 @@ type WriteDashboard struct { BackgroundColor *string `json:"background_color,omitempty"` // Background color CrossfilterEnabled *bool `json:"crossfilter_enabled,omitempty"` // Enables crossfiltering in dashboards - only available in dashboards-next (beta) Deleted *bool `json:"deleted,omitempty"` // Whether or not a dashboard is 'soft' deleted. + FiltersBarCollapsed *bool `json:"filters_bar_collapsed,omitempty"` // Sets the default state of the filters bar to collapsed or open LoadConfiguration *string `json:"load_configuration,omitempty"` // configuration option that governs how dashboard loading will happen. LookmlLinkId *string `json:"lookml_link_id,omitempty"` // Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. ShowFiltersBar *bool `json:"show_filters_bar,omitempty"` // Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access) diff --git a/go/sdk/v4/methods.go b/go/sdk/v4/methods.go index 61bf8388b..4178426db 100644 --- a/go/sdk/v4/methods.go +++ b/go/sdk/v4/methods.go @@ -26,7 +26,7 @@ SOFTWARE. /* -423 API methods +425 API methods */ @@ -59,7 +59,7 @@ func NewLookerSDK(session *rtl.AuthSession) *LookerSDK { func (l *LookerSDK) SearchAlerts(request RequestSearchAlerts, options *rtl.ApiSettings) ([]Alert, error) { var result []Alert - err := l.session.Do(&result, "GET", "/4.0", "/alerts/search", map[string]interface{}{"limit": request.Limit, "offset": request.Offset, "fields": request.Fields, "disabled": request.Disabled, "frequency": request.Frequency, "condition_met": request.ConditionMet, "last_run_start": request.LastRunStart, "last_run_end": request.LastRunEnd, "all_owners": request.AllOwners}, nil, options) + err := l.session.Do(&result, "GET", "/4.0", "/alerts/search", map[string]interface{}{"limit": request.Limit, "offset": request.Offset, "group_by": request.GroupBy, "fields": request.Fields, "disabled": request.Disabled, "frequency": request.Frequency, "condition_met": request.ConditionMet, "last_run_start": request.LastRunStart, "last_run_end": request.LastRunEnd, "all_owners": request.AllOwners}, nil, options) return result, err } @@ -161,6 +161,18 @@ func (l *LookerSDK) CreateAlert( err := l.session.Do(&result, "POST", "/4.0", "/alerts", nil, body, options) return result, err +} + +// ### Enqueue an Alert by ID +// +// POST /alerts/{alert_id}/enqueue -> Void +func (l *LookerSDK) EnqueueAlert( + alertId int64, + force bool, + options *rtl.ApiSettings) (error) { + err := l.session.Do(nil, "POST", "/4.0", fmt.Sprintf("/alerts/%v/enqueue", alertId), map[string]interface{}{"force": force}, nil, options) + return err + } // endregion Alert: Alert @@ -1395,7 +1407,7 @@ func (l *LookerSDK) CustomWelcomeEmail( // // PATCH /custom_welcome_email -> CustomWelcomeEmail func (l *LookerSDK) UpdateCustomWelcomeEmail( - body WriteCustomWelcomeEmail, + body CustomWelcomeEmail, sendTestWelcomeEmail bool, options *rtl.ApiSettings) (CustomWelcomeEmail, error) { var result CustomWelcomeEmail @@ -1565,6 +1577,7 @@ func (l *LookerSDK) MobileSettings( // - marketplace_auto_install_enabled // - marketplace_enabled // - whitelabel_configuration +// - custom_welcome_email // // GET /setting -> Setting func (l *LookerSDK) GetSetting( @@ -1583,6 +1596,7 @@ func (l *LookerSDK) GetSetting( // - marketplace_auto_install_enabled // - marketplace_enabled // - whitelabel_configuration +// - custom_welcome_email // // See the `Setting` type for more information on the specific values that can be configured. // @@ -2484,43 +2498,43 @@ func (l *LookerSDK) DashboardLookml( } -// ### Copy an existing dashboard -// -// Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. +// ### Move an existing dashboard // -// `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. -// `folder_id` will default to the existing folder. +// Moves a dashboard to a specified folder, and returns the moved dashboard. // -// If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' -// or '(copy <# of copies>)' appended. +// `dashboard_id` and `folder_id` are required. +// `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. // -// POST /dashboards/{dashboard_id}/copy -> Dashboard -func (l *LookerSDK) CopyDashboard( +// PATCH /dashboards/{dashboard_id}/move -> Dashboard +func (l *LookerSDK) MoveDashboard( dashboardId string, folderId string, options *rtl.ApiSettings) (Dashboard, error) { dashboardId = url.PathEscape(dashboardId) var result Dashboard - err := l.session.Do(&result, "POST", "/4.0", fmt.Sprintf("/dashboards/%v/copy", dashboardId), map[string]interface{}{"folder_id": folderId}, nil, options) + err := l.session.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/dashboards/%v/move", dashboardId), map[string]interface{}{"folder_id": folderId}, nil, options) return result, err } -// ### Move an existing dashboard +// ### Copy an existing dashboard // -// Moves a dashboard to a specified folder, and returns the moved dashboard. +// Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. // -// `dashboard_id` and `folder_id` are required. -// `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. +// `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. +// `folder_id` will default to the existing folder. // -// PATCH /dashboards/{dashboard_id}/move -> Dashboard -func (l *LookerSDK) MoveDashboard( +// If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' +// or '(copy <# of copies>)' appended. +// +// POST /dashboards/{dashboard_id}/copy -> Dashboard +func (l *LookerSDK) CopyDashboard( dashboardId string, folderId string, options *rtl.ApiSettings) (Dashboard, error) { dashboardId = url.PathEscape(dashboardId) var result Dashboard - err := l.session.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/dashboards/%v/move", dashboardId), map[string]interface{}{"folder_id": folderId}, nil, options) + err := l.session.Do(&result, "POST", "/4.0", fmt.Sprintf("/dashboards/%v/copy", dashboardId), map[string]interface{}{"folder_id": folderId}, nil, options) return result, err } @@ -6812,6 +6826,25 @@ func (l *LookerSDK) SendUserCredentialsEmailPasswordReset( } +// ### Change a disabled user's email addresses +// +// Allows the admin to change the email addresses for all the user's +// associated credentials. Will overwrite all associated email addresses with +// the value supplied in the 'email' body param. +// The user's 'is_disabled' status must be true. +// +// POST /users/{user_id}/update_emails -> User +func (l *LookerSDK) WipeoutUserEmails( + userId int64, + body UserEmailOnly, + fields string, + options *rtl.ApiSettings) (User, error) { + var result User + err := l.session.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/update_emails", userId), map[string]interface{}{"fields": fields}, body, options) + return result, err + +} + // Create an embed user from an external user ID // // POST /users/embed_user -> UserPublic diff --git a/go/sdk/v4/models.go b/go/sdk/v4/models.go index f7d943c66..e2425e461 100644 --- a/go/sdk/v4/models.go +++ b/go/sdk/v4/models.go @@ -26,7 +26,7 @@ SOFTWARE. /* -350 API models: 219 Spec, 54 Request, 58 Write, 19 Enum +351 API models: 220 Spec, 54 Request, 57 Write, 20 Enum */ @@ -49,21 +49,28 @@ type AccessToken struct { type Alert struct { - AppliedDashboardFilters *[]AlertAppliedDashboardFilter `json:"applied_dashboard_filters,omitempty"` // Filters coming from the dashboard that are applied. Example `[{ "filter_title": "Name", "field_name": "distribution_centers.name", "filter_value": "Los Angeles CA" }]` - ComparisonType *ComparisonType `json:"comparison_type,omitempty"` // This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: "EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL_TO", "LESS_THAN", "LESS_THAN_OR_EQUAL_TO", "INCREASES_BY", "DECREASES_BY", "CHANGES_BY". - Cron *string `json:"cron,omitempty"` // Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals - CustomTitle *string `json:"custom_title,omitempty"` // An optional, user-defined title for the alert - DashboardElementId *int64 `json:"dashboard_element_id,omitempty"` // ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) - Destinations *[]AlertDestination `json:"destinations,omitempty"` // Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` - Field *AlertField `json:"field,omitempty"` - Id *int64 `json:"id,omitempty"` // ID of the alert - IsDisabled *bool `json:"is_disabled,omitempty"` // Whether or not the alert is disabled - IsPublic *bool `json:"is_public,omitempty"` // Whether or not the alert is public - LookmlDashboardId *string `json:"lookml_dashboard_id,omitempty"` // ID of the LookML dashboard associated with the alert - LookmlLinkId *string `json:"lookml_link_id,omitempty"` // ID of the LookML dashboard element associated with the alert - OwnerId *int64 `json:"owner_id,omitempty"` // User id of alert owner - Threshold *float64 `json:"threshold,omitempty"` // Value of the alert threshold - TimeSeriesConditionState *AlertConditionState `json:"time_series_condition_state,omitempty"` + AppliedDashboardFilters *[]AlertAppliedDashboardFilter `json:"applied_dashboard_filters,omitempty"` // Filters coming from the dashboard that are applied. Example `[{ "filter_title": "Name", "field_name": "distribution_centers.name", "filter_value": "Los Angeles CA" }]` + ComparisonType *ComparisonType `json:"comparison_type,omitempty"` // This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: "EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL_TO", "LESS_THAN", "LESS_THAN_OR_EQUAL_TO", "INCREASES_BY", "DECREASES_BY", "CHANGES_BY". + Cron *string `json:"cron,omitempty"` // Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals + CustomTitle *string `json:"custom_title,omitempty"` // An optional, user-defined title for the alert + DashboardElementId *int64 `json:"dashboard_element_id,omitempty"` // ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) + Description *string `json:"description,omitempty"` // An optional description for the alert. This supplements the title + Destinations *[]AlertDestination `json:"destinations,omitempty"` // Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` + Field *AlertField `json:"field,omitempty"` + Followed *bool `json:"followed,omitempty"` // Whether or not the user follows this alert. + Followable *bool `json:"followable,omitempty"` // Whether or not the alert is followable + Id *int64 `json:"id,omitempty"` // ID of the alert + IsDisabled *bool `json:"is_disabled,omitempty"` // Whether or not the alert is disabled + IsPublic *bool `json:"is_public,omitempty"` // Whether or not the alert is public + InvestigativeContentType *InvestigativeContentType `json:"investigative_content_type,omitempty"` // The type of the investigative content Valid values are: "dashboard". + InvestigativeContentId *string `json:"investigative_content_id,omitempty"` // The ID of the investigative content. For dashboards, this will be the dashboard ID + InvestigativeContentTitle *string `json:"investigative_content_title,omitempty"` // The title of the investigative content. + LookmlDashboardId *string `json:"lookml_dashboard_id,omitempty"` // ID of the LookML dashboard associated with the alert + LookmlLinkId *string `json:"lookml_link_id,omitempty"` // ID of the LookML dashboard element associated with the alert + OwnerId *int64 `json:"owner_id,omitempty"` // User id of alert owner + OwnerDisplayName *string `json:"owner_display_name,omitempty"` // Alert owner's display name + Threshold *float64 `json:"threshold,omitempty"` // Value of the alert threshold + TimeSeriesConditionState *AlertConditionState `json:"time_series_condition_state,omitempty"` } @@ -160,28 +167,27 @@ type Board struct { type BoardItem struct { - Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object - ContentCreatedBy *string `json:"content_created_by,omitempty"` // Name of user who created the content this item is based on - ContentFavoriteId *int64 `json:"content_favorite_id,omitempty"` // Content favorite id associated with the item this content is based on - ContentMetadataId *int64 `json:"content_metadata_id,omitempty"` // Content metadata id associated with the item this content is based on - ContentUpdatedAt *string `json:"content_updated_at,omitempty"` // Last time the content that this item is based on was updated - CustomImageDataBase64 *string `json:"custom_image_data_base64,omitempty"` // (Write-Only) base64 encoded image data - CustomImageUrl *string `json:"custom_image_url,omitempty"` // Custom image_url entered by the user, if present - CustomTitle *string `json:"custom_title,omitempty"` // Custom title entered by the user, if present - CustomUrl *string `json:"custom_url,omitempty"` // Custom url entered by the user, if present - DashboardId *int64 `json:"dashboard_id,omitempty"` // Dashboard to base this item on - Description *string `json:"description,omitempty"` // The actual description for display - FavoriteCount *int64 `json:"favorite_count,omitempty"` // Number of times content has been favorited, if present - BoardSectionId *int64 `json:"board_section_id,omitempty"` // Associated Board Section - Id *int64 `json:"id,omitempty"` // Unique Id - ImageUrl *string `json:"image_url,omitempty"` // The actual image_url for display - Location *string `json:"location,omitempty"` // The container folder name of the content - LookId *int64 `json:"look_id,omitempty"` // Look to base this item on - LookmlDashboardId *string `json:"lookml_dashboard_id,omitempty"` // LookML Dashboard to base this item on - Order *int64 `json:"order,omitempty"` // An arbitrary integer representing the sort order within the section - Title *string `json:"title,omitempty"` // The actual title for display - Url *string `json:"url,omitempty"` // Relative url for the associated content - ViewCount *int64 `json:"view_count,omitempty"` // Number of times content has been viewed, if present + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + ContentCreatedBy *string `json:"content_created_by,omitempty"` // Name of user who created the content this item is based on + ContentFavoriteId *int64 `json:"content_favorite_id,omitempty"` // Content favorite id associated with the item this content is based on + ContentMetadataId *int64 `json:"content_metadata_id,omitempty"` // Content metadata id associated with the item this content is based on + ContentUpdatedAt *string `json:"content_updated_at,omitempty"` // Last time the content that this item is based on was updated + CustomDescription *string `json:"custom_description,omitempty"` // Custom description entered by the user, if present + CustomTitle *string `json:"custom_title,omitempty"` // Custom title entered by the user, if present + CustomUrl *string `json:"custom_url,omitempty"` // Custom url entered by the user, if present + DashboardId *int64 `json:"dashboard_id,omitempty"` // Dashboard to base this item on + Description *string `json:"description,omitempty"` // The actual description for display + FavoriteCount *int64 `json:"favorite_count,omitempty"` // Number of times content has been favorited, if present + BoardSectionId *int64 `json:"board_section_id,omitempty"` // Associated Board Section + Id *int64 `json:"id,omitempty"` // Unique Id + ImageUrl *string `json:"image_url,omitempty"` // The actual image_url for display + Location *string `json:"location,omitempty"` // The container folder name of the content + LookId *int64 `json:"look_id,omitempty"` // Look to base this item on + LookmlDashboardId *string `json:"lookml_dashboard_id,omitempty"` // LookML Dashboard to base this item on + Order *int64 `json:"order,omitempty"` // An arbitrary integer representing the sort order within the section + Title *string `json:"title,omitempty"` // The actual title for display + Url *string `json:"url,omitempty"` // Relative url for the associated content + ViewCount *int64 `json:"view_count,omitempty"` // Number of times content has been viewed, if present } @@ -651,11 +657,10 @@ type CredentialsTotp struct { type CustomWelcomeEmail struct { - Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object - Enabled *bool `json:"enabled,omitempty"` // If true, custom email content will replace the default body of welcome emails - Content *string `json:"content,omitempty"` // The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - Subject *string `json:"subject,omitempty"` // The text to appear in the email subject line. - Header *string `json:"header,omitempty"` // The text to appear in the header line of the email body. + Enabled *bool `json:"enabled,omitempty"` // If true, custom email content will replace the default body of welcome emails + Content *string `json:"content,omitempty"` // The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. + Subject *string `json:"subject,omitempty"` // The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. + Header *string `json:"header,omitempty"` // The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. } @@ -688,6 +693,7 @@ type Dashboard struct { DeleterId *int64 `json:"deleter_id,omitempty"` // Id of User that 'soft' deleted the dashboard. EditUri *string `json:"edit_uri,omitempty"` // Relative path of URI of LookML file to edit the dashboard (LookML dashboard only). FavoriteCount *int64 `json:"favorite_count,omitempty"` // Number of times favorited + FiltersBarCollapsed *bool `json:"filters_bar_collapsed,omitempty"` // Sets the default state of the filters bar to collapsed or open LastAccessedAt *time.Time `json:"last_accessed_at,omitempty"` // Time the dashboard was last accessed LastViewedAt *time.Time `json:"last_viewed_at,omitempty"` // Time last viewed in the Looker web UI LoadConfiguration *string `json:"load_configuration,omitempty"` // configuration option that governs how dashboard loading will happen. @@ -932,6 +938,7 @@ type DBConnection struct { PdtConcurrency *int64 `json:"pdt_concurrency,omitempty"` // Maximum number of threads to use to build PDTs in parallel DisableContextComment *bool `json:"disable_context_comment,omitempty"` // When disable_context_comment is true comment will not be added to SQL OauthApplicationId *int64 `json:"oauth_application_id,omitempty"` // An External OAuth Application to use for authenticating to the database + AlwaysRetryFailedBuilds *bool `json:"always_retry_failed_builds,omitempty"` // When true, error PDTs will be retried every regenerator cycle } @@ -1382,6 +1389,10 @@ type InternalHelpResourcesContent struct { MarkdownContent *string `json:"markdown_content,omitempty"` // Content to be displayed in the internal help resources page/modal } +type InvestigativeContentType string +const InvestigativeContentType_Dashboard InvestigativeContentType = "dashboard" + + type LDAPConfig struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object @@ -2615,6 +2626,7 @@ type RequestScheduledPlansForLookmlDashboard struct { type RequestSearchAlerts struct { Limit *int64 `json:"limit,omitempty"` // (Optional) Number of results to return (used with `offset`). Offset *int64 `json:"offset,omitempty"` // (Optional) Number of results to skip before returning any (used with `limit`). + GroupBy *string `json:"group_by,omitempty"` // (Optional) Dimension by which to order the results(`dashboard` | `owner`) Fields *string `json:"fields,omitempty"` // (Optional) Requested fields. Disabled *bool `json:"disabled,omitempty"` // (Optional) Filter on returning only enabled or disabled alerts. Frequency *string `json:"frequency,omitempty"` // (Optional) Filter on alert frequency, such as: monthly, weekly, daily, hourly, minutes @@ -3190,6 +3202,7 @@ type Setting struct { MarketplaceAutoInstallEnabled *bool `json:"marketplace_auto_install_enabled,omitempty"` // Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled. MarketplaceEnabled *bool `json:"marketplace_enabled,omitempty"` // Toggle marketplace on or off WhitelabelConfiguration *WhitelabelConfiguration `json:"whitelabel_configuration,omitempty"` + CustomWelcomeEmail *CustomWelcomeEmail `json:"custom_welcome_email,omitempty"` } @@ -3440,6 +3453,11 @@ type UserAttributeWithValue struct { } +type UserEmailOnly struct { + Email string `json:"email"` // Email Address +} + + type UserLoginLockout struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Key *string `json:"key,omitempty"` // Hash of user's client id @@ -3524,17 +3542,20 @@ type Workspace struct { } // Dynamic writeable type for Alert removes: -// id +// followed, followable, id, investigative_content_title, owner_display_name type WriteAlert struct { AppliedDashboardFilters *[]AlertAppliedDashboardFilter `json:"applied_dashboard_filters,omitempty"` // Filters coming from the dashboard that are applied. Example `[{ "filter_title": "Name", "field_name": "distribution_centers.name", "filter_value": "Los Angeles CA" }]` ComparisonType *ComparisonType `json:"comparison_type,omitempty"` // This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: "EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL_TO", "LESS_THAN", "LESS_THAN_OR_EQUAL_TO", "INCREASES_BY", "DECREASES_BY", "CHANGES_BY". Cron *string `json:"cron,omitempty"` // Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals CustomTitle *string `json:"custom_title,omitempty"` // An optional, user-defined title for the alert DashboardElementId *int64 `json:"dashboard_element_id,omitempty"` // ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) + Description *string `json:"description,omitempty"` // An optional description for the alert. This supplements the title Destinations *[]AlertDestination `json:"destinations,omitempty"` // Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` Field *AlertField `json:"field,omitempty"` IsDisabled *bool `json:"is_disabled,omitempty"` // Whether or not the alert is disabled IsPublic *bool `json:"is_public,omitempty"` // Whether or not the alert is public + InvestigativeContentType *InvestigativeContentType `json:"investigative_content_type,omitempty"` // The type of the investigative content Valid values are: "dashboard". + InvestigativeContentId *string `json:"investigative_content_id,omitempty"` // The ID of the investigative content. For dashboards, this will be the dashboard ID LookmlDashboardId *string `json:"lookml_dashboard_id,omitempty"` // ID of the LookML dashboard associated with the alert LookmlLinkId *string `json:"lookml_link_id,omitempty"` // ID of the LookML dashboard element associated with the alert OwnerId *int64 `json:"owner_id,omitempty"` // User id of alert owner @@ -3568,16 +3589,16 @@ type WriteBoard struct { } // Dynamic writeable type for BoardItem removes: -// can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, title, url, view_count +// can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, description, favorite_count, id, image_url, location, title, url, view_count type WriteBoardItem struct { - CustomImageDataBase64 *string `json:"custom_image_data_base64,omitempty"` // (Write-Only) base64 encoded image data - CustomTitle *string `json:"custom_title,omitempty"` // Custom title entered by the user, if present - CustomUrl *string `json:"custom_url,omitempty"` // Custom url entered by the user, if present - DashboardId *int64 `json:"dashboard_id,omitempty"` // Dashboard to base this item on - BoardSectionId *int64 `json:"board_section_id,omitempty"` // Associated Board Section - LookId *int64 `json:"look_id,omitempty"` // Look to base this item on - LookmlDashboardId *string `json:"lookml_dashboard_id,omitempty"` // LookML Dashboard to base this item on - Order *int64 `json:"order,omitempty"` // An arbitrary integer representing the sort order within the section + CustomDescription *string `json:"custom_description,omitempty"` // Custom description entered by the user, if present + CustomTitle *string `json:"custom_title,omitempty"` // Custom title entered by the user, if present + CustomUrl *string `json:"custom_url,omitempty"` // Custom url entered by the user, if present + DashboardId *int64 `json:"dashboard_id,omitempty"` // Dashboard to base this item on + BoardSectionId *int64 `json:"board_section_id,omitempty"` // Associated Board Section + LookId *int64 `json:"look_id,omitempty"` // Look to base this item on + LookmlDashboardId *string `json:"lookml_dashboard_id,omitempty"` // LookML Dashboard to base this item on + Order *int64 `json:"order,omitempty"` // An arbitrary integer representing the sort order within the section } // Dynamic writeable type for BoardSection removes: @@ -3661,15 +3682,6 @@ type WriteCredentialsEmail struct { ForcedPasswordResetAtNextLogin *bool `json:"forced_password_reset_at_next_login,omitempty"` // Force the user to change their password upon their next login } -// Dynamic writeable type for CustomWelcomeEmail removes: -// can -type WriteCustomWelcomeEmail struct { - Enabled *bool `json:"enabled,omitempty"` // If true, custom email content will replace the default body of welcome emails - Content *string `json:"content,omitempty"` // The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - Subject *string `json:"subject,omitempty"` // The text to appear in the email subject line. - Header *string `json:"header,omitempty"` // The text to appear in the header line of the email body. -} - // Dynamic writeable type for Dashboard removes: // can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count, url type WriteDashboard struct { @@ -3686,6 +3698,7 @@ type WriteDashboard struct { BackgroundColor *string `json:"background_color,omitempty"` // Background color CrossfilterEnabled *bool `json:"crossfilter_enabled,omitempty"` // Enables crossfiltering in dashboards - only available in dashboards-next (beta) Deleted *bool `json:"deleted,omitempty"` // Whether or not a dashboard is 'soft' deleted. + FiltersBarCollapsed *bool `json:"filters_bar_collapsed,omitempty"` // Sets the default state of the filters bar to collapsed or open LoadConfiguration *string `json:"load_configuration,omitempty"` // configuration option that governs how dashboard loading will happen. LookmlLinkId *string `json:"lookml_link_id,omitempty"` // Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. ShowFiltersBar *bool `json:"show_filters_bar,omitempty"` // Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access) @@ -3810,6 +3823,7 @@ type WriteDBConnection struct { PdtConcurrency *int64 `json:"pdt_concurrency,omitempty"` // Maximum number of threads to use to build PDTs in parallel DisableContextComment *bool `json:"disable_context_comment,omitempty"` // When disable_context_comment is true comment will not be added to SQL OauthApplicationId *int64 `json:"oauth_application_id,omitempty"` // An External OAuth Application to use for authenticating to the database + AlwaysRetryFailedBuilds *bool `json:"always_retry_failed_builds,omitempty"` // When true, error PDTs will be retried every regenerator cycle } // Dynamic writeable type for DBConnectionOverride removes: @@ -4188,6 +4202,7 @@ type WriteSetting struct { MarketplaceEnabled *bool `json:"marketplace_enabled,omitempty"` // Toggle marketplace on or off WhitelabelConfiguration *WriteWhitelabelConfiguration `json:"whitelabel_configuration,omitempty"` // Dynamic writeable type for WhitelabelConfiguration removes: // id, logo_url, favicon_url + CustomWelcomeEmail *CustomWelcomeEmail `json:"custom_welcome_email,omitempty"` } // Dynamic writeable type for SshServer removes: diff --git a/kotlin/src/main/com/looker/sdk/4.0/methods.kt b/kotlin/src/main/com/looker/sdk/4.0/methods.kt index 5eaca6d86..543a91476 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/methods.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/methods.kt @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ @@ -47,6 +47,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * @param {Long} limit (Optional) Number of results to return (used with `offset`). * @param {Long} offset (Optional) Number of results to skip before returning any (used with `limit`). + * @param {String} group_by (Optional) Dimension by which to order the results(`dashboard` | `owner`) * @param {String} fields (Optional) Requested fields. * @param {Boolean} disabled (Optional) Filter on returning only enabled or disabled alerts. * @param {String} frequency (Optional) Filter on alert frequency, such as: monthly, weekly, daily, hourly, minutes @@ -60,6 +61,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun search_alerts( limit: Long? = null, offset: Long? = null, + group_by: String? = null, fields: String? = null, disabled: Boolean? = null, frequency: String? = null, @@ -71,6 +73,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { return this.get>("/alerts/search", mapOf("limit" to limit, "offset" to offset, + "group_by" to group_by, "fields" to fields, "disabled" to disabled, "frequency" to frequency, @@ -196,6 +199,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { return this.post("/alerts", mapOf(), body) } + + /** + * ### Enqueue an Alert by ID + * + * @param {Long} alert_id ID of an alert + * @param {Boolean} force Whether to enqueue an alert again if its already running. + * + * POST /alerts/{alert_id}/enqueue -> Void + */ + @JvmOverloads fun enqueue_alert( + alert_id: Long, + force: Boolean? = null + ) : SDKResponse { + val path_alert_id = encodeParam(alert_id) + return this.post("/alerts/${path_alert_id}/enqueue", + mapOf("force" to force)) + } + //endregion Alert: Alert //region ApiAuth: API Authentication @@ -1713,13 +1734,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { /** * Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user. * - * @param {WriteCustomWelcomeEmail} body + * @param {CustomWelcomeEmail} body * @param {Boolean} send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving * * PATCH /custom_welcome_email -> CustomWelcomeEmail */ @JvmOverloads fun update_custom_welcome_email( - body: WriteCustomWelcomeEmail, + body: CustomWelcomeEmail, send_test_welcome_email: Boolean? = null ) : SDKResponse { return this.patch("/custom_welcome_email", @@ -1909,6 +1930,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * @param {String} fields Requested fields * @@ -1930,6 +1952,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -3140,50 +3163,50 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * @param {String} dashboard_id Dashboard id to copy. - * @param {String} folder_id Folder id to copy to. + * @param {String} dashboard_id Dashboard id to move. + * @param {String} folder_id Folder id to move to. * - * POST /dashboards/{dashboard_id}/copy -> Dashboard + * PATCH /dashboards/{dashboard_id}/move -> Dashboard */ - @JvmOverloads fun copy_dashboard( + fun move_dashboard( dashboard_id: String, - folder_id: String? = null + folder_id: String ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.post("/dashboards/${path_dashboard_id}/copy", + return this.patch("/dashboards/${path_dashboard_id}/move", mapOf("folder_id" to folder_id)) } /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * @param {String} dashboard_id Dashboard id to move. - * @param {String} folder_id Folder id to move to. + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. * - * PATCH /dashboards/{dashboard_id}/move -> Dashboard + * @param {String} dashboard_id Dashboard id to copy. + * @param {String} folder_id Folder id to copy to. + * + * POST /dashboards/{dashboard_id}/copy -> Dashboard */ - fun move_dashboard( + @JvmOverloads fun copy_dashboard( dashboard_id: String, - folder_id: String + folder_id: String? = null ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/${path_dashboard_id}/move", + return this.post("/dashboards/${path_dashboard_id}/copy", mapOf("folder_id" to folder_id)) } @@ -9182,6 +9205,31 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { } + /** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * @param {Long} user_id Id of user + * @param {UserEmailOnly} body + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/update_emails -> User + */ + @JvmOverloads fun wipeout_user_emails( + user_id: Long, + body: UserEmailOnly, + fields: String? = null + ) : SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post("/users/${path_user_id}/update_emails", + mapOf("fields" to fields), body) + } + + /** * Create an embed user from an external user ID * diff --git a/kotlin/src/main/com/looker/sdk/4.0/models.kt b/kotlin/src/main/com/looker/sdk/4.0/models.kt index dfe79a8ea..e5a3e282b 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/models.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/models.kt @@ -25,7 +25,7 @@ */ /** - * 296 API models: 219 Spec, 0 Request, 58 Write, 19 Enum + * 297 API models: 220 Spec, 0 Request, 57 Write, 20 Enum */ @@ -56,14 +56,21 @@ data class AccessToken ( * @property cron Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals * @property custom_title An optional, user-defined title for the alert * @property dashboard_element_id ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) + * @property description An optional description for the alert. This supplements the title * @property destinations Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` * @property field + * @property followed Whether or not the user follows this alert. (read-only) + * @property followable Whether or not the alert is followable (read-only) * @property id ID of the alert (read-only) * @property is_disabled Whether or not the alert is disabled * @property is_public Whether or not the alert is public + * @property investigative_content_type The type of the investigative content Valid values are: "dashboard". + * @property investigative_content_id The ID of the investigative content. For dashboards, this will be the dashboard ID + * @property investigative_content_title The title of the investigative content. (read-only) * @property lookml_dashboard_id ID of the LookML dashboard associated with the alert * @property lookml_link_id ID of the LookML dashboard element associated with the alert * @property owner_id User id of alert owner + * @property owner_display_name Alert owner's display name (read-only) * @property threshold Value of the alert threshold * @property time_series_condition_state */ @@ -73,14 +80,21 @@ data class Alert ( var cron: String? = null, var custom_title: String? = null, var dashboard_element_id: Long? = null, + var description: String? = null, var destinations: Array? = null, var field: AlertField? = null, + var followed: Boolean? = null, + var followable: Boolean? = null, var id: Long? = null, var is_disabled: Boolean? = null, var is_public: Boolean? = null, + var investigative_content_type: InvestigativeContentType? = null, + var investigative_content_id: String? = null, + var investigative_content_title: String? = null, var lookml_dashboard_id: String? = null, var lookml_link_id: String? = null, var owner_id: Long? = null, + var owner_display_name: String? = null, var threshold: Double? = null, var time_series_condition_state: AlertConditionState? = null ) : Serializable @@ -243,8 +257,7 @@ data class Board ( * @property content_favorite_id Content favorite id associated with the item this content is based on (read-only) * @property content_metadata_id Content metadata id associated with the item this content is based on (read-only) * @property content_updated_at Last time the content that this item is based on was updated (read-only) - * @property custom_image_data_base64 (Write-Only) base64 encoded image data - * @property custom_image_url Custom image_url entered by the user, if present (read-only) + * @property custom_description Custom description entered by the user, if present * @property custom_title Custom title entered by the user, if present * @property custom_url Custom url entered by the user, if present * @property dashboard_id Dashboard to base this item on @@ -267,8 +280,7 @@ data class BoardItem ( var content_favorite_id: Long? = null, var content_metadata_id: Long? = null, var content_updated_at: String? = null, - var custom_image_data_base64: String? = null, - var custom_image_url: String? = null, + var custom_description: String? = null, var custom_title: String? = null, var custom_url: String? = null, var dashboard_id: Long? = null, @@ -1087,14 +1099,12 @@ data class CredentialsTotp ( ) : Serializable /** - * @property can Operations the current user is able to perform on this object (read-only) * @property enabled If true, custom email content will replace the default body of welcome emails * @property content The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - * @property subject The text to appear in the email subject line. - * @property header The text to appear in the header line of the email body. + * @property subject The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. + * @property header The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ data class CustomWelcomeEmail ( - var can: Map? = null, var enabled: Boolean? = null, var content: String? = null, var subject: String? = null, @@ -1130,6 +1140,7 @@ data class CustomWelcomeEmail ( * @property deleter_id Id of User that 'soft' deleted the dashboard. (read-only) * @property edit_uri Relative path of URI of LookML file to edit the dashboard (LookML dashboard only). (read-only) * @property favorite_count Number of times favorited (read-only) + * @property filters_bar_collapsed Sets the default state of the filters bar to collapsed or open * @property last_accessed_at Time the dashboard was last accessed (read-only) * @property last_viewed_at Time last viewed in the Looker web UI (read-only) * @property load_configuration configuration option that governs how dashboard loading will happen. @@ -1174,6 +1185,7 @@ data class Dashboard ( var deleter_id: Long? = null, var edit_uri: String? = null, var favorite_count: Long? = null, + var filters_bar_collapsed: Boolean? = null, var last_accessed_at: Date? = null, var last_viewed_at: Date? = null, var load_configuration: String? = null, @@ -1557,6 +1569,7 @@ data class Datagroup ( * @property pdt_concurrency Maximum number of threads to use to build PDTs in parallel * @property disable_context_comment When disable_context_comment is true comment will not be added to SQL * @property oauth_application_id An External OAuth Application to use for authenticating to the database + * @property always_retry_failed_builds When true, error PDTs will be retried every regenerator cycle */ data class DBConnection ( var can: Map? = null, @@ -1599,7 +1612,8 @@ data class DBConnection ( var tunnel_id: String? = null, var pdt_concurrency: Long? = null, var disable_context_comment: Boolean? = null, - var oauth_application_id: Long? = null + var oauth_application_id: Long? = null, + var always_retry_failed_builds: Boolean? = null ) : Serializable /** @@ -2381,6 +2395,13 @@ data class InternalHelpResourcesContent ( var markdown_content: String? = null ) : Serializable +/** + * The type of the investigative content Valid values are: "dashboard". + */ +enum class InvestigativeContentType : Serializable { + dashboard +} + /** * @property can Operations the current user is able to perform on this object (read-only) * @property alternate_email_login_allowed Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. @@ -4518,12 +4539,14 @@ data class SessionConfig ( * @property marketplace_auto_install_enabled Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled. * @property marketplace_enabled Toggle marketplace on or off * @property whitelabel_configuration + * @property custom_welcome_email */ data class Setting ( var extension_framework_enabled: Boolean? = null, var marketplace_auto_install_enabled: Boolean? = null, var marketplace_enabled: Boolean? = null, - var whitelabel_configuration: WhitelabelConfiguration? = null + var whitelabel_configuration: WhitelabelConfiguration? = null, + var custom_welcome_email: CustomWelcomeEmail? = null ) : Serializable /** @@ -4946,6 +4969,13 @@ data class UserAttributeWithValue ( var hidden_value_domain_whitelist: String? = null ) : Serializable +/** + * @property email Email Address + */ +data class UserEmailOnly ( + var email: String +) : Serializable + /** * @property can Operations the current user is able to perform on this object (read-only) * @property key Hash of user's client id (read-only) @@ -5088,17 +5118,20 @@ data class Workspace ( /** * Dynamic writeable type for Alert removes: - * id + * followed, followable, id, investigative_content_title, owner_display_name * * @property applied_dashboard_filters Filters coming from the dashboard that are applied. Example `[{ "filter_title": "Name", "field_name": "distribution_centers.name", "filter_value": "Los Angeles CA" }]` * @property comparison_type This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: "EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL_TO", "LESS_THAN", "LESS_THAN_OR_EQUAL_TO", "INCREASES_BY", "DECREASES_BY", "CHANGES_BY". * @property cron Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals * @property custom_title An optional, user-defined title for the alert * @property dashboard_element_id ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) + * @property description An optional description for the alert. This supplements the title * @property destinations Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` * @property field * @property is_disabled Whether or not the alert is disabled * @property is_public Whether or not the alert is public + * @property investigative_content_type The type of the investigative content Valid values are: "dashboard". + * @property investigative_content_id The ID of the investigative content. For dashboards, this will be the dashboard ID * @property lookml_dashboard_id ID of the LookML dashboard associated with the alert * @property lookml_link_id ID of the LookML dashboard element associated with the alert * @property owner_id User id of alert owner @@ -5111,10 +5144,13 @@ data class WriteAlert ( var cron: String? = null, var custom_title: String? = null, var dashboard_element_id: Long? = null, + var description: String? = null, var destinations: Array? = null, var field: AlertField? = null, var is_disabled: Boolean? = null, var is_public: Boolean? = null, + var investigative_content_type: InvestigativeContentType? = null, + var investigative_content_id: String? = null, var lookml_dashboard_id: String? = null, var lookml_link_id: String? = null, var owner_id: Long? = null, @@ -5168,9 +5204,9 @@ data class WriteBoard ( /** * Dynamic writeable type for BoardItem removes: - * can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, title, url, view_count + * can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, description, favorite_count, id, image_url, location, title, url, view_count * - * @property custom_image_data_base64 (Write-Only) base64 encoded image data + * @property custom_description Custom description entered by the user, if present * @property custom_title Custom title entered by the user, if present * @property custom_url Custom url entered by the user, if present * @property dashboard_id Dashboard to base this item on @@ -5180,7 +5216,7 @@ data class WriteBoard ( * @property order An arbitrary integer representing the sort order within the section */ data class WriteBoardItem ( - var custom_image_data_base64: String? = null, + var custom_description: String? = null, var custom_title: String? = null, var custom_url: String? = null, var dashboard_id: Long? = null, @@ -5334,22 +5370,6 @@ data class WriteCredentialsEmail ( var forced_password_reset_at_next_login: Boolean? = null ) : Serializable -/** - * Dynamic writeable type for CustomWelcomeEmail removes: - * can - * - * @property enabled If true, custom email content will replace the default body of welcome emails - * @property content The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - * @property subject The text to appear in the email subject line. - * @property header The text to appear in the header line of the email body. - */ -data class WriteCustomWelcomeEmail ( - var enabled: Boolean? = null, - var content: String? = null, - var subject: String? = null, - var header: String? = null -) : Serializable - /** * Dynamic writeable type for Dashboard removes: * can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count, url @@ -5367,6 +5387,7 @@ data class WriteCustomWelcomeEmail ( * @property background_color Background color * @property crossfilter_enabled Enables crossfiltering in dashboards - only available in dashboards-next (beta) * @property deleted Whether or not a dashboard is 'soft' deleted. + * @property filters_bar_collapsed Sets the default state of the filters bar to collapsed or open * @property load_configuration configuration option that governs how dashboard loading will happen. * @property lookml_link_id Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. * @property show_filters_bar Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access) @@ -5391,6 +5412,7 @@ data class WriteDashboard ( var background_color: String? = null, var crossfilter_enabled: Boolean? = null, var deleted: Boolean? = null, + var filters_bar_collapsed: Boolean? = null, var load_configuration: String? = null, var lookml_link_id: String? = null, var show_filters_bar: Boolean? = null, @@ -5578,6 +5600,7 @@ data class WriteDatagroup ( * @property pdt_concurrency Maximum number of threads to use to build PDTs in parallel * @property disable_context_comment When disable_context_comment is true comment will not be added to SQL * @property oauth_application_id An External OAuth Application to use for authenticating to the database + * @property always_retry_failed_builds When true, error PDTs will be retried every regenerator cycle */ data class WriteDBConnection ( var name: String? = null, @@ -5609,7 +5632,8 @@ data class WriteDBConnection ( var tunnel_id: String? = null, var pdt_concurrency: Long? = null, var disable_context_comment: Boolean? = null, - var oauth_application_id: Long? = null + var oauth_application_id: Long? = null, + var always_retry_failed_builds: Boolean? = null ) : Serializable /** @@ -6297,12 +6321,14 @@ data class WriteSessionConfig ( * @property marketplace_enabled Toggle marketplace on or off * @property whitelabel_configuration Dynamic writeable type for WhitelabelConfiguration removes: * id, logo_url, favicon_url + * @property custom_welcome_email */ data class WriteSetting ( var extension_framework_enabled: Boolean? = null, var marketplace_auto_install_enabled: Boolean? = null, var marketplace_enabled: Boolean? = null, - var whitelabel_configuration: WriteWhitelabelConfiguration? = null + var whitelabel_configuration: WriteWhitelabelConfiguration? = null, + var custom_welcome_email: CustomWelcomeEmail? = null ) : Serializable /** diff --git a/kotlin/src/main/com/looker/sdk/4.0/streams.kt b/kotlin/src/main/com/looker/sdk/4.0/streams.kt index 07129d772..03a467d7b 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/streams.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/streams.kt @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ @@ -46,6 +46,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * @param {Long} limit (Optional) Number of results to return (used with `offset`). * @param {Long} offset (Optional) Number of results to skip before returning any (used with `limit`). + * @param {String} group_by (Optional) Dimension by which to order the results(`dashboard` | `owner`) * @param {String} fields (Optional) Requested fields. * @param {Boolean} disabled (Optional) Filter on returning only enabled or disabled alerts. * @param {String} frequency (Optional) Filter on alert frequency, such as: monthly, weekly, daily, hourly, minutes @@ -59,6 +60,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun search_alerts( limit: Long? = null, offset: Long? = null, + group_by: String? = null, fields: String? = null, disabled: Boolean? = null, frequency: String? = null, @@ -70,6 +72,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { return this.get("/alerts/search", mapOf("limit" to limit, "offset" to offset, + "group_by" to group_by, "fields" to fields, "disabled" to disabled, "frequency" to frequency, @@ -195,6 +198,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { return this.post("/alerts", mapOf(), body) } + + /** + * ### Enqueue an Alert by ID + * + * @param {Long} alert_id ID of an alert + * @param {Boolean} force Whether to enqueue an alert again if its already running. + * + * POST /alerts/{alert_id}/enqueue -> ByteArray + */ + @JvmOverloads fun enqueue_alert( + alert_id: Long, + force: Boolean? = null + ) : SDKResponse { + val path_alert_id = encodeParam(alert_id) + return this.post("/alerts/${path_alert_id}/enqueue", + mapOf("force" to force)) + } + //endregion Alert: Alert //region ApiAuth: API Authentication @@ -1712,13 +1733,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { /** * Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user. * - * @param {WriteCustomWelcomeEmail} body + * @param {CustomWelcomeEmail} body * @param {Boolean} send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving * * PATCH /custom_welcome_email -> ByteArray */ @JvmOverloads fun update_custom_welcome_email( - body: WriteCustomWelcomeEmail, + body: CustomWelcomeEmail, send_test_welcome_email: Boolean? = null ) : SDKResponse { return this.patch("/custom_welcome_email", @@ -1908,6 +1929,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * @param {String} fields Requested fields * @@ -1929,6 +1951,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -3139,50 +3162,50 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * @param {String} dashboard_id Dashboard id to copy. - * @param {String} folder_id Folder id to copy to. + * @param {String} dashboard_id Dashboard id to move. + * @param {String} folder_id Folder id to move to. * - * POST /dashboards/{dashboard_id}/copy -> ByteArray + * PATCH /dashboards/{dashboard_id}/move -> ByteArray */ - @JvmOverloads fun copy_dashboard( + fun move_dashboard( dashboard_id: String, - folder_id: String? = null + folder_id: String ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.post("/dashboards/${path_dashboard_id}/copy", + return this.patch("/dashboards/${path_dashboard_id}/move", mapOf("folder_id" to folder_id)) } /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * @param {String} dashboard_id Dashboard id to move. - * @param {String} folder_id Folder id to move to. + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. * - * PATCH /dashboards/{dashboard_id}/move -> ByteArray + * @param {String} dashboard_id Dashboard id to copy. + * @param {String} folder_id Folder id to copy to. + * + * POST /dashboards/{dashboard_id}/copy -> ByteArray */ - fun move_dashboard( + @JvmOverloads fun copy_dashboard( dashboard_id: String, - folder_id: String + folder_id: String? = null ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/${path_dashboard_id}/move", + return this.post("/dashboards/${path_dashboard_id}/copy", mapOf("folder_id" to folder_id)) } @@ -9181,6 +9204,31 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { } + /** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * @param {Long} user_id Id of user + * @param {UserEmailOnly} body + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/update_emails -> ByteArray + */ + @JvmOverloads fun wipeout_user_emails( + user_id: Long, + body: UserEmailOnly, + fields: String? = null + ) : SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post("/users/${path_user_id}/update_emails", + mapOf("fields" to fields), body) + } + + /** * Create an embed user from an external user ID * diff --git a/kotlin/src/main/com/looker/sdk/Constants.kt b/kotlin/src/main/com/looker/sdk/Constants.kt index 00c17fea0..a863d5d8a 100644 --- a/kotlin/src/main/com/looker/sdk/Constants.kt +++ b/kotlin/src/main/com/looker/sdk/Constants.kt @@ -28,7 +28,7 @@ package com.looker.sdk const val ENVIRONMENT_PREFIX = "LOOKERSDK" const val SDK_TAG = "KT-SDK" -const val LOOKER_VERSION = "21.14" +const val LOOKER_VERSION = "21.16" const val API_VERSION = "4.0" const val AGENT_TAG = "$SDK_TAG $LOOKER_VERSION" const val LOOKER_APPID = "x-looker-appid" diff --git a/packages/sdk/src/3.1/models.ts b/packages/sdk/src/3.1/models.ts index 7b5ffe15c..d66c5f7fb 100644 --- a/packages/sdk/src/3.1/models.ts +++ b/packages/sdk/src/3.1/models.ts @@ -1128,11 +1128,11 @@ export interface ICustomWelcomeEmail { */ content?: string /** - * The text to appear in the email subject line. + * The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ subject?: string /** - * The text to appear in the header line of the email body. + * The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ header?: string } @@ -1245,6 +1245,10 @@ export interface IDashboard { * Number of times favorited (read-only) */ favorite_count?: number + /** + * Sets the default state of the filters bar to collapsed or open + */ + filters_bar_collapsed?: boolean /** * Time the dashboard was last accessed (read-only) */ @@ -9180,11 +9184,11 @@ export interface IWriteCustomWelcomeEmail { */ content?: string /** - * The text to appear in the email subject line. + * The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ subject?: string /** - * The text to appear in the header line of the email body. + * The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ header?: string } @@ -9248,6 +9252,10 @@ export interface IWriteDashboard { * Whether or not a dashboard is 'soft' deleted. */ deleted?: boolean + /** + * Sets the default state of the filters bar to collapsed or open + */ + filters_bar_collapsed?: boolean /** * configuration option that governs how dashboard loading will happen. */ diff --git a/packages/sdk/src/4.0/funcs.ts b/packages/sdk/src/4.0/funcs.ts index eb967f55d..83ef1bd31 100644 --- a/packages/sdk/src/4.0/funcs.ts +++ b/packages/sdk/src/4.0/funcs.ts @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ import type { @@ -226,6 +226,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserEmailOnly, IUserLoginLockout, IUserPublic, IValidationError, @@ -244,7 +245,6 @@ import type { IWriteContentMeta, IWriteCreateDashboardFilter, IWriteCredentialsEmail, - IWriteCustomWelcomeEmail, IWriteDashboard, IWriteDashboardElement, IWriteDashboardFilter, @@ -316,6 +316,7 @@ export const search_alerts = async ( { limit: request.limit, offset: request.offset, + group_by: request.group_by, fields: request.fields, disabled: request.disabled, frequency: request.frequency, @@ -476,6 +477,31 @@ export const create_alert = async ( ) } +/** + * ### Enqueue an Alert by ID + * + * POST /alerts/{alert_id}/enqueue -> void + * + * @param sdk IAPIMethods implementation + * @param alert_id ID of an alert + * @param force Whether to enqueue an alert again if its already running. + * @param options one-time API call overrides + * + */ +export const enqueue_alert = async ( + sdk: IAPIMethods, + alert_id: number, + force?: boolean, + options?: Partial +): Promise> => { + return sdk.post( + `/alerts/${alert_id}/enqueue`, + { force }, + null, + options + ) +} + //#endregion Alert: Alert //#region ApiAuth: API Authentication @@ -2488,6 +2514,8 @@ export const update_cloud_storage_configuration = async ( * * GET /custom_welcome_email -> ICustomWelcomeEmail * + * @deprecated + * * @param sdk IAPIMethods implementation * @param options one-time API call overrides * @@ -2509,15 +2537,17 @@ export const custom_welcome_email = async ( * * PATCH /custom_welcome_email -> ICustomWelcomeEmail * + * @deprecated + * * @param sdk IAPIMethods implementation - * @param body Partial + * @param body Partial * @param send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving * @param options one-time API call overrides * */ export const update_custom_welcome_email = async ( sdk: IAPIMethods, - body: Partial, + body: Partial, send_test_welcome_email?: boolean, options?: Partial ): Promise> => { @@ -2825,6 +2855,7 @@ export const mobile_settings = async ( * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * GET /setting -> ISetting * @@ -2854,6 +2885,7 @@ export const get_setting = async ( * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -4451,33 +4483,30 @@ export const dashboard_lookml = async ( } /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * POST /dashboards/{dashboard_id}/copy -> IDashboard + * PATCH /dashboards/{dashboard_id}/move -> IDashboard * * @param sdk IAPIMethods implementation - * @param dashboard_id Dashboard id to copy. - * @param folder_id Folder id to copy to. + * @param dashboard_id Dashboard id to move. + * @param folder_id Folder id to move to. * @param options one-time API call overrides * */ -export const copy_dashboard = async ( +export const move_dashboard = async ( sdk: IAPIMethods, dashboard_id: string, - folder_id?: string, + folder_id: string, options?: Partial ): Promise> => { dashboard_id = encodeParam(dashboard_id) - return sdk.post( - `/dashboards/${dashboard_id}/copy`, + return sdk.patch( + `/dashboards/${dashboard_id}/move`, { folder_id }, null, options @@ -4485,30 +4514,33 @@ export const copy_dashboard = async ( } /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * PATCH /dashboards/{dashboard_id}/move -> IDashboard + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. + * + * POST /dashboards/{dashboard_id}/copy -> IDashboard * * @param sdk IAPIMethods implementation - * @param dashboard_id Dashboard id to move. - * @param folder_id Folder id to move to. + * @param dashboard_id Dashboard id to copy. + * @param folder_id Folder id to copy to. * @param options one-time API call overrides * */ -export const move_dashboard = async ( +export const copy_dashboard = async ( sdk: IAPIMethods, dashboard_id: string, - folder_id: string, + folder_id?: string, options?: Partial ): Promise> => { dashboard_id = encodeParam(dashboard_id) - return sdk.patch( - `/dashboards/${dashboard_id}/move`, + return sdk.post( + `/dashboards/${dashboard_id}/copy`, { folder_id }, null, options @@ -11782,6 +11814,38 @@ export const send_user_credentials_email_password_reset = async ( ) } +/** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * POST /users/{user_id}/update_emails -> IUser + * + * @param sdk IAPIMethods implementation + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ +export const wipeout_user_emails = async ( + sdk: IAPIMethods, + user_id: number, + body: Partial, + fields?: string, + options?: Partial +): Promise> => { + return sdk.post( + `/users/${user_id}/update_emails`, + { fields }, + body, + options + ) +} + /** * Create an embed user from an external user ID * diff --git a/packages/sdk/src/4.0/methods.ts b/packages/sdk/src/4.0/methods.ts index 81e8dfe77..44b355347 100644 --- a/packages/sdk/src/4.0/methods.ts +++ b/packages/sdk/src/4.0/methods.ts @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ import type { @@ -224,6 +224,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserEmailOnly, IUserLoginLockout, IUserPublic, IValidationError, @@ -242,7 +243,6 @@ import type { IWriteContentMeta, IWriteCreateDashboardFilter, IWriteCredentialsEmail, - IWriteCustomWelcomeEmail, IWriteDashboard, IWriteDashboardElement, IWriteDashboardFilter, @@ -315,6 +315,7 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { { limit: request.limit, offset: request.offset, + group_by: request.group_by, fields: request.fields, disabled: request.disabled, frequency: request.frequency, @@ -465,6 +466,29 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ) } + /** + * ### Enqueue an Alert by ID + * + * POST /alerts/{alert_id}/enqueue -> void + * + * @param alert_id ID of an alert + * @param force Whether to enqueue an alert again if its already running. + * @param options one-time API call overrides + * + */ + async enqueue_alert( + alert_id: number, + force?: boolean, + options?: Partial + ): Promise> { + return this.post( + `/alerts/${alert_id}/enqueue`, + { force }, + null, + options + ) + } + //#endregion Alert: Alert //#region ApiAuth: API Authentication @@ -2347,6 +2371,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * * GET /custom_welcome_email -> ICustomWelcomeEmail * + * @deprecated + * * @param options one-time API call overrides * */ @@ -2366,13 +2392,15 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * * PATCH /custom_welcome_email -> ICustomWelcomeEmail * - * @param body Partial + * @deprecated + * + * @param body Partial * @param send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving * @param options one-time API call overrides * */ async update_custom_welcome_email( - body: Partial, + body: Partial, send_test_welcome_email?: boolean, options?: Partial ): Promise> { @@ -2654,6 +2682,7 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * GET /setting -> ISetting * @@ -2681,6 +2710,7 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -4169,31 +4199,28 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * POST /dashboards/{dashboard_id}/copy -> IDashboard + * PATCH /dashboards/{dashboard_id}/move -> IDashboard * - * @param dashboard_id Dashboard id to copy. - * @param folder_id Folder id to copy to. + * @param dashboard_id Dashboard id to move. + * @param folder_id Folder id to move to. * @param options one-time API call overrides * */ - async copy_dashboard( + async move_dashboard( dashboard_id: string, - folder_id?: string, + folder_id: string, options?: Partial ): Promise> { dashboard_id = encodeParam(dashboard_id) - return this.post( - `/dashboards/${dashboard_id}/copy`, + return this.patch( + `/dashboards/${dashboard_id}/move`, { folder_id }, null, options @@ -4201,28 +4228,31 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * PATCH /dashboards/{dashboard_id}/move -> IDashboard + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. * - * @param dashboard_id Dashboard id to move. - * @param folder_id Folder id to move to. + * POST /dashboards/{dashboard_id}/copy -> IDashboard + * + * @param dashboard_id Dashboard id to copy. + * @param folder_id Folder id to copy to. * @param options one-time API call overrides * */ - async move_dashboard( + async copy_dashboard( dashboard_id: string, - folder_id: string, + folder_id?: string, options?: Partial ): Promise> { dashboard_id = encodeParam(dashboard_id) - return this.patch( - `/dashboards/${dashboard_id}/move`, + return this.post( + `/dashboards/${dashboard_id}/copy`, { folder_id }, null, options @@ -11060,6 +11090,36 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ) } + /** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * POST /users/{user_id}/update_emails -> IUser + * + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + async wipeout_user_emails( + user_id: number, + body: Partial, + fields?: string, + options?: Partial + ): Promise> { + return this.post( + `/users/${user_id}/update_emails`, + { fields }, + body, + options + ) + } + /** * Create an embed user from an external user ID * diff --git a/packages/sdk/src/4.0/methodsInterface.ts b/packages/sdk/src/4.0/methodsInterface.ts index ee8287bdc..72f12d393 100644 --- a/packages/sdk/src/4.0/methodsInterface.ts +++ b/packages/sdk/src/4.0/methodsInterface.ts @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ import type { @@ -221,6 +221,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserEmailOnly, IUserLoginLockout, IUserPublic, IValidationError, @@ -239,7 +240,6 @@ import type { IWriteContentMeta, IWriteCreateDashboardFilter, IWriteCredentialsEmail, - IWriteCustomWelcomeEmail, IWriteDashboard, IWriteDashboardElement, IWriteDashboardFilter, @@ -410,6 +410,22 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise> + /** + * ### Enqueue an Alert by ID + * + * POST /alerts/{alert_id}/enqueue -> void + * + * @param alert_id ID of an alert + * @param force Whether to enqueue an alert again if its already running. + * @param options one-time API call overrides + * + */ + enqueue_alert( + alert_id: number, + force?: boolean, + options?: Partial + ): Promise> + //#endregion Alert: Alert //#region ApiAuth: API Authentication @@ -1780,6 +1796,8 @@ export interface ILooker40SDK extends IAPIMethods { * * GET /custom_welcome_email -> ICustomWelcomeEmail * + * @deprecated + * * @param options one-time API call overrides * */ @@ -1792,13 +1810,15 @@ export interface ILooker40SDK extends IAPIMethods { * * PATCH /custom_welcome_email -> ICustomWelcomeEmail * - * @param body Partial + * @deprecated + * + * @param body Partial * @param send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving * @param options one-time API call overrides * */ update_custom_welcome_email( - body: Partial, + body: Partial, send_test_welcome_email?: boolean, options?: Partial ): Promise> @@ -1985,6 +2005,7 @@ export interface ILooker40SDK extends IAPIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * GET /setting -> ISetting * @@ -2005,6 +2026,7 @@ export interface ILooker40SDK extends IAPIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -3029,47 +3051,47 @@ export interface ILooker40SDK extends IAPIMethods { ): Promise> /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * POST /dashboards/{dashboard_id}/copy -> IDashboard + * PATCH /dashboards/{dashboard_id}/move -> IDashboard * - * @param dashboard_id Dashboard id to copy. - * @param folder_id Folder id to copy to. + * @param dashboard_id Dashboard id to move. + * @param folder_id Folder id to move to. * @param options one-time API call overrides * */ - copy_dashboard( + move_dashboard( dashboard_id: string, - folder_id?: string, + folder_id: string, options?: Partial ): Promise> /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * PATCH /dashboards/{dashboard_id}/move -> IDashboard + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. * - * @param dashboard_id Dashboard id to move. - * @param folder_id Folder id to move to. + * POST /dashboards/{dashboard_id}/copy -> IDashboard + * + * @param dashboard_id Dashboard id to copy. + * @param folder_id Folder id to copy to. * @param options one-time API call overrides * */ - move_dashboard( + copy_dashboard( dashboard_id: string, - folder_id: string, + folder_id?: string, options?: Partial ): Promise> @@ -7926,6 +7948,29 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise> + /** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * POST /users/{user_id}/update_emails -> IUser + * + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + wipeout_user_emails( + user_id: number, + body: Partial, + fields?: string, + options?: Partial + ): Promise> + /** * Create an embed user from an external user ID * diff --git a/packages/sdk/src/4.0/models.ts b/packages/sdk/src/4.0/models.ts index d00422311..9f05881e1 100644 --- a/packages/sdk/src/4.0/models.ts +++ b/packages/sdk/src/4.0/models.ts @@ -25,7 +25,7 @@ */ /** - * 350 API models: 219 Spec, 54 Request, 58 Write, 19 Enum + * 351 API models: 220 Spec, 54 Request, 57 Write, 20 Enum */ import type { IDictionary, DelimArray } from '@looker/sdk-rtl' @@ -74,11 +74,23 @@ export interface IAlert { * ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) */ dashboard_element_id?: number + /** + * An optional description for the alert. This supplements the title + */ + description?: string /** * Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` */ destinations?: IAlertDestination[] field?: IAlertField + /** + * Whether or not the user follows this alert. (read-only) + */ + followed?: boolean + /** + * Whether or not the alert is followable (read-only) + */ + followable?: boolean /** * ID of the alert (read-only) */ @@ -91,6 +103,18 @@ export interface IAlert { * Whether or not the alert is public */ is_public?: boolean + /** + * The type of the investigative content Valid values are: "dashboard". + */ + investigative_content_type?: InvestigativeContentType + /** + * The ID of the investigative content. For dashboards, this will be the dashboard ID + */ + investigative_content_id?: string + /** + * The title of the investigative content. (read-only) + */ + investigative_content_title?: string /** * ID of the LookML dashboard associated with the alert */ @@ -103,6 +127,10 @@ export interface IAlert { * User id of alert owner */ owner_id?: number + /** + * Alert owner's display name (read-only) + */ + owner_display_name?: string /** * Value of the alert threshold */ @@ -355,13 +383,9 @@ export interface IBoardItem { */ content_updated_at?: string /** - * (Write-Only) base64 encoded image data - */ - custom_image_data_base64?: string - /** - * Custom image_url entered by the user, if present (read-only) + * Custom description entered by the user, if present */ - custom_image_url?: string + custom_description?: string /** * Custom title entered by the user, if present */ @@ -1646,10 +1670,6 @@ export interface ICredentialsTotp { } export interface ICustomWelcomeEmail { - /** - * Operations the current user is able to perform on this object (read-only) - */ - can?: IDictionary /** * If true, custom email content will replace the default body of welcome emails */ @@ -1659,11 +1679,11 @@ export interface ICustomWelcomeEmail { */ content?: string /** - * The text to appear in the email subject line. + * The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ subject?: string /** - * The text to appear in the header line of the email body. + * The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ header?: string } @@ -1775,6 +1795,10 @@ export interface IDashboard { * Number of times favorited (read-only) */ favorite_count?: number + /** + * Sets the default state of the filters bar to collapsed or open + */ + filters_bar_collapsed?: boolean /** * Time the dashboard was last accessed (read-only) */ @@ -2513,6 +2537,10 @@ export interface IDBConnection { * An External OAuth Application to use for authenticating to the database */ oauth_application_id?: number + /** + * When true, error PDTs will be retried every regenerator cycle + */ + always_retry_failed_builds?: boolean } export interface IDBConnectionBase { @@ -3772,6 +3800,13 @@ export interface IInternalHelpResourcesContent { markdown_content?: string } +/** + * The type of the investigative content Valid values are: "dashboard". + */ +export enum InvestigativeContentType { + dashboard = 'dashboard', +} + export interface ILDAPConfig { /** * Operations the current user is able to perform on this object (read-only) @@ -7376,6 +7411,10 @@ export interface IRequestSearchAlerts { * (Optional) Number of results to skip before returning any (used with `limit`). */ offset?: number + /** + * (Optional) Dimension by which to order the results(`dashboard` | `owner`) + */ + group_by?: string /** * (Optional) Requested fields. */ @@ -9141,6 +9180,7 @@ export interface ISetting { */ marketplace_enabled?: boolean whitelabel_configuration?: IWhitelabelConfiguration + custom_welcome_email?: ICustomWelcomeEmail } export interface ISnippet { @@ -9780,6 +9820,13 @@ export interface IUserAttributeWithValue { hidden_value_domain_whitelist?: string } +export interface IUserEmailOnly { + /** + * Email Address + */ + email: string +} + export interface IUserLoginLockout { /** * Operations the current user is able to perform on this object (read-only) @@ -10000,7 +10047,7 @@ export interface IWorkspace { /** * Dynamic writeable type for Alert removes: - * id + * followed, followable, id, investigative_content_title, owner_display_name */ export interface IWriteAlert { /** @@ -10023,6 +10070,10 @@ export interface IWriteAlert { * ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) */ dashboard_element_id?: number + /** + * An optional description for the alert. This supplements the title + */ + description?: string /** * Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` */ @@ -10036,6 +10087,14 @@ export interface IWriteAlert { * Whether or not the alert is public */ is_public?: boolean + /** + * The type of the investigative content Valid values are: "dashboard". + */ + investigative_content_type?: InvestigativeContentType + /** + * The ID of the investigative content. For dashboards, this will be the dashboard ID + */ + investigative_content_id?: string /** * ID of the LookML dashboard associated with the alert */ @@ -10118,13 +10177,13 @@ export interface IWriteBoard { /** * Dynamic writeable type for BoardItem removes: - * can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, title, url, view_count + * can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, description, favorite_count, id, image_url, location, title, url, view_count */ export interface IWriteBoardItem { /** - * (Write-Only) base64 encoded image data + * Custom description entered by the user, if present */ - custom_image_data_base64?: string + custom_description?: string /** * Custom title entered by the user, if present */ @@ -10369,29 +10428,6 @@ export interface IWriteCredentialsEmail { forced_password_reset_at_next_login?: boolean } -/** - * Dynamic writeable type for CustomWelcomeEmail removes: - * can - */ -export interface IWriteCustomWelcomeEmail { - /** - * If true, custom email content will replace the default body of welcome emails - */ - enabled?: boolean - /** - * The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - */ - content?: string - /** - * The text to appear in the email subject line. - */ - subject?: string - /** - * The text to appear in the header line of the email body. - */ - header?: string -} - /** * Dynamic writeable type for Dashboard removes: * can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count, url @@ -10446,6 +10482,10 @@ export interface IWriteDashboard { * Whether or not a dashboard is 'soft' deleted. */ deleted?: boolean + /** + * Sets the default state of the filters bar to collapsed or open + */ + filters_bar_collapsed?: boolean /** * configuration option that governs how dashboard loading will happen. */ @@ -10833,6 +10873,10 @@ export interface IWriteDBConnection { * An External OAuth Application to use for authenticating to the database */ oauth_application_id?: number + /** + * When true, error PDTs will be retried every regenerator cycle + */ + always_retry_failed_builds?: boolean } /** @@ -11947,6 +11991,7 @@ export interface IWriteSetting { * id, logo_url, favicon_url */ whitelabel_configuration?: IWriteWhitelabelConfiguration + custom_welcome_email?: ICustomWelcomeEmail } /** diff --git a/packages/sdk/src/4.0/streams.ts b/packages/sdk/src/4.0/streams.ts index 1868594e1..980b7d25f 100644 --- a/packages/sdk/src/4.0/streams.ts +++ b/packages/sdk/src/4.0/streams.ts @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ import type { Readable } from 'readable-stream' @@ -223,6 +223,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserEmailOnly, IUserLoginLockout, IUserPublic, IValidationError, @@ -241,7 +242,6 @@ import type { IWriteContentMeta, IWriteCreateDashboardFilter, IWriteCredentialsEmail, - IWriteCustomWelcomeEmail, IWriteDashboard, IWriteDashboardElement, IWriteDashboardFilter, @@ -318,6 +318,7 @@ export class Looker40SDKStream extends APIMethods { { limit: request.limit, offset: request.offset, + group_by: request.group_by, fields: request.fields, disabled: request.disabled, frequency: request.frequency, @@ -498,6 +499,33 @@ export class Looker40SDKStream extends APIMethods { ) } + /** + * ### Enqueue an Alert by ID + * + * POST /alerts/{alert_id}/enqueue -> void + * + * @param callback streaming output function + * @param alert_id ID of an alert + * @param force Whether to enqueue an alert again if its already running. + * @param options one-time API call overrides + * + */ + async enqueue_alert( + callback: (readable: Readable) => Promise, + alert_id: number, + force?: boolean, + options?: Partial + ) { + return this.authStream( + callback, + 'POST', + `/alerts/${alert_id}/enqueue`, + { force }, + null, + options + ) + } + //#endregion Alert: Alert //#region ApiAuth: API Authentication @@ -2685,6 +2713,8 @@ export class Looker40SDKStream extends APIMethods { * * GET /custom_welcome_email -> ICustomWelcomeEmail * + * @deprecated + * * @param callback streaming output function * @param options one-time API call overrides * @@ -2708,15 +2738,17 @@ export class Looker40SDKStream extends APIMethods { * * PATCH /custom_welcome_email -> ICustomWelcomeEmail * + * @deprecated + * * @param callback streaming output function - * @param body Partial + * @param body Partial * @param send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving * @param options one-time API call overrides * */ async update_custom_welcome_email( callback: (readable: Readable) => Promise, - body: Partial, + body: Partial, send_test_welcome_email?: boolean, options?: Partial ) { @@ -3055,6 +3087,7 @@ export class Looker40SDKStream extends APIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * GET /setting -> ISetting * @@ -3086,6 +3119,7 @@ export class Looker40SDKStream extends APIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -4803,35 +4837,32 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * POST /dashboards/{dashboard_id}/copy -> IDashboard + * PATCH /dashboards/{dashboard_id}/move -> IDashboard * * @param callback streaming output function - * @param dashboard_id Dashboard id to copy. - * @param folder_id Folder id to copy to. + * @param dashboard_id Dashboard id to move. + * @param folder_id Folder id to move to. * @param options one-time API call overrides * */ - async copy_dashboard( + async move_dashboard( callback: (readable: Readable) => Promise, dashboard_id: string, - folder_id?: string, + folder_id: string, options?: Partial ) { dashboard_id = encodeParam(dashboard_id) return this.authStream( callback, - 'POST', - `/dashboards/${dashboard_id}/copy`, + 'PATCH', + `/dashboards/${dashboard_id}/move`, { folder_id }, null, options @@ -4839,32 +4870,35 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * PATCH /dashboards/{dashboard_id}/move -> IDashboard + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. + * + * POST /dashboards/{dashboard_id}/copy -> IDashboard * * @param callback streaming output function - * @param dashboard_id Dashboard id to move. - * @param folder_id Folder id to move to. + * @param dashboard_id Dashboard id to copy. + * @param folder_id Folder id to copy to. * @param options one-time API call overrides * */ - async move_dashboard( + async copy_dashboard( callback: (readable: Readable) => Promise, dashboard_id: string, - folder_id: string, + folder_id?: string, options?: Partial ) { dashboard_id = encodeParam(dashboard_id) return this.authStream( callback, - 'PATCH', - `/dashboards/${dashboard_id}/move`, + 'POST', + `/dashboards/${dashboard_id}/copy`, { folder_id }, null, options @@ -12701,6 +12735,40 @@ export class Looker40SDKStream extends APIMethods { ) } + /** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * POST /users/{user_id}/update_emails -> IUser + * + * @param callback streaming output function + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + async wipeout_user_emails( + callback: (readable: Readable) => Promise, + user_id: number, + body: Partial, + fields?: string, + options?: Partial + ) { + return this.authStream( + callback, + 'POST', + `/users/${user_id}/update_emails`, + { fields }, + body, + options + ) + } + /** * Create an embed user from an external user ID * diff --git a/packages/sdk/src/constants.ts b/packages/sdk/src/constants.ts index 69e186ca4..d95816cdd 100644 --- a/packages/sdk/src/constants.ts +++ b/packages/sdk/src/constants.ts @@ -24,5 +24,5 @@ */ -export const sdkVersion = '21.14' +export const sdkVersion = '21.16' export const environmentPrefix = 'LOOKERSDK' diff --git a/python/looker_sdk/sdk/api31/methods.py b/python/looker_sdk/sdk/api31/methods.py index 824a2415b..ab3c983a1 100644 --- a/python/looker_sdk/sdk/api31/methods.py +++ b/python/looker_sdk/sdk/api31/methods.py @@ -133,7 +133,8 @@ def login_user( # # DELETE /logout -> str def logout( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> str: """Logout""" response = cast( @@ -220,7 +221,8 @@ def create_sso_embed_url( # # GET /ldap_config -> models.LDAPConfig def ldap_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.LDAPConfig: """Get LDAP Configuration""" response = cast( @@ -410,7 +412,8 @@ def test_ldap_config_user_auth( # # GET /oidc_config -> models.OIDCConfig def oidc_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.OIDCConfig: """Get OIDC Configuration""" response = cast( @@ -517,7 +520,8 @@ def create_oidc_test_config( # # GET /password_config -> models.PasswordConfig def password_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.PasswordConfig: """Get Password Config""" response = cast( @@ -554,7 +558,8 @@ def update_password_config( # # PUT /password_config/force_password_reset_at_next_login_for_all_users -> str def force_password_reset_at_next_login_for_all_users( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> str: """Force password reset""" response = cast( @@ -582,7 +587,8 @@ def force_password_reset_at_next_login_for_all_users( # # GET /saml_config -> models.SamlConfig def saml_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SamlConfig: """Get SAML Configuration""" response = cast( @@ -689,7 +695,9 @@ def create_saml_test_config( # # POST /parse_saml_idp_metadata -> models.SamlMetadataParseResult def parse_saml_idp_metadata( - self, body: str, transport_options: Optional[transport.TransportOptions] = None, + self, + body: str, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SamlMetadataParseResult: """Parse SAML IdP XML""" response = cast( @@ -709,7 +717,9 @@ def parse_saml_idp_metadata( # # POST /fetch_and_parse_saml_idp_metadata -> models.SamlMetadataParseResult def fetch_and_parse_saml_idp_metadata( - self, body: str, transport_options: Optional[transport.TransportOptions] = None, + self, + body: str, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SamlMetadataParseResult: """Parse SAML IdP Url""" response = cast( @@ -727,7 +737,8 @@ def fetch_and_parse_saml_idp_metadata( # # GET /session_config -> models.SessionConfig def session_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SessionConfig: """Get Session Config""" response = cast( @@ -969,7 +980,8 @@ def color_collections_standard( # # GET /color_collections/default -> models.ColorCollection def default_color_collection( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.ColorCollection: """Get Default Color Collection""" response = cast( @@ -1099,7 +1111,8 @@ def delete_color_collection( # # GET /backup_configuration -> models.BackupConfiguration def backup_configuration( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.BackupConfiguration: """Get Backup Configuration""" response = cast( @@ -1136,7 +1149,8 @@ def update_backup_configuration( # # GET /cloud_storage -> models.BackupConfiguration def cloud_storage_configuration( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.BackupConfiguration: """Get Cloud Storage""" response = cast( @@ -1173,7 +1187,8 @@ def update_cloud_storage_configuration( # # GET /custom_welcome_email -> models.CustomWelcomeEmail def custom_welcome_email( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.CustomWelcomeEmail: """Get Custom Welcome Email""" response = cast( @@ -1217,7 +1232,7 @@ def update_custom_welcome_email_test( body: models.WelcomeEmailTest, transport_options: Optional[transport.TransportOptions] = None, ) -> models.WelcomeEmailTest: - """Send a test welcome email to the currently logged in user with the supplied content """ + """Send a test welcome email to the currently logged in user with the supplied content""" response = cast( models.WelcomeEmailTest, self.put( @@ -1233,7 +1248,8 @@ def update_custom_welcome_email_test( # # GET /digest_emails_enabled -> models.DigestEmails def digest_emails_enabled( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.DigestEmails: """Get Digest_emails""" response = cast( @@ -1272,7 +1288,8 @@ def update_digest_emails_enabled( # # POST /digest_email_send -> models.DigestEmailSend def create_digest_email_send( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.DigestEmailSend: """Deliver digest email contents""" response = cast( @@ -1289,7 +1306,8 @@ def create_digest_email_send( # # GET /internal_help_resources_content -> models.InternalHelpResourcesContent def internal_help_resources_content( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.InternalHelpResourcesContent: """Get Internal Help Resources Content""" response = cast( @@ -1326,7 +1344,8 @@ def update_internal_help_resources_content( # # GET /internal_help_resources_enabled -> models.InternalHelpResources def internal_help_resources( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.InternalHelpResources: """Get Internal Help Resources""" response = cast( @@ -1363,7 +1382,8 @@ def update_internal_help_resources( # # GET /legacy_features -> Sequence[models.LegacyFeature] def all_legacy_features( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.LegacyFeature]: """Get All Legacy Features""" response = cast( @@ -1422,7 +1442,8 @@ def update_legacy_feature( # # GET /locales -> Sequence[models.Locale] def all_locales( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Locale]: """Get All Locales""" response = cast( @@ -1439,7 +1460,8 @@ def all_locales( # # GET /timezones -> Sequence[models.Timezone] def all_timezones( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Timezone]: """Get All Timezones""" response = cast( @@ -3136,7 +3158,8 @@ def fetch_remote_data_action_form( # # GET /datagroups -> Sequence[models.Datagroup] def all_datagroups( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Datagroup]: """Get All Datagroups""" response = cast( @@ -6623,7 +6646,8 @@ def create_merge_query( # # GET /running_queries -> Sequence[models.RunningQueries] def all_running_queries( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.RunningQueries]: """Get All Running Queries""" response = cast( @@ -7141,7 +7165,8 @@ def create_model_set( # # GET /permissions -> Sequence[models.Permission] def all_permissions( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Permission]: """Get All Permissions""" response = cast( @@ -8110,7 +8135,8 @@ def scheduled_plan_run_once_by_id( # # GET /session -> models.ApiSession def session( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.ApiSession: """Get Session""" response = cast( @@ -10269,7 +10295,8 @@ def set_user_attribute_group_values( # # GET /workspaces -> Sequence[models.Workspace] def all_workspaces( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Workspace]: """Get All Workspaces""" response = cast( diff --git a/python/looker_sdk/sdk/api31/models.py b/python/looker_sdk/sdk/api31/models.py index fc0142e75..1d8524169 100644 --- a/python/looker_sdk/sdk/api31/models.py +++ b/python/looker_sdk/sdk/api31/models.py @@ -1562,8 +1562,8 @@ class CustomWelcomeEmail(model.Model): can: Operations the current user is able to perform on this object enabled: If true, custom email content will replace the default body of welcome emails content: The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - subject: The text to appear in the email subject line. - header: The text to appear in the header line of the email body. + subject: The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. + header: The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. """ can: Optional[MutableMapping[str, bool]] = None @@ -1621,6 +1621,7 @@ class Dashboard(model.Model): deleter_id: Id of User that 'soft' deleted the dashboard. edit_uri: Relative path of URI of LookML file to edit the dashboard (LookML dashboard only). favorite_count: Number of times favorited + filters_bar_collapsed: Sets the default state of the filters bar to collapsed or open last_accessed_at: Time the dashboard was last accessed last_viewed_at: Time last viewed in the Looker web UI load_configuration: configuration option that governs how dashboard loading will happen. @@ -1666,6 +1667,7 @@ class Dashboard(model.Model): deleter_id: Optional[int] = None edit_uri: Optional[str] = None favorite_count: Optional[int] = None + filters_bar_collapsed: Optional[bool] = None last_accessed_at: Optional[datetime.datetime] = None last_viewed_at: Optional[datetime.datetime] = None load_configuration: Optional[str] = None @@ -1713,6 +1715,7 @@ def __init__( deleter_id: Optional[int] = None, edit_uri: Optional[str] = None, favorite_count: Optional[int] = None, + filters_bar_collapsed: Optional[bool] = None, last_accessed_at: Optional[datetime.datetime] = None, last_viewed_at: Optional[datetime.datetime] = None, load_configuration: Optional[str] = None, @@ -1759,6 +1762,7 @@ def __init__( self.deleter_id = deleter_id self.edit_uri = edit_uri self.favorite_count = favorite_count + self.filters_bar_collapsed = filters_bar_collapsed self.last_accessed_at = last_accessed_at self.last_viewed_at = last_viewed_at self.load_configuration = load_configuration @@ -8096,7 +8100,7 @@ class ScheduledPlanDestination(model.Model): format: The data format to send to the given destination. Supported formats vary by destination, but include: "txt", "csv", "inline_json", "json", "json_detail", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png" apply_formatting: Are values formatted? (containing currency symbols, digit separators, etc. apply_vis: Whether visualization options are applied to the results. - address: Address for recipient. For email e.g. 'user@example.com'. For webhooks e.g. 'https://domain/path'. For Amazon S3 e.g. 's3://bucket-name/path/'. For SFTP e.g. 'sftp://host-name/path/'. + address: Address for recipient. For email e.g. 'user@example.com'. For webhooks e.g. 'https://domain/path'. For Amazon S3 e.g. 's3://bucket-name/path/'. For SFTP e.g. 'sftp://host-name/path/'. looker_recipient: Whether the recipient is a Looker user on the current instance (only applicable for email recipients) type: Type of the address ('email', 'webhook', 's3', or 'sftp') parameters: JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username. @@ -9464,11 +9468,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteApiSession(model.Model): """ - Dynamic writeable type for ApiSession removes: -can, sudo_user_id + Dynamic writeable type for ApiSession removes: + can, sudo_user_id - Attributes: - workspace_id: The id of active workspace for this session + Attributes: + workspace_id: The id of active workspace for this session """ workspace_id: Optional[str] = None @@ -9480,15 +9484,15 @@ def __init__(self, *, workspace_id: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteBackupConfiguration(model.Model): """ - Dynamic writeable type for BackupConfiguration removes: -can, url + Dynamic writeable type for BackupConfiguration removes: + can, url - Attributes: - type: Type of backup: looker-s3 or custom-s3 - custom_s3_bucket: Name of bucket for custom-s3 backups - custom_s3_bucket_region: Name of region where the bucket is located - custom_s3_key: (Write-Only) AWS S3 key used for custom-s3 backups - custom_s3_secret: (Write-Only) AWS S3 secret used for custom-s3 backups + Attributes: + type: Type of backup: looker-s3 or custom-s3 + custom_s3_bucket: Name of bucket for custom-s3 backups + custom_s3_bucket_region: Name of region where the bucket is located + custom_s3_key: (Write-Only) AWS S3 key used for custom-s3 backups + custom_s3_secret: (Write-Only) AWS S3 secret used for custom-s3 backups """ type: Optional[str] = None @@ -9516,14 +9520,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteColorCollection(model.Model): """ - Dynamic writeable type for ColorCollection removes: -id + Dynamic writeable type for ColorCollection removes: + id - Attributes: - label: Label of color collection - categoricalPalettes: Array of categorical palette definitions - sequentialPalettes: Array of discrete palette definitions - divergingPalettes: Array of diverging palette definitions + Attributes: + label: Label of color collection + categoricalPalettes: Array of categorical palette definitions + sequentialPalettes: Array of discrete palette definitions + divergingPalettes: Array of diverging palette definitions """ label: Optional[str] = None @@ -9548,14 +9552,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteContentFavorite(model.Model): """ - Dynamic writeable type for ContentFavorite removes: -id, look_id, dashboard_id, look + Dynamic writeable type for ContentFavorite removes: + id, look_id, dashboard_id, look - Attributes: - user_id: User Id which owns this ContentFavorite - content_metadata_id: Content Metadata Id associated with this ContentFavorite - dashboard: Dynamic writeable type for DashboardBase removes: -can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer + Attributes: + user_id: User Id which owns this ContentFavorite + content_metadata_id: Content Metadata Id associated with this ContentFavorite + dashboard: Dynamic writeable type for DashboardBase removes: + can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer """ user_id: Optional[int] = None @@ -9577,11 +9581,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteContentMeta(model.Model): """ - Dynamic writeable type for ContentMeta removes: -can, id, name, parent_id, dashboard_id, look_id, folder_id, content_type, inheriting_id, slug, space_id + Dynamic writeable type for ContentMeta removes: + can, id, name, parent_id, dashboard_id, look_id, folder_id, content_type, inheriting_id, slug, space_id - Attributes: - inherits: Whether content inherits its access levels from parent + Attributes: + inherits: Whether content inherits its access levels from parent """ inherits: Optional[bool] = None @@ -9593,23 +9597,23 @@ def __init__(self, *, inherits: Optional[bool] = None): @attr.s(auto_attribs=True, init=False) class WriteCreateDashboardFilter(model.Model): """ - Dynamic writeable type for CreateDashboardFilter removes: -id, field - - Attributes: - dashboard_id: Id of Dashboard - name: Name of filter - title: Title of filter - type: Type of filter: one of date, number, string, or field - default_value: Default value of filter - model: Model of filter (required if type = field) - explore: Explore of filter (required if type = field) - dimension: Dimension of filter (required if type = field) - row: Display order of this filter relative to other filters - listens_to_filters: Array of listeners for faceted filters - allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - required: Whether the filter requires a value to run the dashboard - ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. + Dynamic writeable type for CreateDashboardFilter removes: + id, field + + Attributes: + dashboard_id: Id of Dashboard + name: Name of filter + title: Title of filter + type: Type of filter: one of date, number, string, or field + default_value: Default value of filter + model: Model of filter (required if type = field) + explore: Explore of filter (required if type = field) + dimension: Dimension of filter (required if type = field) + row: Display order of this filter relative to other filters + listens_to_filters: Array of listeners for faceted filters + allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) + required: Whether the filter requires a value to run the dashboard + ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. """ dashboard_id: str @@ -9661,16 +9665,16 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteCreateQueryTask(model.Model): """ - Dynamic writeable type for CreateQueryTask removes: -can + Dynamic writeable type for CreateQueryTask removes: + can - Attributes: - query_id: Id of query to run - result_format: Desired async query result format. Valid values are: "inline_json", "json", "json_detail", "json_fe", "csv", "html", "md", "txt", "xlsx", "gsxml". - source: Source of query task - deferred: Create the task but defer execution - look_id: Id of look associated with query. - dashboard_id: Id of dashboard associated with query. + Attributes: + query_id: Id of query to run + result_format: Desired async query result format. Valid values are: "inline_json", "json", "json_detail", "json_fe", "csv", "html", "md", "txt", "xlsx", "gsxml". + source: Source of query task + deferred: Create the task but defer execution + look_id: Id of look associated with query. + dashboard_id: Id of dashboard associated with query. """ query_id: int @@ -9709,12 +9713,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteCredentialsEmail(model.Model): """ - Dynamic writeable type for CredentialsEmail removes: -can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url + Dynamic writeable type for CredentialsEmail removes: + can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url - Attributes: - email: EMail address used for user login - forced_password_reset_at_next_login: Force the user to change their password upon their next login + Attributes: + email: EMail address used for user login + forced_password_reset_at_next_login: Force the user to change their password upon their next login """ email: Optional[str] = None @@ -9733,14 +9737,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteCustomWelcomeEmail(model.Model): """ - Dynamic writeable type for CustomWelcomeEmail removes: -can + Dynamic writeable type for CustomWelcomeEmail removes: + can - Attributes: - enabled: If true, custom email content will replace the default body of welcome emails - content: The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - subject: The text to appear in the email subject line. - header: The text to appear in the header line of the email body. + Attributes: + enabled: If true, custom email content will replace the default body of welcome emails + content: The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. + subject: The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. + header: The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. """ enabled: Optional[bool] = None @@ -9765,36 +9769,37 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboard(model.Model): """ - Dynamic writeable type for Dashboard removes: -can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count - - Attributes: - description: Description - hidden: Is Hidden - query_timezone: Timezone in which the Dashboard will run by default. - refresh_interval: Refresh Interval, as a time duration phrase like "2 hours 30 minutes". A number with no time units will be interpreted as whole seconds. - folder: Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - title: Dashboard Title - slug: Content Metadata Slug - preferred_viewer: The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) - space: Dynamic writeable type for SpaceBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - alert_sync_with_dashboard_filter_enabled: Enables alerts to keep in sync with dashboard filter changes - only available in Enhanced Alerts (beta) - background_color: Background color - crossfilter_enabled: Enables crossfiltering in dashboards - only available in dashboards-next (beta) - deleted: Whether or not a dashboard is 'soft' deleted. - load_configuration: configuration option that governs how dashboard loading will happen. - lookml_link_id: Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. - show_filters_bar: Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access) - show_title: Show title - space_id: Id of Space - folder_id: Id of folder - text_tile_text_color: Color of text on text tiles - tile_background_color: Tile background color - tile_text_color: Tile text color - title_color: Title color - appearance: + Dynamic writeable type for Dashboard removes: + can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count + + Attributes: + description: Description + hidden: Is Hidden + query_timezone: Timezone in which the Dashboard will run by default. + refresh_interval: Refresh Interval, as a time duration phrase like "2 hours 30 minutes". A number with no time units will be interpreted as whole seconds. + folder: Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + title: Dashboard Title + slug: Content Metadata Slug + preferred_viewer: The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) + space: Dynamic writeable type for SpaceBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + alert_sync_with_dashboard_filter_enabled: Enables alerts to keep in sync with dashboard filter changes - only available in Enhanced Alerts (beta) + background_color: Background color + crossfilter_enabled: Enables crossfiltering in dashboards - only available in dashboards-next (beta) + deleted: Whether or not a dashboard is 'soft' deleted. + filters_bar_collapsed: Sets the default state of the filters bar to collapsed or open + load_configuration: configuration option that governs how dashboard loading will happen. + lookml_link_id: Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. + show_filters_bar: Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access) + show_title: Show title + space_id: Id of Space + folder_id: Id of folder + text_tile_text_color: Color of text on text tiles + tile_background_color: Tile background color + tile_text_color: Tile text color + title_color: Title color + appearance: """ description: Optional[str] = None @@ -9810,6 +9815,7 @@ class WriteDashboard(model.Model): background_color: Optional[str] = None crossfilter_enabled: Optional[bool] = None deleted: Optional[bool] = None + filters_bar_collapsed: Optional[bool] = None load_configuration: Optional[str] = None lookml_link_id: Optional[str] = None show_filters_bar: Optional[bool] = None @@ -9838,6 +9844,7 @@ def __init__( background_color: Optional[str] = None, crossfilter_enabled: Optional[bool] = None, deleted: Optional[bool] = None, + filters_bar_collapsed: Optional[bool] = None, load_configuration: Optional[str] = None, lookml_link_id: Optional[str] = None, show_filters_bar: Optional[bool] = None, @@ -9865,6 +9872,7 @@ def __init__( self.background_color = background_color self.crossfilter_enabled = crossfilter_enabled self.deleted = deleted + self.filters_bar_collapsed = filters_bar_collapsed self.load_configuration = load_configuration self.lookml_link_id = lookml_link_id self.show_filters_bar = show_filters_bar @@ -9881,14 +9889,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardBase(model.Model): """ - Dynamic writeable type for DashboardBase removes: -can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer + Dynamic writeable type for DashboardBase removes: + can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer - Attributes: - folder: Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - space: Dynamic writeable type for SpaceBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + Attributes: + folder: Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + space: Dynamic writeable type for SpaceBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can """ folder: Optional["WriteFolderBase"] = None @@ -9907,31 +9915,31 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardElement(model.Model): """ - Dynamic writeable type for DashboardElement removes: -can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html - - Attributes: - body_text: Text tile body text - dashboard_id: Id of Dashboard - look: Dynamic writeable type for LookWithQuery removes: -can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, user, url - look_id: Id Of Look - merge_result_id: ID of merge result - note_display: Note Display - note_state: Note State - note_text: Note Text - query: Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations - query_id: Id Of Query - refresh_interval: Refresh Interval - result_maker: Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: -id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config - result_maker_id: ID of the ResultMakerLookup entry. - subtitle_text: Text tile subtitle text - title: Title of dashboard element - title_hidden: Whether title is hidden - title_text: Text tile title - type: Type + Dynamic writeable type for DashboardElement removes: + can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html + + Attributes: + body_text: Text tile body text + dashboard_id: Id of Dashboard + look: Dynamic writeable type for LookWithQuery removes: + can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, user, url + look_id: Id Of Look + merge_result_id: ID of merge result + note_display: Note Display + note_state: Note State + note_text: Note Text + query: Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations + query_id: Id Of Query + refresh_interval: Refresh Interval + result_maker: Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: + id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config + result_maker_id: ID of the ResultMakerLookup entry. + subtitle_text: Text tile subtitle text + title: Title of dashboard element + title_hidden: Whether title is hidden + title_text: Text tile title + type: Type """ body_text: Optional[str] = None @@ -10000,22 +10008,22 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardFilter(model.Model): """ - Dynamic writeable type for DashboardFilter removes: -can, id, dashboard_id, field + Dynamic writeable type for DashboardFilter removes: + can, id, dashboard_id, field - Attributes: - name: Name of filter - title: Title of filter - type: Type of filter: one of date, number, string, or field - default_value: Default value of filter - model: Model of filter (required if type = field) - explore: Explore of filter (required if type = field) - dimension: Dimension of filter (required if type = field) - row: Display order of this filter relative to other filters - listens_to_filters: Array of listeners for faceted filters - allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - required: Whether the filter requires a value to run the dashboard - ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. + Attributes: + name: Name of filter + title: Title of filter + type: Type of filter: one of date, number, string, or field + default_value: Default value of filter + model: Model of filter (required if type = field) + explore: Explore of filter (required if type = field) + dimension: Dimension of filter (required if type = field) + row: Display order of this filter relative to other filters + listens_to_filters: Array of listeners for faceted filters + allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) + required: Whether the filter requires a value to run the dashboard + ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. """ name: Optional[str] = None @@ -10064,15 +10072,15 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardLayout(model.Model): """ - Dynamic writeable type for DashboardLayout removes: -can, id, deleted, dashboard_title, dashboard_layout_components + Dynamic writeable type for DashboardLayout removes: + can, id, deleted, dashboard_title, dashboard_layout_components - Attributes: - dashboard_id: Id of Dashboard - type: Type - active: Is Active - column_width: Column Width - width: Width + Attributes: + dashboard_id: Id of Dashboard + type: Type + active: Is Active + column_width: Column Width + width: Width """ dashboard_id: Optional[str] = None @@ -10100,16 +10108,16 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardLayoutComponent(model.Model): """ - Dynamic writeable type for DashboardLayoutComponent removes: -can, id, deleted, element_title, element_title_hidden, vis_type + Dynamic writeable type for DashboardLayoutComponent removes: + can, id, deleted, element_title, element_title_hidden, vis_type - Attributes: - dashboard_layout_id: Id of Dashboard Layout - dashboard_element_id: Id Of Dashboard Element - row: Row - column: Column - width: Width - height: Height + Attributes: + dashboard_layout_id: Id of Dashboard Layout + dashboard_element_id: Id Of Dashboard Element + row: Row + column: Column + width: Width + height: Height """ dashboard_layout_id: Optional[str] = None @@ -10140,12 +10148,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDatagroup(model.Model): """ - Dynamic writeable type for Datagroup removes: -can, created_at, id, model_name, name, trigger_check_at, trigger_error, trigger_value + Dynamic writeable type for Datagroup removes: + can, created_at, id, model_name, name, trigger_check_at, trigger_error, trigger_value - Attributes: - stale_before: UNIX timestamp before which cache entries are considered stale. Cannot be in the future. - triggered_at: UNIX timestamp at which this entry became triggered. Cannot be in the future. + Attributes: + stale_before: UNIX timestamp before which cache entries are considered stale. Cannot be in the future. + triggered_at: UNIX timestamp at which this entry became triggered. Cannot be in the future. """ stale_before: Optional[int] = None @@ -10161,37 +10169,37 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDBConnection(model.Model): """ - Dynamic writeable type for DBConnection removes: -can, dialect, snippets, pdts_enabled, uses_oauth, created_at, user_id, example, last_regen_at, last_reap_at, managed - - Attributes: - name: Name of the connection. Also used as the unique identifier - host: Host name/address of server - port: Port number on server - username: Username for server authentication - password: (Write-Only) Password for server authentication - certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - file_type: (Write-Only) Certificate keyfile type - .json or .p12 - database: Database name - db_timezone: Time zone of database - query_timezone: Timezone to use in queries - schema: Scheme name - max_connections: Maximum number of concurrent connection to use - max_billing_gigabytes: Maximum size of query in GBs (BigQuery only, can be a user_attribute name) - ssl: Use SSL/TLS when connecting to server - verify_ssl: Verify the SSL - tmp_db_name: Name of temporary database (if used) - jdbc_additional_params: Additional params to add to JDBC connection string - pool_timeout: Connection Pool Timeout, in seconds - dialect_name: (Read/Write) SQL Dialect name - user_db_credentials: (Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password - user_attribute_fields: Fields whose values map to user attribute names - maintenance_cron: Cron string specifying when maintenance such as PDT trigger checks and drops should be performed - sql_runner_precache_tables: Precache tables in the SQL Runner - sql_writing_with_info_schema: Fetch Information Schema For SQL Writing - after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature - pdt_context_override: Dynamic writeable type for DBConnectionOverride removes: -has_password + Dynamic writeable type for DBConnection removes: + can, dialect, snippets, pdts_enabled, uses_oauth, created_at, user_id, example, last_regen_at, last_reap_at, managed + + Attributes: + name: Name of the connection. Also used as the unique identifier + host: Host name/address of server + port: Port number on server + username: Username for server authentication + password: (Write-Only) Password for server authentication + certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + file_type: (Write-Only) Certificate keyfile type - .json or .p12 + database: Database name + db_timezone: Time zone of database + query_timezone: Timezone to use in queries + schema: Scheme name + max_connections: Maximum number of concurrent connection to use + max_billing_gigabytes: Maximum size of query in GBs (BigQuery only, can be a user_attribute name) + ssl: Use SSL/TLS when connecting to server + verify_ssl: Verify the SSL + tmp_db_name: Name of temporary database (if used) + jdbc_additional_params: Additional params to add to JDBC connection string + pool_timeout: Connection Pool Timeout, in seconds + dialect_name: (Read/Write) SQL Dialect name + user_db_credentials: (Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password + user_attribute_fields: Fields whose values map to user attribute names + maintenance_cron: Cron string specifying when maintenance such as PDT trigger checks and drops should be performed + sql_runner_precache_tables: Precache tables in the SQL Runner + sql_writing_with_info_schema: Fetch Information Schema For SQL Writing + after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature + pdt_context_override: Dynamic writeable type for DBConnectionOverride removes: + has_password """ name: Optional[str] = None @@ -10282,21 +10290,21 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDBConnectionOverride(model.Model): """ - Dynamic writeable type for DBConnectionOverride removes: -has_password + Dynamic writeable type for DBConnectionOverride removes: + has_password - Attributes: - context: Context in which to override (`pdt` is the only allowed value) - host: Host name/address of server - port: Port number on server - username: Username for server authentication - password: (Write-Only) Password for server authentication - certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - file_type: (Write-Only) Certificate keyfile type - .json or .p12 - database: Database name - schema: Scheme name - jdbc_additional_params: Additional params to add to JDBC connection string - after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature + Attributes: + context: Context in which to override (`pdt` is the only allowed value) + host: Host name/address of server + port: Port number on server + username: Username for server authentication + password: (Write-Only) Password for server authentication + certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + file_type: (Write-Only) Certificate keyfile type - .json or .p12 + database: Database name + schema: Scheme name + jdbc_additional_params: Additional params to add to JDBC connection string + after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature """ context: Optional[str] = None @@ -10342,12 +10350,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteFolderBase(model.Model): """ - Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - Attributes: - name: Unique Name - parent_id: Id of Parent. If the parent id is null, this is a root-level entry + Attributes: + name: Unique Name + parent_id: Id of Parent. If the parent id is null, this is a root-level entry """ name: str @@ -10361,12 +10369,12 @@ def __init__(self, *, name: str, parent_id: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteGitBranch(model.Model): """ - Dynamic writeable type for GitBranch removes: -can, remote, remote_name, error, message, owner_name, readonly, personal, is_local, is_remote, is_production, ahead_count, behind_count, commit_at, remote_ref + Dynamic writeable type for GitBranch removes: + can, remote, remote_name, error, message, owner_name, readonly, personal, is_local, is_remote, is_production, ahead_count, behind_count, commit_at, remote_ref - Attributes: - name: The short name on the local. Updating `name` results in `git checkout ` - ref: The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. + Attributes: + name: The short name on the local. Updating `name` results in `git checkout ` + ref: The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. """ name: Optional[str] = None @@ -10380,12 +10388,12 @@ def __init__(self, *, name: Optional[str] = None, ref: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteGroup(model.Model): """ - Dynamic writeable type for Group removes: -can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count + Dynamic writeable type for Group removes: + can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count - Attributes: - can_add_to_content_metadata: Group can be used in content access controls - name: Name of group + Attributes: + can_add_to_content_metadata: Group can be used in content access controls + name: Name of group """ can_add_to_content_metadata: Optional[bool] = None @@ -10404,14 +10412,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteHomepage(model.Model): """ - Dynamic writeable type for Homepage removes: -can, content_metadata_id, created_at, homepage_sections, id, updated_at, user_id, primary_homepage + Dynamic writeable type for Homepage removes: + can, content_metadata_id, created_at, homepage_sections, id, updated_at, user_id, primary_homepage - Attributes: - deleted_at: Date of homepage deletion - description: Description of the homepage - section_order: ids of the homepage sections in the order they should be displayed - title: Title of the homepage + Attributes: + deleted_at: Date of homepage deletion + description: Description of the homepage + section_order: ids of the homepage sections in the order they should be displayed + title: Title of the homepage """ deleted_at: Optional[datetime.datetime] = None @@ -10436,23 +10444,23 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteHomepageItem(model.Model): """ - Dynamic writeable type for HomepageItem removes: -can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, section_fetch_time, title, url, view_count - - Attributes: - custom_description: Custom description entered by the user, if present - custom_image_data_base64: (Write-Only) base64 encoded image data - custom_title: Custom title entered by the user, if present - custom_url: Custom url entered by the user, if present - dashboard_id: Dashboard to base this item on - homepage_section_id: Associated Homepage Section - look_id: Look to base this item on - lookml_dashboard_id: LookML Dashboard to base this item on - order: An arbitrary integer representing the sort order within the section - use_custom_description: Whether the custom description should be used instead of the content description, if the item is associated with content - use_custom_image: Whether the custom image should be used instead of the content image, if the item is associated with content - use_custom_title: Whether the custom title should be used instead of the content title, if the item is associated with content - use_custom_url: Whether the custom url should be used instead of the content url, if the item is associated with content + Dynamic writeable type for HomepageItem removes: + can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, section_fetch_time, title, url, view_count + + Attributes: + custom_description: Custom description entered by the user, if present + custom_image_data_base64: (Write-Only) base64 encoded image data + custom_title: Custom title entered by the user, if present + custom_url: Custom url entered by the user, if present + dashboard_id: Dashboard to base this item on + homepage_section_id: Associated Homepage Section + look_id: Look to base this item on + lookml_dashboard_id: LookML Dashboard to base this item on + order: An arbitrary integer representing the sort order within the section + use_custom_description: Whether the custom description should be used instead of the content description, if the item is associated with content + use_custom_image: Whether the custom image should be used instead of the content image, if the item is associated with content + use_custom_title: Whether the custom title should be used instead of the content title, if the item is associated with content + use_custom_url: Whether the custom url should be used instead of the content url, if the item is associated with content """ custom_description: Optional[str] = None @@ -10504,15 +10512,15 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteHomepageSection(model.Model): """ - Dynamic writeable type for HomepageSection removes: -can, created_at, detail_url, homepage_items, id, is_header, updated_at, visible_item_order + Dynamic writeable type for HomepageSection removes: + can, created_at, detail_url, homepage_items, id, is_header, updated_at, visible_item_order - Attributes: - deleted_at: Time at which this section was deleted. - homepage_id: Id reference to parent homepage - item_order: ids of the homepage items in the order they should be displayed - title: Name of row - description: Description of the content found in this section. + Attributes: + deleted_at: Time at which this section was deleted. + homepage_id: Id reference to parent homepage + item_order: ids of the homepage items in the order they should be displayed + title: Name of row + description: Description of the content found in this section. """ deleted_at: Optional[datetime.datetime] = None @@ -10540,13 +10548,13 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteIntegration(model.Model): """ - Dynamic writeable type for Integration removes: -can, id, integration_hub_id, label, description, supported_formats, supported_action_types, supported_formattings, supported_visualization_formattings, supported_download_settings, icon_url, uses_oauth, required_fields, delegate_oauth + Dynamic writeable type for Integration removes: + can, id, integration_hub_id, label, description, supported_formats, supported_action_types, supported_formattings, supported_visualization_formattings, supported_download_settings, icon_url, uses_oauth, required_fields, delegate_oauth - Attributes: - enabled: Whether the integration is available to users. - params: Array of params for the integration. - installed_delegate_oauth_targets: Whether the integration is available to users. + Attributes: + enabled: Whether the integration is available to users. + params: Array of params for the integration. + installed_delegate_oauth_targets: Whether the integration is available to users. """ enabled: Optional[bool] = None @@ -10568,12 +10576,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteIntegrationHub(model.Model): """ - Dynamic writeable type for IntegrationHub removes: -can, id, label, official, fetch_error_message, has_authorization_token, legal_agreement_signed, legal_agreement_required, legal_agreement_text + Dynamic writeable type for IntegrationHub removes: + can, id, label, official, fetch_error_message, has_authorization_token, legal_agreement_signed, legal_agreement_required, legal_agreement_text - Attributes: - url: URL of the hub. - authorization_token: (Write-Only) An authorization key that will be sent to the integration hub on every request. + Attributes: + url: URL of the hub. + authorization_token: (Write-Only) An authorization key that will be sent to the integration hub on every request. """ url: Optional[str] = None @@ -10589,11 +10597,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteInternalHelpResources(model.Model): """ - Dynamic writeable type for InternalHelpResources removes: -can + Dynamic writeable type for InternalHelpResources removes: + can - Attributes: - enabled: If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker + Attributes: + enabled: If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker """ enabled: Optional[bool] = None @@ -10605,12 +10613,12 @@ def __init__(self, *, enabled: Optional[bool] = None): @attr.s(auto_attribs=True, init=False) class WriteInternalHelpResourcesContent(model.Model): """ - Dynamic writeable type for InternalHelpResourcesContent removes: -can + Dynamic writeable type for InternalHelpResourcesContent removes: + can - Attributes: - organization_name: Text to display in the help menu item which will display the internal help resources - markdown_content: Content to be displayed in the internal help resources page/modal + Attributes: + organization_name: Text to display in the help menu item which will display the internal help resources + markdown_content: Content to be displayed in the internal help resources page/modal """ organization_name: Optional[str] = None @@ -10629,44 +10637,44 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteLDAPConfig(model.Model): """ - Dynamic writeable type for LDAPConfig removes: -can, default_new_user_groups, default_new_user_roles, groups, has_auth_password, modified_at, modified_by, user_attributes, url - - Attributes: - alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - auth_password: (Write-Only) Password for the LDAP account used to access the LDAP server - auth_requires_role: Users will not be allowed to login at all unless a role for them is found in LDAP if set to true - auth_username: Distinguished name of LDAP account used to access the LDAP server - connection_host: LDAP server hostname - connection_port: LDAP host port - connection_tls: Use Transport Layer Security - connection_tls_no_verify: Do not verify peer when using TLS - default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP - default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP - enabled: Enable/Disable LDAP authentication for the server - force_no_page: Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it. - groups_base_dn: Base dn for finding groups in LDAP searches - groups_finder_type: Identifier for a strategy for how Looker will search for groups in the LDAP server - groups_member_attribute: LDAP Group attribute that signifies the members of the groups. Most commonly 'member' - groups_objectclasses: Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches - groups_user_attribute: LDAP Group attribute that signifies the user in a group. Most commonly 'dn' - groups_with_role_ids: (Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids - merge_new_users_by_email: Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user. - set_roles_from_groups: Set user roles in Looker based on groups from LDAP - test_ldap_password: (Write-Only) Test LDAP user password. For ldap tests only. - test_ldap_user: (Write-Only) Test LDAP user login id. For ldap tests only. - user_attribute_map_email: Name of user record attributes used to indicate email address field - user_attribute_map_first_name: Name of user record attributes used to indicate first name - user_attribute_map_last_name: Name of user record attributes used to indicate last name - user_attribute_map_ldap_id: Name of user record attributes used to indicate unique record id - user_attributes_with_ids: (Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids - user_bind_base_dn: Distinguished name of LDAP node used as the base for user searches - user_custom_filter: (Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses. - user_id_attribute_names: Name(s) of user record attributes used for matching user login id (comma separated list) - user_objectclass: (Optional) Name of user record objectclass used for finding user during login id - allow_normal_group_membership: Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - allow_roles_from_normal_groups: LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. - allow_direct_roles: Allows roles to be directly assigned to LDAP auth'd users. + Dynamic writeable type for LDAPConfig removes: + can, default_new_user_groups, default_new_user_roles, groups, has_auth_password, modified_at, modified_by, user_attributes, url + + Attributes: + alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. + auth_password: (Write-Only) Password for the LDAP account used to access the LDAP server + auth_requires_role: Users will not be allowed to login at all unless a role for them is found in LDAP if set to true + auth_username: Distinguished name of LDAP account used to access the LDAP server + connection_host: LDAP server hostname + connection_port: LDAP host port + connection_tls: Use Transport Layer Security + connection_tls_no_verify: Do not verify peer when using TLS + default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP + default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP + enabled: Enable/Disable LDAP authentication for the server + force_no_page: Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it. + groups_base_dn: Base dn for finding groups in LDAP searches + groups_finder_type: Identifier for a strategy for how Looker will search for groups in the LDAP server + groups_member_attribute: LDAP Group attribute that signifies the members of the groups. Most commonly 'member' + groups_objectclasses: Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches + groups_user_attribute: LDAP Group attribute that signifies the user in a group. Most commonly 'dn' + groups_with_role_ids: (Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids + merge_new_users_by_email: Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user. + set_roles_from_groups: Set user roles in Looker based on groups from LDAP + test_ldap_password: (Write-Only) Test LDAP user password. For ldap tests only. + test_ldap_user: (Write-Only) Test LDAP user login id. For ldap tests only. + user_attribute_map_email: Name of user record attributes used to indicate email address field + user_attribute_map_first_name: Name of user record attributes used to indicate first name + user_attribute_map_last_name: Name of user record attributes used to indicate last name + user_attribute_map_ldap_id: Name of user record attributes used to indicate unique record id + user_attributes_with_ids: (Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids + user_bind_base_dn: Distinguished name of LDAP node used as the base for user searches + user_custom_filter: (Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses. + user_id_attribute_names: Name(s) of user record attributes used for matching user login id (comma separated list) + user_objectclass: (Optional) Name of user record objectclass used for finding user during login id + allow_normal_group_membership: Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. + allow_roles_from_normal_groups: LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. + allow_direct_roles: Allows roles to be directly assigned to LDAP auth'd users. """ alternate_email_login_allowed: Optional[bool] = None @@ -10781,11 +10789,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteLegacyFeature(model.Model): """ - Dynamic writeable type for LegacyFeature removes: -can, id, name, description, enabled, disallowed_as_of_version, disable_on_upgrade_to_version, end_of_life_version, documentation_url, approximate_disable_date, approximate_end_of_life_date, has_disabled_on_upgrade + Dynamic writeable type for LegacyFeature removes: + can, id, name, description, enabled, disallowed_as_of_version, disable_on_upgrade_to_version, end_of_life_version, documentation_url, approximate_disable_date, approximate_end_of_life_date, has_disabled_on_upgrade - Attributes: - enabled_locally: Whether this feature has been enabled by a user + Attributes: + enabled_locally: Whether this feature has been enabled by a user """ enabled_locally: Optional[bool] = None @@ -10797,14 +10805,14 @@ def __init__(self, *, enabled_locally: Optional[bool] = None): @attr.s(auto_attribs=True, init=False) class WriteLookmlModel(model.Model): """ - Dynamic writeable type for LookmlModel removes: -can, explores, has_content, label + Dynamic writeable type for LookmlModel removes: + can, explores, has_content, label - Attributes: - allowed_db_connection_names: Array of names of connections this model is allowed to use - name: Name of the model. Also used as the unique identifier - project_name: Name of project containing the model - unlimited_db_connections: Is this model allowed to use all current and future connections + Attributes: + allowed_db_connection_names: Array of names of connections this model is allowed to use + name: Name of the model. Also used as the unique identifier + project_name: Name of project containing the model + unlimited_db_connections: Is this model allowed to use all current and future connections """ allowed_db_connection_names: Optional[Sequence[str]] = None @@ -10829,25 +10837,25 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteLookWithQuery(model.Model): """ - Dynamic writeable type for LookWithQuery removes: -can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, user, url - - Attributes: - title: Look Title - deleted: Whether or not a look is 'soft' deleted. - description: Description - is_run_on_load: auto-run query when Look viewed - public: Is Public - query_id: Query Id - folder: Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - folder_id: Folder Id - user_id: User Id - space_id: Space Id - space: Dynamic writeable type for SpaceBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - query: Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations + Dynamic writeable type for LookWithQuery removes: + can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, user, url + + Attributes: + title: Look Title + deleted: Whether or not a look is 'soft' deleted. + description: Description + is_run_on_load: auto-run query when Look viewed + public: Is Public + query_id: Query Id + folder: Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + folder_id: Folder Id + user_id: User Id + space_id: Space Id + space: Dynamic writeable type for SpaceBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + query: Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations """ title: Optional[str] = None @@ -10896,17 +10904,17 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteMergeQuery(model.Model): """ - Dynamic writeable type for MergeQuery removes: -can, id, result_maker_id + Dynamic writeable type for MergeQuery removes: + can, id, result_maker_id - Attributes: - column_limit: Column Limit - dynamic_fields: Dynamic Fields - pivots: Pivots - sorts: Sorts - source_queries: Source Queries defining the results to be merged. - total: Total - vis_config: Visualization Config + Attributes: + column_limit: Column Limit + dynamic_fields: Dynamic Fields + pivots: Pivots + sorts: Sorts + source_queries: Source Queries defining the results to be merged. + total: Total + vis_config: Visualization Config """ column_limit: Optional[str] = None @@ -10940,12 +10948,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteModelSet(model.Model): """ - Dynamic writeable type for ModelSet removes: -can, all_access, built_in, id, url + Dynamic writeable type for ModelSet removes: + can, all_access, built_in, id, url - Attributes: - models: - name: Name of ModelSet + Attributes: + models: + name: Name of ModelSet """ models: Optional[Sequence[str]] = None @@ -10961,34 +10969,34 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteOIDCConfig(model.Model): """ - Dynamic writeable type for OIDCConfig removes: -can, default_new_user_groups, default_new_user_roles, groups, modified_at, modified_by, test_slug, user_attributes, url - - Attributes: - alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - audience: OpenID Provider Audience - auth_requires_role: Users will not be allowed to login at all unless a role for them is found in OIDC if set to true - authorization_endpoint: OpenID Provider Authorization Url - default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC - default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC - enabled: Enable/Disable OIDC authentication for the server - groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - groups_with_role_ids: (Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids - identifier: Relying Party Identifier (provided by OpenID Provider) - issuer: OpenID Provider Issuer - new_user_migration_types: Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - scopes: Array of scopes to request. - secret: (Write-Only) Relying Party Secret (provided by OpenID Provider) - set_roles_from_groups: Set user roles in Looker based on groups from OIDC - token_endpoint: OpenID Provider Token Url - user_attribute_map_email: Name of user record attributes used to indicate email address field - user_attribute_map_first_name: Name of user record attributes used to indicate first name - user_attribute_map_last_name: Name of user record attributes used to indicate last name - user_attributes_with_ids: (Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids - userinfo_endpoint: OpenID Provider User Information Url - allow_normal_group_membership: Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - allow_roles_from_normal_groups: OIDC auth'd users will inherit roles from non-reflected Looker groups. - allow_direct_roles: Allows roles to be directly assigned to OIDC auth'd users. + Dynamic writeable type for OIDCConfig removes: + can, default_new_user_groups, default_new_user_roles, groups, modified_at, modified_by, test_slug, user_attributes, url + + Attributes: + alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. + audience: OpenID Provider Audience + auth_requires_role: Users will not be allowed to login at all unless a role for them is found in OIDC if set to true + authorization_endpoint: OpenID Provider Authorization Url + default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC + default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC + enabled: Enable/Disable OIDC authentication for the server + groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' + groups_with_role_ids: (Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids + identifier: Relying Party Identifier (provided by OpenID Provider) + issuer: OpenID Provider Issuer + new_user_migration_types: Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' + scopes: Array of scopes to request. + secret: (Write-Only) Relying Party Secret (provided by OpenID Provider) + set_roles_from_groups: Set user roles in Looker based on groups from OIDC + token_endpoint: OpenID Provider Token Url + user_attribute_map_email: Name of user record attributes used to indicate email address field + user_attribute_map_first_name: Name of user record attributes used to indicate first name + user_attribute_map_last_name: Name of user record attributes used to indicate last name + user_attributes_with_ids: (Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids + userinfo_endpoint: OpenID Provider User Information Url + allow_normal_group_membership: Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. + allow_roles_from_normal_groups: OIDC auth'd users will inherit roles from non-reflected Looker groups. + allow_direct_roles: Allows roles to be directly assigned to OIDC auth'd users. """ alternate_email_login_allowed: Optional[bool] = None @@ -11073,14 +11081,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WritePasswordConfig(model.Model): """ - Dynamic writeable type for PasswordConfig removes: -can + Dynamic writeable type for PasswordConfig removes: + can - Attributes: - min_length: Minimum number of characters required for a new password. Must be between 7 and 100 - require_numeric: Require at least one numeric character - require_upperlower: Require at least one uppercase and one lowercase letter - require_special: Require at least one special character + Attributes: + min_length: Minimum number of characters required for a new password. Must be between 7 and 100 + require_numeric: Require at least one numeric character + require_upperlower: Require at least one uppercase and one lowercase letter + require_special: Require at least one special character """ min_length: Optional[int] = None @@ -11105,12 +11113,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WritePermissionSet(model.Model): """ - Dynamic writeable type for PermissionSet removes: -can, all_access, built_in, id, url + Dynamic writeable type for PermissionSet removes: + can, all_access, built_in, id, url - Attributes: - name: Name of PermissionSet - permissions: + Attributes: + name: Name of PermissionSet + permissions: """ name: Optional[str] = None @@ -11126,27 +11134,27 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteProject(model.Model): """ - Dynamic writeable type for Project removes: -can, id, uses_git, is_example - - Attributes: - name: Project display name - git_remote_url: Git remote repository url - git_username: Git username for HTTPS authentication. (For production only, if using user attributes.) - git_password: (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) - git_production_branch_name: Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. - use_git_cookie_auth: If true, the project uses a git cookie for authentication. - git_username_user_attribute: User attribute name for username in per-user HTTPS authentication. - git_password_user_attribute: User attribute name for password in per-user HTTPS authentication. - git_service_name: Name of the git service provider - git_application_server_http_port: Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) - git_application_server_http_scheme: Scheme that is running on application server (for PRs, file browsing, etc.) - deploy_secret: (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. - unset_deploy_secret: (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. - pull_request_mode: The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". - validation_required: Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository - git_release_mgmt_enabled: If true, advanced git release management is enabled for this project - allow_warnings: Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). + Dynamic writeable type for Project removes: + can, id, uses_git, is_example + + Attributes: + name: Project display name + git_remote_url: Git remote repository url + git_username: Git username for HTTPS authentication. (For production only, if using user attributes.) + git_password: (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) + git_production_branch_name: Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. + use_git_cookie_auth: If true, the project uses a git cookie for authentication. + git_username_user_attribute: User attribute name for username in per-user HTTPS authentication. + git_password_user_attribute: User attribute name for password in per-user HTTPS authentication. + git_service_name: Name of the git service provider + git_application_server_http_port: Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) + git_application_server_http_scheme: Scheme that is running on application server (for PRs, file browsing, etc.) + deploy_secret: (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. + unset_deploy_secret: (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. + pull_request_mode: The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". + validation_required: Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository + git_release_mgmt_enabled: If true, advanced git release management is enabled for this project + allow_warnings: Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). """ name: Optional[str] = None @@ -11210,30 +11218,30 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteQuery(model.Model): """ - Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations - - Attributes: - model: Model - view: Explore Name - fields: Fields - pivots: Pivots - fill_fields: Fill Fields - filters: Filters - filter_expression: Filter Expression - sorts: Sorting for the query results. Use the format `["view.field", ...]` to sort on fields in ascending order. Use the format `["view.field desc", ...]` to sort on fields in descending order. Use `["__UNSORTED__"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort. - limit: Limit - column_limit: Column Limit - total: Total - row_total: Raw Total - subtotals: Fields on which to run subtotals - vis_config: Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - filter_config: The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over "filters". When creating a query or modifying an existing query, "filter_config" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque. - visible_ui_sections: Visible UI Sections - dynamic_fields: Dynamic Fields - client_id: Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. - query_timezone: Query Timezone - runtime: (DEPRECATED) Runtime (Deprecated) + Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations + + Attributes: + model: Model + view: Explore Name + fields: Fields + pivots: Pivots + fill_fields: Fill Fields + filters: Filters + filter_expression: Filter Expression + sorts: Sorting for the query results. Use the format `["view.field", ...]` to sort on fields in ascending order. Use the format `["view.field desc", ...]` to sort on fields in descending order. Use `["__UNSORTED__"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort. + limit: Limit + column_limit: Column Limit + total: Total + row_total: Raw Total + subtotals: Fields on which to run subtotals + vis_config: Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. + filter_config: The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over "filters". When creating a query or modifying an existing query, "filter_config" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque. + visible_ui_sections: Visible UI Sections + dynamic_fields: Dynamic Fields + client_id: Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. + query_timezone: Query Timezone + runtime: (DEPRECATED) Runtime (Deprecated) """ model: str @@ -11306,13 +11314,13 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteRepositoryCredential(model.Model): """ - Dynamic writeable type for RepositoryCredential removes: -can, id, root_project_id, remote_url, is_configured + Dynamic writeable type for RepositoryCredential removes: + can, id, root_project_id, remote_url, is_configured - Attributes: - git_username: Git username for HTTPS authentication. - git_password: (Write-Only) Git password for HTTPS authentication. - ssh_public_key: Public deploy key for SSH authentication. + Attributes: + git_username: Git username for HTTPS authentication. + git_password: (Write-Only) Git password for HTTPS authentication. + ssh_public_key: Public deploy key for SSH authentication. """ git_username: Optional[str] = None @@ -11334,12 +11342,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteResultMakerWithIdVisConfigAndDynamicFields(model.Model): """ - Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: -id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config + Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: + id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config - Attributes: - query: Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations + Attributes: + query: Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations """ query: Optional["WriteQuery"] = None @@ -11351,17 +11359,17 @@ def __init__(self, *, query: Optional["WriteQuery"] = None): @attr.s(auto_attribs=True, init=False) class WriteRole(model.Model): """ - Dynamic writeable type for Role removes: -can, id, url, users_url + Dynamic writeable type for Role removes: + can, id, url, users_url - Attributes: - name: Name of Role - permission_set: Dynamic writeable type for PermissionSet removes: -can, all_access, built_in, id, url - permission_set_id: (Write-Only) Id of permission set - model_set: Dynamic writeable type for ModelSet removes: -can, all_access, built_in, id, url - model_set_id: (Write-Only) Id of model set + Attributes: + name: Name of Role + permission_set: Dynamic writeable type for PermissionSet removes: + can, all_access, built_in, id, url + permission_set_id: (Write-Only) Id of permission set + model_set: Dynamic writeable type for ModelSet removes: + can, all_access, built_in, id, url + model_set_id: (Write-Only) Id of model set """ name: Optional[str] = None @@ -11389,34 +11397,34 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteSamlConfig(model.Model): """ - Dynamic writeable type for SamlConfig removes: -can, test_slug, modified_at, modified_by, default_new_user_roles, default_new_user_groups, groups, user_attributes, url - - Attributes: - enabled: Enable/Disable Saml authentication for the server - idp_cert: Identity Provider Certificate (provided by IdP) - idp_url: Identity Provider Url (provided by IdP) - idp_issuer: Identity Provider Issuer (provided by IdP) - idp_audience: Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP. - allowed_clock_drift: Count of seconds of clock drift to allow when validating timestamps of assertions. - user_attribute_map_email: Name of user record attributes used to indicate email address field - user_attribute_map_first_name: Name of user record attributes used to indicate first name - user_attribute_map_last_name: Name of user record attributes used to indicate last name - new_user_migration_types: Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml - default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml - set_roles_from_groups: Set user roles in Looker based on groups from Saml - groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - groups_with_role_ids: (Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids - auth_requires_role: Users will not be allowed to login at all unless a role for them is found in Saml if set to true - user_attributes_with_ids: (Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids - groups_finder_type: Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes'] - groups_member_value: Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes' - bypass_login_page: Bypass the login page when user authentication is required. Redirect to IdP immediately instead. - allow_normal_group_membership: Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - allow_roles_from_normal_groups: SAML auth'd users will inherit roles from non-reflected Looker groups. - allow_direct_roles: Allows roles to be directly assigned to SAML auth'd users. + Dynamic writeable type for SamlConfig removes: + can, test_slug, modified_at, modified_by, default_new_user_roles, default_new_user_groups, groups, user_attributes, url + + Attributes: + enabled: Enable/Disable Saml authentication for the server + idp_cert: Identity Provider Certificate (provided by IdP) + idp_url: Identity Provider Url (provided by IdP) + idp_issuer: Identity Provider Issuer (provided by IdP) + idp_audience: Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP. + allowed_clock_drift: Count of seconds of clock drift to allow when validating timestamps of assertions. + user_attribute_map_email: Name of user record attributes used to indicate email address field + user_attribute_map_first_name: Name of user record attributes used to indicate first name + user_attribute_map_last_name: Name of user record attributes used to indicate last name + new_user_migration_types: Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' + alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. + default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml + default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml + set_roles_from_groups: Set user roles in Looker based on groups from Saml + groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' + groups_with_role_ids: (Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids + auth_requires_role: Users will not be allowed to login at all unless a role for them is found in Saml if set to true + user_attributes_with_ids: (Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids + groups_finder_type: Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes'] + groups_member_value: Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes' + bypass_login_page: Bypass the login page when user authentication is required. Redirect to IdP immediately instead. + allow_normal_group_membership: Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. + allow_roles_from_normal_groups: SAML auth'd users will inherit roles from non-reflected Looker groups. + allow_direct_roles: Allows roles to be directly assigned to SAML auth'd users. """ enabled: Optional[bool] = None @@ -11501,36 +11509,36 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteScheduledPlan(model.Model): """ - Dynamic writeable type for ScheduledPlan removes: -id, created_at, updated_at, title, user, next_run_at, last_run_at, can - - Attributes: - name: Name of this scheduled plan - user_id: User Id which owns this scheduled plan - run_as_recipient: Whether schedule is run as recipient (only applicable for email recipients) - enabled: Whether the ScheduledPlan is enabled - look_id: Id of a look - dashboard_id: Id of a dashboard - lookml_dashboard_id: Id of a LookML dashboard - filters_string: Query string to run look or dashboard with - dashboard_filters: (DEPRECATED) Alias for filters_string field - require_results: Delivery should occur if running the dashboard or look returns results - require_no_results: Delivery should occur if the dashboard look does not return results - require_change: Delivery should occur if data have changed since the last run - send_all_results: Will run an unlimited query and send all results. - crontab: Vixie-Style crontab specification when to run - datagroup: Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string) - timezone: Timezone for interpreting the specified crontab (default is Looker instance timezone) - query_id: Query id - scheduled_plan_destination: Scheduled plan destinations - run_once: Whether the plan in question should only be run once (usually for testing) - include_links: Whether links back to Looker should be included in this ScheduledPlan - pdf_paper_size: The size of paper the PDF should be formatted to fit. Valid values are: "letter", "legal", "tabloid", "a0", "a1", "a2", "a3", "a4", "a5". - pdf_landscape: Whether the PDF should be formatted for landscape orientation - embed: Whether this schedule is in an embed context or not - color_theme: Color scheme of the dashboard if applicable - long_tables: Whether or not to expand table vis to full length - inline_table_width: The pixel width at which we render the inline table visualizations + Dynamic writeable type for ScheduledPlan removes: + id, created_at, updated_at, title, user, next_run_at, last_run_at, can + + Attributes: + name: Name of this scheduled plan + user_id: User Id which owns this scheduled plan + run_as_recipient: Whether schedule is run as recipient (only applicable for email recipients) + enabled: Whether the ScheduledPlan is enabled + look_id: Id of a look + dashboard_id: Id of a dashboard + lookml_dashboard_id: Id of a LookML dashboard + filters_string: Query string to run look or dashboard with + dashboard_filters: (DEPRECATED) Alias for filters_string field + require_results: Delivery should occur if running the dashboard or look returns results + require_no_results: Delivery should occur if the dashboard look does not return results + require_change: Delivery should occur if data have changed since the last run + send_all_results: Will run an unlimited query and send all results. + crontab: Vixie-Style crontab specification when to run + datagroup: Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string) + timezone: Timezone for interpreting the specified crontab (default is Looker instance timezone) + query_id: Query id + scheduled_plan_destination: Scheduled plan destinations + run_once: Whether the plan in question should only be run once (usually for testing) + include_links: Whether links back to Looker should be included in this ScheduledPlan + pdf_paper_size: The size of paper the PDF should be formatted to fit. Valid values are: "letter", "legal", "tabloid", "a0", "a1", "a2", "a3", "a4", "a5". + pdf_landscape: Whether the PDF should be formatted for landscape orientation + embed: Whether this schedule is in an embed context or not + color_theme: Color scheme of the dashboard if applicable + long_tables: Whether or not to expand table vis to full length + inline_table_width: The pixel width at which we render the inline table visualizations """ name: Optional[str] = None @@ -11623,15 +11631,15 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteSessionConfig(model.Model): """ - Dynamic writeable type for SessionConfig removes: -can + Dynamic writeable type for SessionConfig removes: + can - Attributes: - allow_persistent_sessions: Allow users to have persistent sessions when they login - session_minutes: Number of minutes for user sessions. Must be between 5 and 43200 - unlimited_sessions_per_user: Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time). - use_inactivity_based_logout: Enforce session logout for sessions that are inactive for 15 minutes. - track_session_location: Track location of session when user logs in. + Attributes: + allow_persistent_sessions: Allow users to have persistent sessions when they login + session_minutes: Number of minutes for user sessions. Must be between 5 and 43200 + unlimited_sessions_per_user: Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time). + use_inactivity_based_logout: Enforce session logout for sessions that are inactive for 15 minutes. + track_session_location: Track location of session when user logs in. """ allow_persistent_sessions: Optional[bool] = None @@ -11659,12 +11667,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteSpaceBase(model.Model): """ - Dynamic writeable type for SpaceBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + Dynamic writeable type for SpaceBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - Attributes: - name: Unique Name - parent_id: Id of Parent. If the parent id is null, this is a root-level entry + Attributes: + name: Unique Name + parent_id: Id of Parent. If the parent id is null, this is a root-level entry """ name: str @@ -11678,14 +11686,14 @@ def __init__(self, *, name: str, parent_id: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteTheme(model.Model): """ - Dynamic writeable type for Theme removes: -can, id + Dynamic writeable type for Theme removes: + can, id - Attributes: - begin_at: Timestamp for when this theme becomes active. Null=always - end_at: Timestamp for when this theme expires. Null=never - name: Name of theme. Can only be alphanumeric and underscores. - settings: + Attributes: + begin_at: Timestamp for when this theme becomes active. Null=always + end_at: Timestamp for when this theme expires. Null=never + name: Name of theme. Can only be alphanumeric and underscores. + settings: """ begin_at: Optional[datetime.datetime] = None @@ -11710,20 +11718,20 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteUser(model.Model): """ - Dynamic writeable type for User removes: -can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_space_id, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, url + Dynamic writeable type for User removes: + can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_space_id, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, url - Attributes: - credentials_email: Dynamic writeable type for CredentialsEmail removes: -can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url - first_name: First name - home_space_id: ID string for user's home space - home_folder_id: ID string for user's home folder - is_disabled: Account has been disabled - last_name: Last name - locale: User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example. - models_dir_validated: User's dev workspace has been checked for presence of applicable production projects - ui_state: Per user dictionary of undocumented state information owned by the Looker UI. + Attributes: + credentials_email: Dynamic writeable type for CredentialsEmail removes: + can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url + first_name: First name + home_space_id: ID string for user's home space + home_folder_id: ID string for user's home folder + is_disabled: Account has been disabled + last_name: Last name + locale: User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example. + models_dir_validated: User's dev workspace has been checked for presence of applicable production projects + ui_state: Per user dictionary of undocumented state information owned by the Looker UI. """ credentials_email: Optional["WriteCredentialsEmail"] = None @@ -11763,18 +11771,18 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteUserAttribute(model.Model): """ - Dynamic writeable type for UserAttribute removes: -can, id, is_system, is_permanent + Dynamic writeable type for UserAttribute removes: + can, id, is_system, is_permanent - Attributes: - name: Name of user attribute - label: Human-friendly label for user attribute - type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") - default_value: Default value for when no value is set on the user - value_is_hidden: If true, users will not be able to view values of this attribute - user_can_view: Non-admin users can see the values of their attributes and use them in filters - user_can_edit: Users can change the value of this attribute for themselves - hidden_value_domain_whitelist: Destinations to which a hidden attribute may be sent. Once set, cannot be edited. + Attributes: + name: Name of user attribute + label: Human-friendly label for user attribute + type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + default_value: Default value for when no value is set on the user + value_is_hidden: If true, users will not be able to view values of this attribute + user_can_view: Non-admin users can see the values of their attributes and use them in filters + user_can_edit: Users can change the value of this attribute for themselves + hidden_value_domain_whitelist: Destinations to which a hidden attribute may be sent. Once set, cannot be edited. """ name: Optional[str] = None @@ -11811,11 +11819,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteUserAttributeWithValue(model.Model): """ - Dynamic writeable type for UserAttributeWithValue removes: -can, name, label, rank, user_id, user_can_edit, value_is_hidden, user_attribute_id, source, hidden_value_domain_whitelist + Dynamic writeable type for UserAttributeWithValue removes: + can, name, label, rank, user_id, user_can_edit, value_is_hidden, user_attribute_id, source, hidden_value_domain_whitelist - Attributes: - value: Value of attribute for user + Attributes: + value: Value of attribute for user """ value: Optional[str] = None @@ -11827,23 +11835,23 @@ def __init__(self, *, value: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteWhitelabelConfiguration(model.Model): """ - Dynamic writeable type for WhitelabelConfiguration removes: -id, logo_url, favicon_url - - Attributes: - logo_file: Customer logo image. Expected base64 encoded data (write-only) - favicon_file: Custom favicon image. Expected base64 encoded data (write-only) - default_title: Default page title - show_help_menu: Boolean to toggle showing help menus - show_docs: Boolean to toggle showing docs - show_email_sub_options: Boolean to toggle showing email subscription options. - allow_looker_mentions: Boolean to toggle mentions of Looker in emails - allow_looker_links: Boolean to toggle links to Looker in emails - custom_welcome_email_advanced: Allow subject line and email heading customization in customized emails” - setup_mentions: Remove the word Looker from appearing in the account setup page - alerts_logo: Remove Looker logo from Alerts - alerts_links: Remove Looker links from Alerts - folders_mentions: Remove Looker mentions in home folder page when you don’t have any items saved + Dynamic writeable type for WhitelabelConfiguration removes: + id, logo_url, favicon_url + + Attributes: + logo_file: Customer logo image. Expected base64 encoded data (write-only) + favicon_file: Custom favicon image. Expected base64 encoded data (write-only) + default_title: Default page title + show_help_menu: Boolean to toggle showing help menus + show_docs: Boolean to toggle showing docs + show_email_sub_options: Boolean to toggle showing email subscription options. + allow_looker_mentions: Boolean to toggle mentions of Looker in emails + allow_looker_links: Boolean to toggle links to Looker in emails + custom_welcome_email_advanced: Allow subject line and email heading customization in customized emails” + setup_mentions: Remove the word Looker from appearing in the account setup page + alerts_logo: Remove Looker logo from Alerts + alerts_links: Remove Looker links from Alerts + folders_mentions: Remove Looker mentions in home folder page when you don’t have any items saved """ logo_file: Optional[str] = None diff --git a/python/looker_sdk/sdk/api40/methods.py b/python/looker_sdk/sdk/api40/methods.py index ef069b27d..625043b0a 100644 --- a/python/looker_sdk/sdk/api40/methods.py +++ b/python/looker_sdk/sdk/api40/methods.py @@ -21,7 +21,7 @@ # SOFTWARE. # -# 423 API methods +# 425 API methods # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -47,6 +47,8 @@ def search_alerts( limit: Optional[int] = None, # (Optional) Number of results to skip before returning any (used with `limit`). offset: Optional[int] = None, + # (Optional) Dimension by which to order the results(`dashboard` | `owner`) + group_by: Optional[str] = None, # (Optional) Requested fields. fields: Optional[str] = None, # (Optional) Filter on returning only enabled or disabled alerts. @@ -72,6 +74,7 @@ def search_alerts( query_params={ "limit": limit, "offset": offset, + "group_by": group_by, "fields": fields, "disabled": disabled, "frequency": frequency, @@ -227,6 +230,29 @@ def create_alert( ) return response + # ### Enqueue an Alert by ID + # + # POST /alerts/{alert_id}/enqueue -> None + def enqueue_alert( + self, + # ID of an alert + alert_id: int, + # Whether to enqueue an alert again if its already running. + force: Optional[bool] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> None: + """Enqueue an alert""" + response = cast( + None, + self.post( + path=f"/alerts/{alert_id}/enqueue", + structure=None, + query_params={"force": force}, + transport_options=transport_options, + ), + ) + return response + # endregion # region ApiAuth: API Authentication @@ -326,7 +352,8 @@ def login_user( # # DELETE /logout -> str def logout( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> str: """Logout""" response = cast( @@ -457,7 +484,8 @@ def create_embed_url_as_me( # # GET /ldap_config -> models.LDAPConfig def ldap_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.LDAPConfig: """Get LDAP Configuration""" response = cast( @@ -876,7 +904,8 @@ def deactivate_app_user( # # GET /oidc_config -> models.OIDCConfig def oidc_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.OIDCConfig: """Get OIDC Configuration""" response = cast( @@ -983,7 +1012,8 @@ def create_oidc_test_config( # # GET /password_config -> models.PasswordConfig def password_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.PasswordConfig: """Get Password Config""" response = cast( @@ -1020,7 +1050,8 @@ def update_password_config( # # PUT /password_config/force_password_reset_at_next_login_for_all_users -> str def force_password_reset_at_next_login_for_all_users( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> str: """Force password reset""" response = cast( @@ -1048,7 +1079,8 @@ def force_password_reset_at_next_login_for_all_users( # # GET /saml_config -> models.SamlConfig def saml_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SamlConfig: """Get SAML Configuration""" response = cast( @@ -1155,7 +1187,9 @@ def create_saml_test_config( # # POST /parse_saml_idp_metadata -> models.SamlMetadataParseResult def parse_saml_idp_metadata( - self, body: str, transport_options: Optional[transport.TransportOptions] = None, + self, + body: str, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SamlMetadataParseResult: """Parse SAML IdP XML""" response = cast( @@ -1175,7 +1209,9 @@ def parse_saml_idp_metadata( # # POST /fetch_and_parse_saml_idp_metadata -> models.SamlMetadataParseResult def fetch_and_parse_saml_idp_metadata( - self, body: str, transport_options: Optional[transport.TransportOptions] = None, + self, + body: str, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SamlMetadataParseResult: """Parse SAML IdP Url""" response = cast( @@ -1193,7 +1229,8 @@ def fetch_and_parse_saml_idp_metadata( # # GET /session_config -> models.SessionConfig def session_config( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SessionConfig: """Get Session Config""" response = cast( @@ -1865,7 +1902,8 @@ def color_collections_standard( # # GET /color_collections/default -> models.ColorCollection def default_color_collection( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.ColorCollection: """Get Default Color Collection""" response = cast( @@ -2095,7 +2133,8 @@ def delete_command( # # GET /cloud_storage -> models.BackupConfiguration def cloud_storage_configuration( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.BackupConfiguration: """Get Cloud Storage""" response = cast( @@ -2132,7 +2171,8 @@ def update_cloud_storage_configuration( # # GET /custom_welcome_email -> models.CustomWelcomeEmail def custom_welcome_email( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.CustomWelcomeEmail: """Get Custom Welcome Email""" response = cast( @@ -2150,7 +2190,7 @@ def custom_welcome_email( # PATCH /custom_welcome_email -> models.CustomWelcomeEmail def update_custom_welcome_email( self, - body: models.WriteCustomWelcomeEmail, + body: models.CustomWelcomeEmail, # If true a test email with the content from the request will be sent to the current user after saving send_test_welcome_email: Optional[bool] = None, transport_options: Optional[transport.TransportOptions] = None, @@ -2176,7 +2216,7 @@ def update_custom_welcome_email_test( body: models.WelcomeEmailTest, transport_options: Optional[transport.TransportOptions] = None, ) -> models.WelcomeEmailTest: - """Send a test welcome email to the currently logged in user with the supplied content """ + """Send a test welcome email to the currently logged in user with the supplied content""" response = cast( models.WelcomeEmailTest, self.put( @@ -2192,7 +2232,8 @@ def update_custom_welcome_email_test( # # GET /digest_emails_enabled -> models.DigestEmails def digest_emails_enabled( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.DigestEmails: """Get Digest_emails""" response = cast( @@ -2231,7 +2272,8 @@ def update_digest_emails_enabled( # # POST /digest_email_send -> models.DigestEmailSend def create_digest_email_send( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.DigestEmailSend: """Deliver digest email contents""" response = cast( @@ -2248,7 +2290,8 @@ def create_digest_email_send( # # GET /internal_help_resources_content -> models.InternalHelpResourcesContent def internal_help_resources_content( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.InternalHelpResourcesContent: """Get Internal Help Resources Content""" response = cast( @@ -2285,7 +2328,8 @@ def update_internal_help_resources_content( # # GET /internal_help_resources_enabled -> models.InternalHelpResources def internal_help_resources( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.InternalHelpResources: """Get Internal Help Resources""" response = cast( @@ -2322,7 +2366,8 @@ def update_internal_help_resources( # # GET /legacy_features -> Sequence[models.LegacyFeature] def all_legacy_features( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.LegacyFeature]: """Get All Legacy Features""" response = cast( @@ -2383,7 +2428,8 @@ def update_legacy_feature( # # GET /locales -> Sequence[models.Locale] def all_locales( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Locale]: """Get All Locales""" response = cast( @@ -2400,7 +2446,8 @@ def all_locales( # # GET /mobile/settings -> models.MobileSettings def mobile_settings( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.MobileSettings: """Get Mobile_Settings""" response = cast( @@ -2420,6 +2467,7 @@ def mobile_settings( # - marketplace_auto_install_enabled # - marketplace_enabled # - whitelabel_configuration + # - custom_welcome_email # # GET /setting -> models.Setting def get_setting( @@ -2447,6 +2495,7 @@ def get_setting( # - marketplace_auto_install_enabled # - marketplace_enabled # - whitelabel_configuration + # - custom_welcome_email # # See the `Setting` type for more information on the specific values that can be configured. # @@ -2475,7 +2524,8 @@ def set_setting( # # GET /timezones -> Sequence[models.Timezone] def all_timezones( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Timezone]: """Get All Timezones""" response = cast( @@ -3123,7 +3173,8 @@ def test_ssh_tunnel( # # GET /ssh_public_key -> models.SshPublicKey def ssh_public_key( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.SshPublicKey: """Get SSH Public Key""" response = cast( @@ -3994,31 +4045,28 @@ def dashboard_lookml( ) return response - # ### Copy an existing dashboard - # - # Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + # ### Move an existing dashboard # - # `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - # `folder_id` will default to the existing folder. + # Moves a dashboard to a specified folder, and returns the moved dashboard. # - # If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - # or '(copy <# of copies>)' appended. + # `dashboard_id` and `folder_id` are required. + # `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. # - # POST /dashboards/{dashboard_id}/copy -> models.Dashboard - def copy_dashboard( + # PATCH /dashboards/{dashboard_id}/move -> models.Dashboard + def move_dashboard( self, - # Dashboard id to copy. + # Dashboard id to move. dashboard_id: str, - # Folder id to copy to. - folder_id: Optional[str] = None, + # Folder id to move to. + folder_id: str, transport_options: Optional[transport.TransportOptions] = None, ) -> models.Dashboard: - """Copy Dashboard""" + """Move Dashboard""" dashboard_id = self.encode_path_param(dashboard_id) response = cast( models.Dashboard, - self.post( - path=f"/dashboards/{dashboard_id}/copy", + self.patch( + path=f"/dashboards/{dashboard_id}/move", structure=models.Dashboard, query_params={"folder_id": folder_id}, transport_options=transport_options, @@ -4026,28 +4074,31 @@ def copy_dashboard( ) return response - # ### Move an existing dashboard + # ### Copy an existing dashboard # - # Moves a dashboard to a specified folder, and returns the moved dashboard. + # Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. # - # `dashboard_id` and `folder_id` are required. - # `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + # `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + # `folder_id` will default to the existing folder. # - # PATCH /dashboards/{dashboard_id}/move -> models.Dashboard - def move_dashboard( + # If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + # or '(copy <# of copies>)' appended. + # + # POST /dashboards/{dashboard_id}/copy -> models.Dashboard + def copy_dashboard( self, - # Dashboard id to move. + # Dashboard id to copy. dashboard_id: str, - # Folder id to move to. - folder_id: str, + # Folder id to copy to. + folder_id: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, ) -> models.Dashboard: - """Move Dashboard""" + """Copy Dashboard""" dashboard_id = self.encode_path_param(dashboard_id) response = cast( models.Dashboard, - self.patch( - path=f"/dashboards/{dashboard_id}/move", + self.post( + path=f"/dashboards/{dashboard_id}/copy", structure=models.Dashboard, query_params={"folder_id": folder_id}, transport_options=transport_options, @@ -4603,7 +4654,8 @@ def fetch_remote_data_action_form( # # GET /datagroups -> Sequence[models.Datagroup] def all_datagroups( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Datagroup]: """Get All Datagroups""" response = cast( @@ -8182,7 +8234,8 @@ def create_merge_query( # # GET /running_queries -> Sequence[models.RunningQueries] def all_running_queries( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.RunningQueries]: """Get All Running Queries""" response = cast( @@ -8655,7 +8708,8 @@ def create_model_set( # # GET /permissions -> Sequence[models.Permission] def all_permissions( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Permission]: """Get All Permissions""" response = cast( @@ -9692,7 +9746,8 @@ def scheduled_plan_run_once_by_id( # # GET /session -> models.ApiSession def session( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> models.ApiSession: """Get Session""" response = cast( @@ -11391,6 +11446,36 @@ def send_user_credentials_email_password_reset( ) return response + # ### Change a disabled user's email addresses + # + # Allows the admin to change the email addresses for all the user's + # associated credentials. Will overwrite all associated email addresses with + # the value supplied in the 'email' body param. + # The user's 'is_disabled' status must be true. + # + # POST /users/{user_id}/update_emails -> models.User + def wipeout_user_emails( + self, + # Id of user + user_id: int, + body: models.UserEmailOnly, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> models.User: + """Wipeout User Emails""" + response = cast( + models.User, + self.post( + path=f"/users/{user_id}/update_emails", + structure=models.User, + query_params={"fields": fields}, + body=body, + transport_options=transport_options, + ), + ) + return response + # Create an embed user from an external user ID # # POST /users/embed_user -> models.UserPublic @@ -11618,7 +11703,8 @@ def set_user_attribute_group_values( # # GET /workspaces -> Sequence[models.Workspace] def all_workspaces( - self, transport_options: Optional[transport.TransportOptions] = None, + self, + transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[models.Workspace]: """Get All Workspaces""" response = cast( diff --git a/python/looker_sdk/sdk/api40/models.py b/python/looker_sdk/sdk/api40/models.py index e16aed49c..9cfa6ce90 100644 --- a/python/looker_sdk/sdk/api40/models.py +++ b/python/looker_sdk/sdk/api40/models.py @@ -21,7 +21,7 @@ # SOFTWARE. # -# 296 API models: 219 Spec, 0 Request, 58 Write, 19 Enum +# 297 API models: 220 Spec, 0 Request, 57 Write, 20 Enum # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -81,14 +81,21 @@ class Alert(model.Model): cron: Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals custom_title: An optional, user-defined title for the alert dashboard_element_id: ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) + description: An optional description for the alert. This supplements the title destinations: Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` field: + followed: Whether or not the user follows this alert. + followable: Whether or not the alert is followable id: ID of the alert is_disabled: Whether or not the alert is disabled is_public: Whether or not the alert is public + investigative_content_type: The type of the investigative content Valid values are: "dashboard". + investigative_content_id: The ID of the investigative content. For dashboards, this will be the dashboard ID + investigative_content_title: The title of the investigative content. lookml_dashboard_id: ID of the LookML dashboard associated with the alert lookml_link_id: ID of the LookML dashboard element associated with the alert owner_id: User id of alert owner + owner_display_name: Alert owner's display name threshold: Value of the alert threshold time_series_condition_state: """ @@ -98,14 +105,21 @@ class Alert(model.Model): cron: Optional[str] = None custom_title: Optional[str] = None dashboard_element_id: Optional[int] = None + description: Optional[str] = None destinations: Optional[Sequence["AlertDestination"]] = None field: Optional["AlertField"] = None + followed: Optional[bool] = None + followable: Optional[bool] = None id: Optional[int] = None is_disabled: Optional[bool] = None is_public: Optional[bool] = None + investigative_content_type: Optional["InvestigativeContentType"] = None + investigative_content_id: Optional[str] = None + investigative_content_title: Optional[str] = None lookml_dashboard_id: Optional[str] = None lookml_link_id: Optional[str] = None owner_id: Optional[int] = None + owner_display_name: Optional[str] = None threshold: Optional[float] = None time_series_condition_state: Optional["AlertConditionState"] = None @@ -119,14 +133,21 @@ def __init__( cron: Optional[str] = None, custom_title: Optional[str] = None, dashboard_element_id: Optional[int] = None, + description: Optional[str] = None, destinations: Optional[Sequence["AlertDestination"]] = None, field: Optional["AlertField"] = None, + followed: Optional[bool] = None, + followable: Optional[bool] = None, id: Optional[int] = None, is_disabled: Optional[bool] = None, is_public: Optional[bool] = None, + investigative_content_type: Optional["InvestigativeContentType"] = None, + investigative_content_id: Optional[str] = None, + investigative_content_title: Optional[str] = None, lookml_dashboard_id: Optional[str] = None, lookml_link_id: Optional[str] = None, owner_id: Optional[int] = None, + owner_display_name: Optional[str] = None, threshold: Optional[float] = None, time_series_condition_state: Optional["AlertConditionState"] = None ): @@ -135,14 +156,21 @@ def __init__( self.cron = cron self.custom_title = custom_title self.dashboard_element_id = dashboard_element_id + self.description = description self.destinations = destinations self.field = field + self.followed = followed + self.followable = followable self.id = id self.is_disabled = is_disabled self.is_public = is_public + self.investigative_content_type = investigative_content_type + self.investigative_content_id = investigative_content_id + self.investigative_content_title = investigative_content_title self.lookml_dashboard_id = lookml_dashboard_id self.lookml_link_id = lookml_link_id self.owner_id = owner_id + self.owner_display_name = owner_display_name self.threshold = threshold self.time_series_condition_state = time_series_condition_state @@ -495,8 +523,7 @@ class BoardItem(model.Model): content_favorite_id: Content favorite id associated with the item this content is based on content_metadata_id: Content metadata id associated with the item this content is based on content_updated_at: Last time the content that this item is based on was updated - custom_image_data_base64: (Write-Only) base64 encoded image data - custom_image_url: Custom image_url entered by the user, if present + custom_description: Custom description entered by the user, if present custom_title: Custom title entered by the user, if present custom_url: Custom url entered by the user, if present dashboard_id: Dashboard to base this item on @@ -519,8 +546,7 @@ class BoardItem(model.Model): content_favorite_id: Optional[int] = None content_metadata_id: Optional[int] = None content_updated_at: Optional[str] = None - custom_image_data_base64: Optional[str] = None - custom_image_url: Optional[str] = None + custom_description: Optional[str] = None custom_title: Optional[str] = None custom_url: Optional[str] = None dashboard_id: Optional[int] = None @@ -545,8 +571,7 @@ def __init__( content_favorite_id: Optional[int] = None, content_metadata_id: Optional[int] = None, content_updated_at: Optional[str] = None, - custom_image_data_base64: Optional[str] = None, - custom_image_url: Optional[str] = None, + custom_description: Optional[str] = None, custom_title: Optional[str] = None, custom_url: Optional[str] = None, dashboard_id: Optional[int] = None, @@ -568,8 +593,7 @@ def __init__( self.content_favorite_id = content_favorite_id self.content_metadata_id = content_metadata_id self.content_updated_at = content_updated_at - self.custom_image_data_base64 = custom_image_data_base64 - self.custom_image_url = custom_image_url + self.custom_description = custom_description self.custom_title = custom_title self.custom_url = custom_url self.dashboard_id = dashboard_id @@ -2279,14 +2303,12 @@ def __init__( class CustomWelcomeEmail(model.Model): """ Attributes: - can: Operations the current user is able to perform on this object enabled: If true, custom email content will replace the default body of welcome emails content: The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - subject: The text to appear in the email subject line. - header: The text to appear in the header line of the email body. + subject: The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. + header: The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. """ - can: Optional[MutableMapping[str, bool]] = None enabled: Optional[bool] = None content: Optional[str] = None subject: Optional[str] = None @@ -2295,13 +2317,11 @@ class CustomWelcomeEmail(model.Model): def __init__( self, *, - can: Optional[MutableMapping[str, bool]] = None, enabled: Optional[bool] = None, content: Optional[str] = None, subject: Optional[str] = None, header: Optional[str] = None ): - self.can = can self.enabled = enabled self.content = content self.subject = subject @@ -2340,6 +2360,7 @@ class Dashboard(model.Model): deleter_id: Id of User that 'soft' deleted the dashboard. edit_uri: Relative path of URI of LookML file to edit the dashboard (LookML dashboard only). favorite_count: Number of times favorited + filters_bar_collapsed: Sets the default state of the filters bar to collapsed or open last_accessed_at: Time the dashboard was last accessed last_viewed_at: Time last viewed in the Looker web UI load_configuration: configuration option that governs how dashboard loading will happen. @@ -2384,6 +2405,7 @@ class Dashboard(model.Model): deleter_id: Optional[int] = None edit_uri: Optional[str] = None favorite_count: Optional[int] = None + filters_bar_collapsed: Optional[bool] = None last_accessed_at: Optional[datetime.datetime] = None last_viewed_at: Optional[datetime.datetime] = None load_configuration: Optional[str] = None @@ -2430,6 +2452,7 @@ def __init__( deleter_id: Optional[int] = None, edit_uri: Optional[str] = None, favorite_count: Optional[int] = None, + filters_bar_collapsed: Optional[bool] = None, last_accessed_at: Optional[datetime.datetime] = None, last_viewed_at: Optional[datetime.datetime] = None, load_configuration: Optional[str] = None, @@ -2475,6 +2498,7 @@ def __init__( self.deleter_id = deleter_id self.edit_uri = edit_uri self.favorite_count = favorite_count + self.filters_bar_collapsed = filters_bar_collapsed self.last_accessed_at = last_accessed_at self.last_viewed_at = last_viewed_at self.load_configuration = load_configuration @@ -3222,6 +3246,7 @@ class DBConnection(model.Model): pdt_concurrency: Maximum number of threads to use to build PDTs in parallel disable_context_comment: When disable_context_comment is true comment will not be added to SQL oauth_application_id: An External OAuth Application to use for authenticating to the database + always_retry_failed_builds: When true, error PDTs will be retried every regenerator cycle """ can: Optional[MutableMapping[str, bool]] = None @@ -3265,6 +3290,7 @@ class DBConnection(model.Model): pdt_concurrency: Optional[int] = None disable_context_comment: Optional[bool] = None oauth_application_id: Optional[int] = None + always_retry_failed_builds: Optional[bool] = None def __init__( self, @@ -3309,7 +3335,8 @@ def __init__( tunnel_id: Optional[str] = None, pdt_concurrency: Optional[int] = None, disable_context_comment: Optional[bool] = None, - oauth_application_id: Optional[int] = None + oauth_application_id: Optional[int] = None, + always_retry_failed_builds: Optional[bool] = None ): self.can = can self.name = name @@ -3352,6 +3379,7 @@ def __init__( self.pdt_concurrency = pdt_concurrency self.disable_context_comment = disable_context_comment self.oauth_application_id = oauth_application_id + self.always_retry_failed_builds = always_retry_failed_builds @attr.s(auto_attribs=True, init=False) @@ -4992,6 +5020,20 @@ def __init__( self.markdown_content = markdown_content +class InvestigativeContentType(enum.Enum): + """ + The type of the investigative content Valid values are: "dashboard". + + """ + + dashboard = "dashboard" + invalid_api_enum_value = "invalid_api_enum_value" + + +# https://github.com/python/mypy/issues/2427 +InvestigativeContentType.__new__ = model.safe_enum__new__ # type: ignore + + @attr.s(auto_attribs=True, init=False) class LDAPConfig(model.Model): """ @@ -9132,7 +9174,7 @@ class ScheduledPlanDestination(model.Model): format: The data format to send to the given destination. Supported formats vary by destination, but include: "txt", "csv", "inline_json", "json", "json_detail", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png" apply_formatting: Are values formatted? (containing currency symbols, digit separators, etc. apply_vis: Whether visualization options are applied to the results. - address: Address for recipient. For email e.g. 'user@example.com'. For webhooks e.g. 'https://domain/path'. For Amazon S3 e.g. 's3://bucket-name/path/'. For SFTP e.g. 'sftp://host-name/path/'. + address: Address for recipient. For email e.g. 'user@example.com'. For webhooks e.g. 'https://domain/path'. For Amazon S3 e.g. 's3://bucket-name/path/'. For SFTP e.g. 'sftp://host-name/path/'. looker_recipient: Whether the recipient is a Looker user on the current instance (only applicable for email recipients) type: Type of the address ('email', 'webhook', 's3', or 'sftp') parameters: JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username. @@ -9456,12 +9498,14 @@ class Setting(model.Model): marketplace_auto_install_enabled: Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled. marketplace_enabled: Toggle marketplace on or off whitelabel_configuration: + custom_welcome_email: """ extension_framework_enabled: Optional[bool] = None marketplace_auto_install_enabled: Optional[bool] = None marketplace_enabled: Optional[bool] = None whitelabel_configuration: Optional["WhitelabelConfiguration"] = None + custom_welcome_email: Optional["CustomWelcomeEmail"] = None def __init__( self, @@ -9469,12 +9513,14 @@ def __init__( extension_framework_enabled: Optional[bool] = None, marketplace_auto_install_enabled: Optional[bool] = None, marketplace_enabled: Optional[bool] = None, - whitelabel_configuration: Optional["WhitelabelConfiguration"] = None + whitelabel_configuration: Optional["WhitelabelConfiguration"] = None, + custom_welcome_email: Optional["CustomWelcomeEmail"] = None ): self.extension_framework_enabled = extension_framework_enabled self.marketplace_auto_install_enabled = marketplace_auto_install_enabled self.marketplace_enabled = marketplace_enabled self.whitelabel_configuration = whitelabel_configuration + self.custom_welcome_email = custom_welcome_email @attr.s(auto_attribs=True, init=False) @@ -10323,6 +10369,19 @@ def __init__( self.hidden_value_domain_whitelist = hidden_value_domain_whitelist +@attr.s(auto_attribs=True, init=False) +class UserEmailOnly(model.Model): + """ + Attributes: + email: Email Address + """ + + email: str + + def __init__(self, *, email: str): + self.email = email + + @attr.s(auto_attribs=True, init=False) class UserLoginLockout(model.Model): """ @@ -10621,24 +10680,27 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteAlert(model.Model): """ - Dynamic writeable type for Alert removes: -id - - Attributes: - applied_dashboard_filters: Filters coming from the dashboard that are applied. Example `[{ "filter_title": "Name", "field_name": "distribution_centers.name", "filter_value": "Los Angeles CA" }]` - comparison_type: This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: "EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL_TO", "LESS_THAN", "LESS_THAN_OR_EQUAL_TO", "INCREASES_BY", "DECREASES_BY", "CHANGES_BY". - cron: Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals - custom_title: An optional, user-defined title for the alert - dashboard_element_id: ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) - destinations: Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` - field: - is_disabled: Whether or not the alert is disabled - is_public: Whether or not the alert is public - lookml_dashboard_id: ID of the LookML dashboard associated with the alert - lookml_link_id: ID of the LookML dashboard element associated with the alert - owner_id: User id of alert owner - threshold: Value of the alert threshold - time_series_condition_state: + Dynamic writeable type for Alert removes: + followed, followable, id, investigative_content_title, owner_display_name + + Attributes: + applied_dashboard_filters: Filters coming from the dashboard that are applied. Example `[{ "filter_title": "Name", "field_name": "distribution_centers.name", "filter_value": "Los Angeles CA" }]` + comparison_type: This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: "EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL_TO", "LESS_THAN", "LESS_THAN_OR_EQUAL_TO", "INCREASES_BY", "DECREASES_BY", "CHANGES_BY". + cron: Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals + custom_title: An optional, user-defined title for the alert + dashboard_element_id: ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement) + description: An optional description for the alert. This supplements the title + destinations: Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` + field: + is_disabled: Whether or not the alert is disabled + is_public: Whether or not the alert is public + investigative_content_type: The type of the investigative content Valid values are: "dashboard". + investigative_content_id: The ID of the investigative content. For dashboards, this will be the dashboard ID + lookml_dashboard_id: ID of the LookML dashboard associated with the alert + lookml_link_id: ID of the LookML dashboard element associated with the alert + owner_id: User id of alert owner + threshold: Value of the alert threshold + time_series_condition_state: """ applied_dashboard_filters: Optional[Sequence["AlertAppliedDashboardFilter"]] = None @@ -10646,10 +10708,13 @@ class WriteAlert(model.Model): cron: Optional[str] = None custom_title: Optional[str] = None dashboard_element_id: Optional[int] = None + description: Optional[str] = None destinations: Optional[Sequence["AlertDestination"]] = None field: Optional["AlertField"] = None is_disabled: Optional[bool] = None is_public: Optional[bool] = None + investigative_content_type: Optional["InvestigativeContentType"] = None + investigative_content_id: Optional[str] = None lookml_dashboard_id: Optional[str] = None lookml_link_id: Optional[str] = None owner_id: Optional[int] = None @@ -10666,10 +10731,13 @@ def __init__( cron: Optional[str] = None, custom_title: Optional[str] = None, dashboard_element_id: Optional[int] = None, + description: Optional[str] = None, destinations: Optional[Sequence["AlertDestination"]] = None, field: Optional["AlertField"] = None, is_disabled: Optional[bool] = None, is_public: Optional[bool] = None, + investigative_content_type: Optional["InvestigativeContentType"] = None, + investigative_content_id: Optional[str] = None, lookml_dashboard_id: Optional[str] = None, lookml_link_id: Optional[str] = None, owner_id: Optional[int] = None, @@ -10681,10 +10749,13 @@ def __init__( self.cron = cron self.custom_title = custom_title self.dashboard_element_id = dashboard_element_id + self.description = description self.destinations = destinations self.field = field self.is_disabled = is_disabled self.is_public = is_public + self.investigative_content_type = investigative_content_type + self.investigative_content_id = investigative_content_id self.lookml_dashboard_id = lookml_dashboard_id self.lookml_link_id = lookml_link_id self.owner_id = owner_id @@ -10695,11 +10766,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteApiSession(model.Model): """ - Dynamic writeable type for ApiSession removes: -can, sudo_user_id + Dynamic writeable type for ApiSession removes: + can, sudo_user_id - Attributes: - workspace_id: The id of active workspace for this session + Attributes: + workspace_id: The id of active workspace for this session """ workspace_id: Optional[str] = None @@ -10711,15 +10782,15 @@ def __init__(self, *, workspace_id: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteBackupConfiguration(model.Model): """ - Dynamic writeable type for BackupConfiguration removes: -can, url + Dynamic writeable type for BackupConfiguration removes: + can, url - Attributes: - type: Type of backup: looker-s3 or custom-s3 - custom_s3_bucket: Name of bucket for custom-s3 backups - custom_s3_bucket_region: Name of region where the bucket is located - custom_s3_key: (Write-Only) AWS S3 key used for custom-s3 backups - custom_s3_secret: (Write-Only) AWS S3 secret used for custom-s3 backups + Attributes: + type: Type of backup: looker-s3 or custom-s3 + custom_s3_bucket: Name of bucket for custom-s3 backups + custom_s3_bucket_region: Name of region where the bucket is located + custom_s3_key: (Write-Only) AWS S3 key used for custom-s3 backups + custom_s3_secret: (Write-Only) AWS S3 secret used for custom-s3 backups """ type: Optional[str] = None @@ -10747,14 +10818,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteBoard(model.Model): """ - Dynamic writeable type for Board removes: -can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage + Dynamic writeable type for Board removes: + can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage - Attributes: - deleted_at: Date of board deletion - description: Description of the board - section_order: ids of the board sections in the order they should be displayed - title: Title of the board + Attributes: + deleted_at: Date of board deletion + description: Description of the board + section_order: ids of the board sections in the order they should be displayed + title: Title of the board """ deleted_at: Optional[datetime.datetime] = None @@ -10779,21 +10850,21 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteBoardItem(model.Model): """ - Dynamic writeable type for BoardItem removes: -can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, title, url, view_count + Dynamic writeable type for BoardItem removes: + can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, description, favorite_count, id, image_url, location, title, url, view_count - Attributes: - custom_image_data_base64: (Write-Only) base64 encoded image data - custom_title: Custom title entered by the user, if present - custom_url: Custom url entered by the user, if present - dashboard_id: Dashboard to base this item on - board_section_id: Associated Board Section - look_id: Look to base this item on - lookml_dashboard_id: LookML Dashboard to base this item on - order: An arbitrary integer representing the sort order within the section + Attributes: + custom_description: Custom description entered by the user, if present + custom_title: Custom title entered by the user, if present + custom_url: Custom url entered by the user, if present + dashboard_id: Dashboard to base this item on + board_section_id: Associated Board Section + look_id: Look to base this item on + lookml_dashboard_id: LookML Dashboard to base this item on + order: An arbitrary integer representing the sort order within the section """ - custom_image_data_base64: Optional[str] = None + custom_description: Optional[str] = None custom_title: Optional[str] = None custom_url: Optional[str] = None dashboard_id: Optional[int] = None @@ -10805,7 +10876,7 @@ class WriteBoardItem(model.Model): def __init__( self, *, - custom_image_data_base64: Optional[str] = None, + custom_description: Optional[str] = None, custom_title: Optional[str] = None, custom_url: Optional[str] = None, dashboard_id: Optional[int] = None, @@ -10814,7 +10885,7 @@ def __init__( lookml_dashboard_id: Optional[str] = None, order: Optional[int] = None ): - self.custom_image_data_base64 = custom_image_data_base64 + self.custom_description = custom_description self.custom_title = custom_title self.custom_url = custom_url self.dashboard_id = dashboard_id @@ -10827,15 +10898,15 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteBoardSection(model.Model): """ - Dynamic writeable type for BoardSection removes: -can, created_at, board_items, id, visible_item_order, updated_at + Dynamic writeable type for BoardSection removes: + can, created_at, board_items, id, visible_item_order, updated_at - Attributes: - deleted_at: Time at which this section was deleted. - description: Description of the content found in this section. - board_id: Id reference to parent board - item_order: ids of the board items in the order they should be displayed - title: Name of row + Attributes: + deleted_at: Time at which this section was deleted. + description: Description of the content found in this section. + board_id: Id reference to parent board + item_order: ids of the board items in the order they should be displayed + title: Name of row """ deleted_at: Optional[datetime.datetime] = None @@ -10863,14 +10934,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteColorCollection(model.Model): """ - Dynamic writeable type for ColorCollection removes: -id + Dynamic writeable type for ColorCollection removes: + id - Attributes: - label: Label of color collection - categoricalPalettes: Array of categorical palette definitions - sequentialPalettes: Array of discrete palette definitions - divergingPalettes: Array of diverging palette definitions + Attributes: + label: Label of color collection + categoricalPalettes: Array of categorical palette definitions + sequentialPalettes: Array of discrete palette definitions + divergingPalettes: Array of diverging palette definitions """ label: Optional[str] = None @@ -10895,14 +10966,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteCommand(model.Model): """ - Dynamic writeable type for Command removes: -id, author_id + Dynamic writeable type for Command removes: + id, author_id - Attributes: - name: Name of the command - description: Description of the command - linked_content_id: Id of the content associated with the command - linked_content_type: Name of the command Valid values are: "dashboard", "lookml_dashboard". + Attributes: + name: Name of the command + description: Description of the command + linked_content_id: Id of the content associated with the command + linked_content_type: Name of the command Valid values are: "dashboard", "lookml_dashboard". """ name: Optional[str] = None @@ -10927,16 +10998,16 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteContentFavorite(model.Model): """ - Dynamic writeable type for ContentFavorite removes: -id, look_id, dashboard_id, board_id + Dynamic writeable type for ContentFavorite removes: + id, look_id, dashboard_id, board_id - Attributes: - user_id: User Id which owns this ContentFavorite - content_metadata_id: Content Metadata Id associated with this ContentFavorite - look: Dynamic writeable type for LookBasic removes: -can, content_metadata_id, id, title - dashboard: Dynamic writeable type for DashboardBase removes: -can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer + Attributes: + user_id: User Id which owns this ContentFavorite + content_metadata_id: Content Metadata Id associated with this ContentFavorite + look: Dynamic writeable type for LookBasic removes: + can, content_metadata_id, id, title + dashboard: Dynamic writeable type for DashboardBase removes: + can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer """ user_id: Optional[int] = None @@ -10961,11 +11032,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteContentMeta(model.Model): """ - Dynamic writeable type for ContentMeta removes: -can, id, name, parent_id, dashboard_id, look_id, folder_id, content_type, inheriting_id, slug + Dynamic writeable type for ContentMeta removes: + can, id, name, parent_id, dashboard_id, look_id, folder_id, content_type, inheriting_id, slug - Attributes: - inherits: Whether content inherits its access levels from parent + Attributes: + inherits: Whether content inherits its access levels from parent """ inherits: Optional[bool] = None @@ -10977,23 +11048,23 @@ def __init__(self, *, inherits: Optional[bool] = None): @attr.s(auto_attribs=True, init=False) class WriteCreateDashboardFilter(model.Model): """ - Dynamic writeable type for CreateDashboardFilter removes: -id, field - - Attributes: - dashboard_id: Id of Dashboard - name: Name of filter - title: Title of filter - type: Type of filter: one of date, number, string, or field - default_value: Default value of filter - model: Model of filter (required if type = field) - explore: Explore of filter (required if type = field) - dimension: Dimension of filter (required if type = field) - row: Display order of this filter relative to other filters - listens_to_filters: Array of listeners for faceted filters - allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - required: Whether the filter requires a value to run the dashboard - ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. + Dynamic writeable type for CreateDashboardFilter removes: + id, field + + Attributes: + dashboard_id: Id of Dashboard + name: Name of filter + title: Title of filter + type: Type of filter: one of date, number, string, or field + default_value: Default value of filter + model: Model of filter (required if type = field) + explore: Explore of filter (required if type = field) + dimension: Dimension of filter (required if type = field) + row: Display order of this filter relative to other filters + listens_to_filters: Array of listeners for faceted filters + allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) + required: Whether the filter requires a value to run the dashboard + ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. """ dashboard_id: str @@ -11045,16 +11116,16 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteCreateQueryTask(model.Model): """ - Dynamic writeable type for CreateQueryTask removes: -can + Dynamic writeable type for CreateQueryTask removes: + can - Attributes: - query_id: Id of query to run - result_format: Desired async query result format. Valid values are: "inline_json", "json", "json_detail", "json_fe", "csv", "html", "md", "txt", "xlsx", "gsxml". - source: Source of query task - deferred: Create the task but defer execution - look_id: Id of look associated with query. - dashboard_id: Id of dashboard associated with query. + Attributes: + query_id: Id of query to run + result_format: Desired async query result format. Valid values are: "inline_json", "json", "json_detail", "json_fe", "csv", "html", "md", "txt", "xlsx", "gsxml". + source: Source of query task + deferred: Create the task but defer execution + look_id: Id of look associated with query. + dashboard_id: Id of dashboard associated with query. """ query_id: int @@ -11093,12 +11164,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteCredentialsEmail(model.Model): """ - Dynamic writeable type for CredentialsEmail removes: -can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url + Dynamic writeable type for CredentialsEmail removes: + can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url - Attributes: - email: EMail address used for user login - forced_password_reset_at_next_login: Force the user to change their password upon their next login + Attributes: + email: EMail address used for user login + forced_password_reset_at_next_login: Force the user to change their password upon their next login """ email: Optional[str] = None @@ -11114,68 +11185,37 @@ def __init__( self.forced_password_reset_at_next_login = forced_password_reset_at_next_login -@attr.s(auto_attribs=True, init=False) -class WriteCustomWelcomeEmail(model.Model): - """ - Dynamic writeable type for CustomWelcomeEmail removes: -can - - Attributes: - enabled: If true, custom email content will replace the default body of welcome emails - content: The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - subject: The text to appear in the email subject line. - header: The text to appear in the header line of the email body. - """ - - enabled: Optional[bool] = None - content: Optional[str] = None - subject: Optional[str] = None - header: Optional[str] = None - - def __init__( - self, - *, - enabled: Optional[bool] = None, - content: Optional[str] = None, - subject: Optional[str] = None, - header: Optional[str] = None - ): - self.enabled = enabled - self.content = content - self.subject = subject - self.header = header - - @attr.s(auto_attribs=True, init=False) class WriteDashboard(model.Model): """ - Dynamic writeable type for Dashboard removes: -can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count, url - - Attributes: - description: Description - hidden: Is Hidden - query_timezone: Timezone in which the Dashboard will run by default. - refresh_interval: Refresh Interval, as a time duration phrase like "2 hours 30 minutes". A number with no time units will be interpreted as whole seconds. - folder: Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - title: Dashboard Title - slug: Content Metadata Slug - preferred_viewer: The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) - alert_sync_with_dashboard_filter_enabled: Enables alerts to keep in sync with dashboard filter changes - only available in Enhanced Alerts (beta) - background_color: Background color - crossfilter_enabled: Enables crossfiltering in dashboards - only available in dashboards-next (beta) - deleted: Whether or not a dashboard is 'soft' deleted. - load_configuration: configuration option that governs how dashboard loading will happen. - lookml_link_id: Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. - show_filters_bar: Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access) - show_title: Show title - folder_id: Id of folder - text_tile_text_color: Color of text on text tiles - tile_background_color: Tile background color - tile_text_color: Tile text color - title_color: Title color - appearance: + Dynamic writeable type for Dashboard removes: + can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count, url + + Attributes: + description: Description + hidden: Is Hidden + query_timezone: Timezone in which the Dashboard will run by default. + refresh_interval: Refresh Interval, as a time duration phrase like "2 hours 30 minutes". A number with no time units will be interpreted as whole seconds. + folder: Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + title: Dashboard Title + slug: Content Metadata Slug + preferred_viewer: The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) + alert_sync_with_dashboard_filter_enabled: Enables alerts to keep in sync with dashboard filter changes - only available in Enhanced Alerts (beta) + background_color: Background color + crossfilter_enabled: Enables crossfiltering in dashboards - only available in dashboards-next (beta) + deleted: Whether or not a dashboard is 'soft' deleted. + filters_bar_collapsed: Sets the default state of the filters bar to collapsed or open + load_configuration: configuration option that governs how dashboard loading will happen. + lookml_link_id: Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. + show_filters_bar: Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access) + show_title: Show title + folder_id: Id of folder + text_tile_text_color: Color of text on text tiles + tile_background_color: Tile background color + tile_text_color: Tile text color + title_color: Title color + appearance: """ description: Optional[str] = None @@ -11190,6 +11230,7 @@ class WriteDashboard(model.Model): background_color: Optional[str] = None crossfilter_enabled: Optional[bool] = None deleted: Optional[bool] = None + filters_bar_collapsed: Optional[bool] = None load_configuration: Optional[str] = None lookml_link_id: Optional[str] = None show_filters_bar: Optional[bool] = None @@ -11216,6 +11257,7 @@ def __init__( background_color: Optional[str] = None, crossfilter_enabled: Optional[bool] = None, deleted: Optional[bool] = None, + filters_bar_collapsed: Optional[bool] = None, load_configuration: Optional[str] = None, lookml_link_id: Optional[str] = None, show_filters_bar: Optional[bool] = None, @@ -11241,6 +11283,7 @@ def __init__( self.background_color = background_color self.crossfilter_enabled = crossfilter_enabled self.deleted = deleted + self.filters_bar_collapsed = filters_bar_collapsed self.load_configuration = load_configuration self.lookml_link_id = lookml_link_id self.show_filters_bar = show_filters_bar @@ -11256,12 +11299,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardBase(model.Model): """ - Dynamic writeable type for DashboardBase removes: -can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer + Dynamic writeable type for DashboardBase removes: + can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer - Attributes: - folder: Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + Attributes: + folder: Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can """ folder: Optional["WriteFolderBase"] = None @@ -11273,31 +11316,31 @@ def __init__(self, *, folder: Optional["WriteFolderBase"] = None): @attr.s(auto_attribs=True, init=False) class WriteDashboardElement(model.Model): """ - Dynamic writeable type for DashboardElement removes: -can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html - - Attributes: - body_text: Text tile body text - dashboard_id: Id of Dashboard - look: Dynamic writeable type for LookWithQuery removes: -can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, url - look_id: Id Of Look - merge_result_id: ID of merge result - note_display: Note Display - note_state: Note State - note_text: Note Text - query: Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations - query_id: Id Of Query - refresh_interval: Refresh Interval - result_maker: Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: -id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config - result_maker_id: ID of the ResultMakerLookup entry. - subtitle_text: Text tile subtitle text - title: Title of dashboard element - title_hidden: Whether title is hidden - title_text: Text tile title - type: Type + Dynamic writeable type for DashboardElement removes: + can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html + + Attributes: + body_text: Text tile body text + dashboard_id: Id of Dashboard + look: Dynamic writeable type for LookWithQuery removes: + can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, url + look_id: Id Of Look + merge_result_id: ID of merge result + note_display: Note Display + note_state: Note State + note_text: Note Text + query: Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations + query_id: Id Of Query + refresh_interval: Refresh Interval + result_maker: Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: + id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config + result_maker_id: ID of the ResultMakerLookup entry. + subtitle_text: Text tile subtitle text + title: Title of dashboard element + title_hidden: Whether title is hidden + title_text: Text tile title + type: Type """ body_text: Optional[str] = None @@ -11366,22 +11409,22 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardFilter(model.Model): """ - Dynamic writeable type for DashboardFilter removes: -can, id, dashboard_id, field + Dynamic writeable type for DashboardFilter removes: + can, id, dashboard_id, field - Attributes: - name: Name of filter - title: Title of filter - type: Type of filter: one of date, number, string, or field - default_value: Default value of filter - model: Model of filter (required if type = field) - explore: Explore of filter (required if type = field) - dimension: Dimension of filter (required if type = field) - row: Display order of this filter relative to other filters - listens_to_filters: Array of listeners for faceted filters - allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - required: Whether the filter requires a value to run the dashboard - ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. + Attributes: + name: Name of filter + title: Title of filter + type: Type of filter: one of date, number, string, or field + default_value: Default value of filter + model: Model of filter (required if type = field) + explore: Explore of filter (required if type = field) + dimension: Dimension of filter (required if type = field) + row: Display order of this filter relative to other filters + listens_to_filters: Array of listeners for faceted filters + allow_multiple_values: Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) + required: Whether the filter requires a value to run the dashboard + ui_config: The visual configuration for this filter. Used to set up how the UI for this filter should appear. """ name: Optional[str] = None @@ -11430,15 +11473,15 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardLayout(model.Model): """ - Dynamic writeable type for DashboardLayout removes: -can, id, deleted, dashboard_title, dashboard_layout_components + Dynamic writeable type for DashboardLayout removes: + can, id, deleted, dashboard_title, dashboard_layout_components - Attributes: - dashboard_id: Id of Dashboard - type: Type - active: Is Active - column_width: Column Width - width: Width + Attributes: + dashboard_id: Id of Dashboard + type: Type + active: Is Active + column_width: Column Width + width: Width """ dashboard_id: Optional[str] = None @@ -11466,16 +11509,16 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDashboardLayoutComponent(model.Model): """ - Dynamic writeable type for DashboardLayoutComponent removes: -can, id, deleted, element_title, element_title_hidden, vis_type + Dynamic writeable type for DashboardLayoutComponent removes: + can, id, deleted, element_title, element_title_hidden, vis_type - Attributes: - dashboard_layout_id: Id of Dashboard Layout - dashboard_element_id: Id Of Dashboard Element - row: Row - column: Column - width: Width - height: Height + Attributes: + dashboard_layout_id: Id of Dashboard Layout + dashboard_element_id: Id Of Dashboard Element + row: Row + column: Column + width: Width + height: Height """ dashboard_layout_id: Optional[str] = None @@ -11506,12 +11549,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDatagroup(model.Model): """ - Dynamic writeable type for Datagroup removes: -can, created_at, id, model_name, name, trigger_check_at, trigger_error, trigger_value + Dynamic writeable type for Datagroup removes: + can, created_at, id, model_name, name, trigger_check_at, trigger_error, trigger_value - Attributes: - stale_before: UNIX timestamp before which cache entries are considered stale. Cannot be in the future. - triggered_at: UNIX timestamp at which this entry became triggered. Cannot be in the future. + Attributes: + stale_before: UNIX timestamp before which cache entries are considered stale. Cannot be in the future. + triggered_at: UNIX timestamp at which this entry became triggered. Cannot be in the future. """ stale_before: Optional[int] = None @@ -11526,42 +11569,43 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteDBConnection(model.Model): - """ - Dynamic writeable type for DBConnection removes: -can, dialect, snippets, pdts_enabled, uses_oauth, created_at, user_id, example, last_regen_at, last_reap_at, managed - - Attributes: - name: Name of the connection. Also used as the unique identifier - host: Host name/address of server - port: Port number on server - username: Username for server authentication - password: (Write-Only) Password for server authentication - certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - file_type: (Write-Only) Certificate keyfile type - .json or .p12 - database: Database name - db_timezone: Time zone of database - query_timezone: Timezone to use in queries - schema: Scheme name - max_connections: Maximum number of concurrent connection to use - max_billing_gigabytes: Maximum size of query in GBs (BigQuery only, can be a user_attribute name) - ssl: Use SSL/TLS when connecting to server - verify_ssl: Verify the SSL - tmp_db_name: Name of temporary database (if used) - jdbc_additional_params: Additional params to add to JDBC connection string - pool_timeout: Connection Pool Timeout, in seconds - dialect_name: (Read/Write) SQL Dialect name - user_db_credentials: (Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password - user_attribute_fields: Fields whose values map to user attribute names - maintenance_cron: Cron string specifying when maintenance such as PDT trigger checks and drops should be performed - sql_runner_precache_tables: Precache tables in the SQL Runner - sql_writing_with_info_schema: Fetch Information Schema For SQL Writing - after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature - pdt_context_override: Dynamic writeable type for DBConnectionOverride removes: -has_password - tunnel_id: The Id of the ssh tunnel this connection uses - pdt_concurrency: Maximum number of threads to use to build PDTs in parallel - disable_context_comment: When disable_context_comment is true comment will not be added to SQL - oauth_application_id: An External OAuth Application to use for authenticating to the database + """ + Dynamic writeable type for DBConnection removes: + can, dialect, snippets, pdts_enabled, uses_oauth, created_at, user_id, example, last_regen_at, last_reap_at, managed + + Attributes: + name: Name of the connection. Also used as the unique identifier + host: Host name/address of server + port: Port number on server + username: Username for server authentication + password: (Write-Only) Password for server authentication + certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + file_type: (Write-Only) Certificate keyfile type - .json or .p12 + database: Database name + db_timezone: Time zone of database + query_timezone: Timezone to use in queries + schema: Scheme name + max_connections: Maximum number of concurrent connection to use + max_billing_gigabytes: Maximum size of query in GBs (BigQuery only, can be a user_attribute name) + ssl: Use SSL/TLS when connecting to server + verify_ssl: Verify the SSL + tmp_db_name: Name of temporary database (if used) + jdbc_additional_params: Additional params to add to JDBC connection string + pool_timeout: Connection Pool Timeout, in seconds + dialect_name: (Read/Write) SQL Dialect name + user_db_credentials: (Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password + user_attribute_fields: Fields whose values map to user attribute names + maintenance_cron: Cron string specifying when maintenance such as PDT trigger checks and drops should be performed + sql_runner_precache_tables: Precache tables in the SQL Runner + sql_writing_with_info_schema: Fetch Information Schema For SQL Writing + after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature + pdt_context_override: Dynamic writeable type for DBConnectionOverride removes: + has_password + tunnel_id: The Id of the ssh tunnel this connection uses + pdt_concurrency: Maximum number of threads to use to build PDTs in parallel + disable_context_comment: When disable_context_comment is true comment will not be added to SQL + oauth_application_id: An External OAuth Application to use for authenticating to the database + always_retry_failed_builds: When true, error PDTs will be retried every regenerator cycle """ name: Optional[str] = None @@ -11594,6 +11638,7 @@ class WriteDBConnection(model.Model): pdt_concurrency: Optional[int] = None disable_context_comment: Optional[bool] = None oauth_application_id: Optional[int] = None + always_retry_failed_builds: Optional[bool] = None def __init__( self, @@ -11627,7 +11672,8 @@ def __init__( tunnel_id: Optional[str] = None, pdt_concurrency: Optional[int] = None, disable_context_comment: Optional[bool] = None, - oauth_application_id: Optional[int] = None + oauth_application_id: Optional[int] = None, + always_retry_failed_builds: Optional[bool] = None ): self.name = name self.host = host @@ -11659,26 +11705,27 @@ def __init__( self.pdt_concurrency = pdt_concurrency self.disable_context_comment = disable_context_comment self.oauth_application_id = oauth_application_id + self.always_retry_failed_builds = always_retry_failed_builds @attr.s(auto_attribs=True, init=False) class WriteDBConnectionOverride(model.Model): """ - Dynamic writeable type for DBConnectionOverride removes: -has_password + Dynamic writeable type for DBConnectionOverride removes: + has_password - Attributes: - context: Context in which to override (`pdt` is the only allowed value) - host: Host name/address of server - port: Port number on server - username: Username for server authentication - password: (Write-Only) Password for server authentication - certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - file_type: (Write-Only) Certificate keyfile type - .json or .p12 - database: Database name - schema: Scheme name - jdbc_additional_params: Additional params to add to JDBC connection string - after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature + Attributes: + context: Context in which to override (`pdt` is the only allowed value) + host: Host name/address of server + port: Port number on server + username: Username for server authentication + password: (Write-Only) Password for server authentication + certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + file_type: (Write-Only) Certificate keyfile type - .json or .p12 + database: Database name + schema: Scheme name + jdbc_additional_params: Additional params to add to JDBC connection string + after_connect_statements: SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature """ context: Optional[str] = None @@ -11724,14 +11771,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteExternalOauthApplication(model.Model): """ - Dynamic writeable type for ExternalOauthApplication removes: -can, id, created_at + Dynamic writeable type for ExternalOauthApplication removes: + can, id, created_at - Attributes: - name: The name of this application. For Snowflake connections, this should be the name of the host database. - client_id: The OAuth Client ID for this application - client_secret: (Write-Only) The OAuth Client Secret for this application - dialect_name: The database dialect for this application. + Attributes: + name: The name of this application. For Snowflake connections, this should be the name of the host database. + client_id: The OAuth Client ID for this application + client_secret: (Write-Only) The OAuth Client Secret for this application + dialect_name: The database dialect for this application. """ name: Optional[str] = None @@ -11756,12 +11803,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteFolderBase(model.Model): """ - Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - Attributes: - name: Unique Name - parent_id: Id of Parent. If the parent id is null, this is a root-level entry + Attributes: + name: Unique Name + parent_id: Id of Parent. If the parent id is null, this is a root-level entry """ name: str @@ -11775,12 +11822,12 @@ def __init__(self, *, name: str, parent_id: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteGitBranch(model.Model): """ - Dynamic writeable type for GitBranch removes: -can, remote, remote_name, error, message, owner_name, readonly, personal, is_local, is_remote, is_production, ahead_count, behind_count, commit_at, remote_ref + Dynamic writeable type for GitBranch removes: + can, remote, remote_name, error, message, owner_name, readonly, personal, is_local, is_remote, is_production, ahead_count, behind_count, commit_at, remote_ref - Attributes: - name: The short name on the local. Updating `name` results in `git checkout ` - ref: The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. + Attributes: + name: The short name on the local. Updating `name` results in `git checkout ` + ref: The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. """ name: Optional[str] = None @@ -11794,12 +11841,12 @@ def __init__(self, *, name: Optional[str] = None, ref: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteGroup(model.Model): """ - Dynamic writeable type for Group removes: -can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count + Dynamic writeable type for Group removes: + can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count - Attributes: - can_add_to_content_metadata: Group can be used in content access controls - name: Name of group + Attributes: + can_add_to_content_metadata: Group can be used in content access controls + name: Name of group """ can_add_to_content_metadata: Optional[bool] = None @@ -11818,13 +11865,13 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteIntegration(model.Model): """ - Dynamic writeable type for Integration removes: -can, id, integration_hub_id, label, description, supported_formats, supported_action_types, supported_formattings, supported_visualization_formattings, supported_download_settings, icon_url, uses_oauth, required_fields, delegate_oauth + Dynamic writeable type for Integration removes: + can, id, integration_hub_id, label, description, supported_formats, supported_action_types, supported_formattings, supported_visualization_formattings, supported_download_settings, icon_url, uses_oauth, required_fields, delegate_oauth - Attributes: - enabled: Whether the integration is available to users. - params: Array of params for the integration. - installed_delegate_oauth_targets: Whether the integration is available to users. + Attributes: + enabled: Whether the integration is available to users. + params: Array of params for the integration. + installed_delegate_oauth_targets: Whether the integration is available to users. """ enabled: Optional[bool] = None @@ -11846,12 +11893,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteIntegrationHub(model.Model): """ - Dynamic writeable type for IntegrationHub removes: -can, id, label, official, fetch_error_message, has_authorization_token, legal_agreement_signed, legal_agreement_required, legal_agreement_text + Dynamic writeable type for IntegrationHub removes: + can, id, label, official, fetch_error_message, has_authorization_token, legal_agreement_signed, legal_agreement_required, legal_agreement_text - Attributes: - url: URL of the hub. - authorization_token: (Write-Only) An authorization key that will be sent to the integration hub on every request. + Attributes: + url: URL of the hub. + authorization_token: (Write-Only) An authorization key that will be sent to the integration hub on every request. """ url: Optional[str] = None @@ -11867,11 +11914,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteInternalHelpResources(model.Model): """ - Dynamic writeable type for InternalHelpResources removes: -can + Dynamic writeable type for InternalHelpResources removes: + can - Attributes: - enabled: If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker + Attributes: + enabled: If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker """ enabled: Optional[bool] = None @@ -11883,12 +11930,12 @@ def __init__(self, *, enabled: Optional[bool] = None): @attr.s(auto_attribs=True, init=False) class WriteInternalHelpResourcesContent(model.Model): """ - Dynamic writeable type for InternalHelpResourcesContent removes: -can + Dynamic writeable type for InternalHelpResourcesContent removes: + can - Attributes: - organization_name: Text to display in the help menu item which will display the internal help resources - markdown_content: Content to be displayed in the internal help resources page/modal + Attributes: + organization_name: Text to display in the help menu item which will display the internal help resources + markdown_content: Content to be displayed in the internal help resources page/modal """ organization_name: Optional[str] = None @@ -11907,44 +11954,44 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteLDAPConfig(model.Model): """ - Dynamic writeable type for LDAPConfig removes: -can, default_new_user_groups, default_new_user_roles, groups, has_auth_password, modified_at, modified_by, user_attributes, url - - Attributes: - alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - auth_password: (Write-Only) Password for the LDAP account used to access the LDAP server - auth_requires_role: Users will not be allowed to login at all unless a role for them is found in LDAP if set to true - auth_username: Distinguished name of LDAP account used to access the LDAP server - connection_host: LDAP server hostname - connection_port: LDAP host port - connection_tls: Use Transport Layer Security - connection_tls_no_verify: Do not verify peer when using TLS - default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP - default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP - enabled: Enable/Disable LDAP authentication for the server - force_no_page: Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it. - groups_base_dn: Base dn for finding groups in LDAP searches - groups_finder_type: Identifier for a strategy for how Looker will search for groups in the LDAP server - groups_member_attribute: LDAP Group attribute that signifies the members of the groups. Most commonly 'member' - groups_objectclasses: Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches - groups_user_attribute: LDAP Group attribute that signifies the user in a group. Most commonly 'dn' - groups_with_role_ids: (Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids - merge_new_users_by_email: Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user. - set_roles_from_groups: Set user roles in Looker based on groups from LDAP - test_ldap_password: (Write-Only) Test LDAP user password. For ldap tests only. - test_ldap_user: (Write-Only) Test LDAP user login id. For ldap tests only. - user_attribute_map_email: Name of user record attributes used to indicate email address field - user_attribute_map_first_name: Name of user record attributes used to indicate first name - user_attribute_map_last_name: Name of user record attributes used to indicate last name - user_attribute_map_ldap_id: Name of user record attributes used to indicate unique record id - user_attributes_with_ids: (Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids - user_bind_base_dn: Distinguished name of LDAP node used as the base for user searches - user_custom_filter: (Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses. - user_id_attribute_names: Name(s) of user record attributes used for matching user login id (comma separated list) - user_objectclass: (Optional) Name of user record objectclass used for finding user during login id - allow_normal_group_membership: Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - allow_roles_from_normal_groups: LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. - allow_direct_roles: Allows roles to be directly assigned to LDAP auth'd users. + Dynamic writeable type for LDAPConfig removes: + can, default_new_user_groups, default_new_user_roles, groups, has_auth_password, modified_at, modified_by, user_attributes, url + + Attributes: + alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. + auth_password: (Write-Only) Password for the LDAP account used to access the LDAP server + auth_requires_role: Users will not be allowed to login at all unless a role for them is found in LDAP if set to true + auth_username: Distinguished name of LDAP account used to access the LDAP server + connection_host: LDAP server hostname + connection_port: LDAP host port + connection_tls: Use Transport Layer Security + connection_tls_no_verify: Do not verify peer when using TLS + default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP + default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP + enabled: Enable/Disable LDAP authentication for the server + force_no_page: Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it. + groups_base_dn: Base dn for finding groups in LDAP searches + groups_finder_type: Identifier for a strategy for how Looker will search for groups in the LDAP server + groups_member_attribute: LDAP Group attribute that signifies the members of the groups. Most commonly 'member' + groups_objectclasses: Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches + groups_user_attribute: LDAP Group attribute that signifies the user in a group. Most commonly 'dn' + groups_with_role_ids: (Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids + merge_new_users_by_email: Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user. + set_roles_from_groups: Set user roles in Looker based on groups from LDAP + test_ldap_password: (Write-Only) Test LDAP user password. For ldap tests only. + test_ldap_user: (Write-Only) Test LDAP user login id. For ldap tests only. + user_attribute_map_email: Name of user record attributes used to indicate email address field + user_attribute_map_first_name: Name of user record attributes used to indicate first name + user_attribute_map_last_name: Name of user record attributes used to indicate last name + user_attribute_map_ldap_id: Name of user record attributes used to indicate unique record id + user_attributes_with_ids: (Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids + user_bind_base_dn: Distinguished name of LDAP node used as the base for user searches + user_custom_filter: (Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses. + user_id_attribute_names: Name(s) of user record attributes used for matching user login id (comma separated list) + user_objectclass: (Optional) Name of user record objectclass used for finding user during login id + allow_normal_group_membership: Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. + allow_roles_from_normal_groups: LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. + allow_direct_roles: Allows roles to be directly assigned to LDAP auth'd users. """ alternate_email_login_allowed: Optional[bool] = None @@ -12059,11 +12106,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteLegacyFeature(model.Model): """ - Dynamic writeable type for LegacyFeature removes: -can, id, name, description, enabled, disallowed_as_of_version, disable_on_upgrade_to_version, end_of_life_version, documentation_url, approximate_disable_date, approximate_end_of_life_date, has_disabled_on_upgrade + Dynamic writeable type for LegacyFeature removes: + can, id, name, description, enabled, disallowed_as_of_version, disable_on_upgrade_to_version, end_of_life_version, documentation_url, approximate_disable_date, approximate_end_of_life_date, has_disabled_on_upgrade - Attributes: - enabled_locally: Whether this feature has been enabled by a user + Attributes: + enabled_locally: Whether this feature has been enabled by a user """ enabled_locally: Optional[bool] = None @@ -12075,11 +12122,11 @@ def __init__(self, *, enabled_locally: Optional[bool] = None): @attr.s(auto_attribs=True, init=False) class WriteLookBasic(model.Model): """ - Dynamic writeable type for LookBasic removes: -can, content_metadata_id, id, title + Dynamic writeable type for LookBasic removes: + can, content_metadata_id, id, title - Attributes: - user_id: User Id + Attributes: + user_id: User Id """ user_id: Optional[int] = None @@ -12091,14 +12138,14 @@ def __init__(self, *, user_id: Optional[int] = None): @attr.s(auto_attribs=True, init=False) class WriteLookmlModel(model.Model): """ - Dynamic writeable type for LookmlModel removes: -can, explores, has_content, label + Dynamic writeable type for LookmlModel removes: + can, explores, has_content, label - Attributes: - allowed_db_connection_names: Array of names of connections this model is allowed to use - name: Name of the model. Also used as the unique identifier - project_name: Name of project containing the model - unlimited_db_connections: Is this model allowed to use all current and future connections + Attributes: + allowed_db_connection_names: Array of names of connections this model is allowed to use + name: Name of the model. Also used as the unique identifier + project_name: Name of project containing the model + unlimited_db_connections: Is this model allowed to use all current and future connections """ allowed_db_connection_names: Optional[Sequence[str]] = None @@ -12123,22 +12170,22 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteLookWithQuery(model.Model): """ - Dynamic writeable type for LookWithQuery removes: -can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, url + Dynamic writeable type for LookWithQuery removes: + can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, url - Attributes: - title: Look Title - user_id: User Id - deleted: Whether or not a look is 'soft' deleted. - description: Description - is_run_on_load: auto-run query when Look viewed - public: Is Public - query_id: Query Id - folder: Dynamic writeable type for FolderBase removes: -id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - folder_id: Folder Id - query: Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations + Attributes: + title: Look Title + user_id: User Id + deleted: Whether or not a look is 'soft' deleted. + description: Description + is_run_on_load: auto-run query when Look viewed + public: Is Public + query_id: Query Id + folder: Dynamic writeable type for FolderBase removes: + id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can + folder_id: Folder Id + query: Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations """ title: Optional[str] = None @@ -12181,17 +12228,17 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteMergeQuery(model.Model): """ - Dynamic writeable type for MergeQuery removes: -can, id, result_maker_id + Dynamic writeable type for MergeQuery removes: + can, id, result_maker_id - Attributes: - column_limit: Column Limit - dynamic_fields: Dynamic Fields - pivots: Pivots - sorts: Sorts - source_queries: Source Queries defining the results to be merged. - total: Total - vis_config: Visualization Config + Attributes: + column_limit: Column Limit + dynamic_fields: Dynamic Fields + pivots: Pivots + sorts: Sorts + source_queries: Source Queries defining the results to be merged. + total: Total + vis_config: Visualization Config """ column_limit: Optional[str] = None @@ -12225,12 +12272,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteModelSet(model.Model): """ - Dynamic writeable type for ModelSet removes: -can, all_access, built_in, id, url + Dynamic writeable type for ModelSet removes: + can, all_access, built_in, id, url - Attributes: - models: - name: Name of ModelSet + Attributes: + models: + name: Name of ModelSet """ models: Optional[Sequence[str]] = None @@ -12246,15 +12293,15 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteOauthClientApp(model.Model): """ - Dynamic writeable type for OauthClientApp removes: -can, client_guid, tokens_invalid_before, activated_users + Dynamic writeable type for OauthClientApp removes: + can, client_guid, tokens_invalid_before, activated_users - Attributes: - redirect_uri: The uri with which this application will receive an auth code by browser redirect. - display_name: The application's display name - description: A description of the application that will be displayed to users - enabled: When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. - group_id: If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance + Attributes: + redirect_uri: The uri with which this application will receive an auth code by browser redirect. + display_name: The application's display name + description: A description of the application that will be displayed to users + enabled: When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. + group_id: If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance """ redirect_uri: Optional[str] = None @@ -12282,34 +12329,34 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteOIDCConfig(model.Model): """ - Dynamic writeable type for OIDCConfig removes: -can, default_new_user_groups, default_new_user_roles, groups, modified_at, modified_by, test_slug, user_attributes, url - - Attributes: - alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - audience: OpenID Provider Audience - auth_requires_role: Users will not be allowed to login at all unless a role for them is found in OIDC if set to true - authorization_endpoint: OpenID Provider Authorization Url - default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC - default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC - enabled: Enable/Disable OIDC authentication for the server - groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - groups_with_role_ids: (Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids - identifier: Relying Party Identifier (provided by OpenID Provider) - issuer: OpenID Provider Issuer - new_user_migration_types: Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - scopes: Array of scopes to request. - secret: (Write-Only) Relying Party Secret (provided by OpenID Provider) - set_roles_from_groups: Set user roles in Looker based on groups from OIDC - token_endpoint: OpenID Provider Token Url - user_attribute_map_email: Name of user record attributes used to indicate email address field - user_attribute_map_first_name: Name of user record attributes used to indicate first name - user_attribute_map_last_name: Name of user record attributes used to indicate last name - user_attributes_with_ids: (Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids - userinfo_endpoint: OpenID Provider User Information Url - allow_normal_group_membership: Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - allow_roles_from_normal_groups: OIDC auth'd users will inherit roles from non-reflected Looker groups. - allow_direct_roles: Allows roles to be directly assigned to OIDC auth'd users. + Dynamic writeable type for OIDCConfig removes: + can, default_new_user_groups, default_new_user_roles, groups, modified_at, modified_by, test_slug, user_attributes, url + + Attributes: + alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. + audience: OpenID Provider Audience + auth_requires_role: Users will not be allowed to login at all unless a role for them is found in OIDC if set to true + authorization_endpoint: OpenID Provider Authorization Url + default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC + default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC + enabled: Enable/Disable OIDC authentication for the server + groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' + groups_with_role_ids: (Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids + identifier: Relying Party Identifier (provided by OpenID Provider) + issuer: OpenID Provider Issuer + new_user_migration_types: Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' + scopes: Array of scopes to request. + secret: (Write-Only) Relying Party Secret (provided by OpenID Provider) + set_roles_from_groups: Set user roles in Looker based on groups from OIDC + token_endpoint: OpenID Provider Token Url + user_attribute_map_email: Name of user record attributes used to indicate email address field + user_attribute_map_first_name: Name of user record attributes used to indicate first name + user_attribute_map_last_name: Name of user record attributes used to indicate last name + user_attributes_with_ids: (Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids + userinfo_endpoint: OpenID Provider User Information Url + allow_normal_group_membership: Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. + allow_roles_from_normal_groups: OIDC auth'd users will inherit roles from non-reflected Looker groups. + allow_direct_roles: Allows roles to be directly assigned to OIDC auth'd users. """ alternate_email_login_allowed: Optional[bool] = None @@ -12394,14 +12441,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WritePasswordConfig(model.Model): """ - Dynamic writeable type for PasswordConfig removes: -can + Dynamic writeable type for PasswordConfig removes: + can - Attributes: - min_length: Minimum number of characters required for a new password. Must be between 7 and 100 - require_numeric: Require at least one numeric character - require_upperlower: Require at least one uppercase and one lowercase letter - require_special: Require at least one special character + Attributes: + min_length: Minimum number of characters required for a new password. Must be between 7 and 100 + require_numeric: Require at least one numeric character + require_upperlower: Require at least one uppercase and one lowercase letter + require_special: Require at least one special character """ min_length: Optional[int] = None @@ -12426,12 +12473,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WritePermissionSet(model.Model): """ - Dynamic writeable type for PermissionSet removes: -can, all_access, built_in, id, url + Dynamic writeable type for PermissionSet removes: + can, all_access, built_in, id, url - Attributes: - name: Name of PermissionSet - permissions: + Attributes: + name: Name of PermissionSet + permissions: """ name: Optional[str] = None @@ -12447,28 +12494,28 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteProject(model.Model): """ - Dynamic writeable type for Project removes: -can, id, uses_git, is_example - - Attributes: - name: Project display name - git_remote_url: Git remote repository url - git_username: Git username for HTTPS authentication. (For production only, if using user attributes.) - git_password: (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) - git_production_branch_name: Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. - use_git_cookie_auth: If true, the project uses a git cookie for authentication. - git_username_user_attribute: User attribute name for username in per-user HTTPS authentication. - git_password_user_attribute: User attribute name for password in per-user HTTPS authentication. - git_service_name: Name of the git service provider - git_application_server_http_port: Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) - git_application_server_http_scheme: Scheme that is running on application server (for PRs, file browsing, etc.) - deploy_secret: (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. - unset_deploy_secret: (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. - pull_request_mode: The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". - validation_required: Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository - git_release_mgmt_enabled: If true, advanced git release management is enabled for this project - allow_warnings: Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). - dependency_status: Status of dependencies in your manifest & lockfile + Dynamic writeable type for Project removes: + can, id, uses_git, is_example + + Attributes: + name: Project display name + git_remote_url: Git remote repository url + git_username: Git username for HTTPS authentication. (For production only, if using user attributes.) + git_password: (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) + git_production_branch_name: Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. + use_git_cookie_auth: If true, the project uses a git cookie for authentication. + git_username_user_attribute: User attribute name for username in per-user HTTPS authentication. + git_password_user_attribute: User attribute name for password in per-user HTTPS authentication. + git_service_name: Name of the git service provider + git_application_server_http_port: Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) + git_application_server_http_scheme: Scheme that is running on application server (for PRs, file browsing, etc.) + deploy_secret: (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. + unset_deploy_secret: (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. + pull_request_mode: The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". + validation_required: Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository + git_release_mgmt_enabled: If true, advanced git release management is enabled for this project + allow_warnings: Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). + dependency_status: Status of dependencies in your manifest & lockfile """ name: Optional[str] = None @@ -12535,29 +12582,29 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteQuery(model.Model): """ - Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations - - Attributes: - model: Model - view: Explore Name - fields: Fields - pivots: Pivots - fill_fields: Fill Fields - filters: Filters - filter_expression: Filter Expression - sorts: Sorting for the query results. Use the format `["view.field", ...]` to sort on fields in ascending order. Use the format `["view.field desc", ...]` to sort on fields in descending order. Use `["__UNSORTED__"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort. - limit: Limit - column_limit: Column Limit - total: Total - row_total: Raw Total - subtotals: Fields on which to run subtotals - vis_config: Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - filter_config: The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over "filters". When creating a query or modifying an existing query, "filter_config" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque. - visible_ui_sections: Visible UI Sections - dynamic_fields: Dynamic Fields - client_id: Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. - query_timezone: Query Timezone + Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations + + Attributes: + model: Model + view: Explore Name + fields: Fields + pivots: Pivots + fill_fields: Fill Fields + filters: Filters + filter_expression: Filter Expression + sorts: Sorting for the query results. Use the format `["view.field", ...]` to sort on fields in ascending order. Use the format `["view.field desc", ...]` to sort on fields in descending order. Use `["__UNSORTED__"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort. + limit: Limit + column_limit: Column Limit + total: Total + row_total: Raw Total + subtotals: Fields on which to run subtotals + vis_config: Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. + filter_config: The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over "filters". When creating a query or modifying an existing query, "filter_config" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque. + visible_ui_sections: Visible UI Sections + dynamic_fields: Dynamic Fields + client_id: Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. + query_timezone: Query Timezone """ model: str @@ -12627,13 +12674,13 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteRepositoryCredential(model.Model): """ - Dynamic writeable type for RepositoryCredential removes: -can, id, root_project_id, remote_url, is_configured + Dynamic writeable type for RepositoryCredential removes: + can, id, root_project_id, remote_url, is_configured - Attributes: - git_username: Git username for HTTPS authentication. - git_password: (Write-Only) Git password for HTTPS authentication. - ssh_public_key: Public deploy key for SSH authentication. + Attributes: + git_username: Git username for HTTPS authentication. + git_password: (Write-Only) Git password for HTTPS authentication. + ssh_public_key: Public deploy key for SSH authentication. """ git_username: Optional[str] = None @@ -12655,12 +12702,12 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteResultMakerWithIdVisConfigAndDynamicFields(model.Model): """ - Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: -id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config + Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: + id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config - Attributes: - query: Dynamic writeable type for Query removes: -can, id, slug, share_url, expanded_share_url, url, has_table_calculations + Attributes: + query: Dynamic writeable type for Query removes: + can, id, slug, share_url, expanded_share_url, url, has_table_calculations """ query: Optional["WriteQuery"] = None @@ -12672,17 +12719,17 @@ def __init__(self, *, query: Optional["WriteQuery"] = None): @attr.s(auto_attribs=True, init=False) class WriteRole(model.Model): """ - Dynamic writeable type for Role removes: -can, id, url, users_url + Dynamic writeable type for Role removes: + can, id, url, users_url - Attributes: - name: Name of Role - permission_set: Dynamic writeable type for PermissionSet removes: -can, all_access, built_in, id, url - permission_set_id: (Write-Only) Id of permission set - model_set: Dynamic writeable type for ModelSet removes: -can, all_access, built_in, id, url - model_set_id: (Write-Only) Id of model set + Attributes: + name: Name of Role + permission_set: Dynamic writeable type for PermissionSet removes: + can, all_access, built_in, id, url + permission_set_id: (Write-Only) Id of permission set + model_set: Dynamic writeable type for ModelSet removes: + can, all_access, built_in, id, url + model_set_id: (Write-Only) Id of model set """ name: Optional[str] = None @@ -12710,34 +12757,34 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteSamlConfig(model.Model): """ - Dynamic writeable type for SamlConfig removes: -can, test_slug, modified_at, modified_by, default_new_user_roles, default_new_user_groups, groups, user_attributes, url - - Attributes: - enabled: Enable/Disable Saml authentication for the server - idp_cert: Identity Provider Certificate (provided by IdP) - idp_url: Identity Provider Url (provided by IdP) - idp_issuer: Identity Provider Issuer (provided by IdP) - idp_audience: Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP. - allowed_clock_drift: Count of seconds of clock drift to allow when validating timestamps of assertions. - user_attribute_map_email: Name of user record attributes used to indicate email address field - user_attribute_map_first_name: Name of user record attributes used to indicate first name - user_attribute_map_last_name: Name of user record attributes used to indicate last name - new_user_migration_types: Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml - default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml - set_roles_from_groups: Set user roles in Looker based on groups from Saml - groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - groups_with_role_ids: (Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids - auth_requires_role: Users will not be allowed to login at all unless a role for them is found in Saml if set to true - user_attributes_with_ids: (Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids - groups_finder_type: Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes'] - groups_member_value: Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes' - bypass_login_page: Bypass the login page when user authentication is required. Redirect to IdP immediately instead. - allow_normal_group_membership: Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - allow_roles_from_normal_groups: SAML auth'd users will inherit roles from non-reflected Looker groups. - allow_direct_roles: Allows roles to be directly assigned to SAML auth'd users. + Dynamic writeable type for SamlConfig removes: + can, test_slug, modified_at, modified_by, default_new_user_roles, default_new_user_groups, groups, user_attributes, url + + Attributes: + enabled: Enable/Disable Saml authentication for the server + idp_cert: Identity Provider Certificate (provided by IdP) + idp_url: Identity Provider Url (provided by IdP) + idp_issuer: Identity Provider Issuer (provided by IdP) + idp_audience: Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP. + allowed_clock_drift: Count of seconds of clock drift to allow when validating timestamps of assertions. + user_attribute_map_email: Name of user record attributes used to indicate email address field + user_attribute_map_first_name: Name of user record attributes used to indicate first name + user_attribute_map_last_name: Name of user record attributes used to indicate last name + new_user_migration_types: Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' + alternate_email_login_allowed: Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. + default_new_user_role_ids: (Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml + default_new_user_group_ids: (Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml + set_roles_from_groups: Set user roles in Looker based on groups from Saml + groups_attribute: Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' + groups_with_role_ids: (Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids + auth_requires_role: Users will not be allowed to login at all unless a role for them is found in Saml if set to true + user_attributes_with_ids: (Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids + groups_finder_type: Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes'] + groups_member_value: Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes' + bypass_login_page: Bypass the login page when user authentication is required. Redirect to IdP immediately instead. + allow_normal_group_membership: Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. + allow_roles_from_normal_groups: SAML auth'd users will inherit roles from non-reflected Looker groups. + allow_direct_roles: Allows roles to be directly assigned to SAML auth'd users. """ enabled: Optional[bool] = None @@ -12822,36 +12869,36 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteScheduledPlan(model.Model): """ - Dynamic writeable type for ScheduledPlan removes: -id, created_at, updated_at, title, user, next_run_at, last_run_at, can - - Attributes: - name: Name of this scheduled plan - user_id: User Id which owns this scheduled plan - run_as_recipient: Whether schedule is run as recipient (only applicable for email recipients) - enabled: Whether the ScheduledPlan is enabled - look_id: Id of a look - dashboard_id: Id of a dashboard - lookml_dashboard_id: Id of a LookML dashboard - filters_string: Query string to run look or dashboard with - dashboard_filters: (DEPRECATED) Alias for filters_string field - require_results: Delivery should occur if running the dashboard or look returns results - require_no_results: Delivery should occur if the dashboard look does not return results - require_change: Delivery should occur if data have changed since the last run - send_all_results: Will run an unlimited query and send all results. - crontab: Vixie-Style crontab specification when to run - datagroup: Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string) - timezone: Timezone for interpreting the specified crontab (default is Looker instance timezone) - query_id: Query id - scheduled_plan_destination: Scheduled plan destinations - run_once: Whether the plan in question should only be run once (usually for testing) - include_links: Whether links back to Looker should be included in this ScheduledPlan - pdf_paper_size: The size of paper the PDF should be formatted to fit. Valid values are: "letter", "legal", "tabloid", "a0", "a1", "a2", "a3", "a4", "a5". - pdf_landscape: Whether the PDF should be formatted for landscape orientation - embed: Whether this schedule is in an embed context or not - color_theme: Color scheme of the dashboard if applicable - long_tables: Whether or not to expand table vis to full length - inline_table_width: The pixel width at which we render the inline table visualizations + Dynamic writeable type for ScheduledPlan removes: + id, created_at, updated_at, title, user, next_run_at, last_run_at, can + + Attributes: + name: Name of this scheduled plan + user_id: User Id which owns this scheduled plan + run_as_recipient: Whether schedule is run as recipient (only applicable for email recipients) + enabled: Whether the ScheduledPlan is enabled + look_id: Id of a look + dashboard_id: Id of a dashboard + lookml_dashboard_id: Id of a LookML dashboard + filters_string: Query string to run look or dashboard with + dashboard_filters: (DEPRECATED) Alias for filters_string field + require_results: Delivery should occur if running the dashboard or look returns results + require_no_results: Delivery should occur if the dashboard look does not return results + require_change: Delivery should occur if data have changed since the last run + send_all_results: Will run an unlimited query and send all results. + crontab: Vixie-Style crontab specification when to run + datagroup: Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string) + timezone: Timezone for interpreting the specified crontab (default is Looker instance timezone) + query_id: Query id + scheduled_plan_destination: Scheduled plan destinations + run_once: Whether the plan in question should only be run once (usually for testing) + include_links: Whether links back to Looker should be included in this ScheduledPlan + pdf_paper_size: The size of paper the PDF should be formatted to fit. Valid values are: "letter", "legal", "tabloid", "a0", "a1", "a2", "a3", "a4", "a5". + pdf_landscape: Whether the PDF should be formatted for landscape orientation + embed: Whether this schedule is in an embed context or not + color_theme: Color scheme of the dashboard if applicable + long_tables: Whether or not to expand table vis to full length + inline_table_width: The pixel width at which we render the inline table visualizations """ name: Optional[str] = None @@ -12944,15 +12991,15 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteSessionConfig(model.Model): """ - Dynamic writeable type for SessionConfig removes: -can + Dynamic writeable type for SessionConfig removes: + can - Attributes: - allow_persistent_sessions: Allow users to have persistent sessions when they login - session_minutes: Number of minutes for user sessions. Must be between 5 and 43200 - unlimited_sessions_per_user: Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time). - use_inactivity_based_logout: Enforce session logout for sessions that are inactive for 15 minutes. - track_session_location: Track location of session when user logs in. + Attributes: + allow_persistent_sessions: Allow users to have persistent sessions when they login + session_minutes: Number of minutes for user sessions. Must be between 5 and 43200 + unlimited_sessions_per_user: Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time). + use_inactivity_based_logout: Enforce session logout for sessions that are inactive for 15 minutes. + track_session_location: Track location of session when user logs in. """ allow_persistent_sessions: Optional[bool] = None @@ -12980,20 +13027,22 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteSetting(model.Model): """ - Dynamic writeable type for Setting + Dynamic writeable type for Setting - Attributes: - extension_framework_enabled: Toggle extension framework on or off - marketplace_auto_install_enabled: Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled. - marketplace_enabled: Toggle marketplace on or off - whitelabel_configuration: Dynamic writeable type for WhitelabelConfiguration removes: -id, logo_url, favicon_url + Attributes: + extension_framework_enabled: Toggle extension framework on or off + marketplace_auto_install_enabled: Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled. + marketplace_enabled: Toggle marketplace on or off + whitelabel_configuration: Dynamic writeable type for WhitelabelConfiguration removes: + id, logo_url, favicon_url + custom_welcome_email: """ extension_framework_enabled: Optional[bool] = None marketplace_auto_install_enabled: Optional[bool] = None marketplace_enabled: Optional[bool] = None whitelabel_configuration: Optional["WriteWhitelabelConfiguration"] = None + custom_welcome_email: Optional["CustomWelcomeEmail"] = None def __init__( self, @@ -13001,25 +13050,27 @@ def __init__( extension_framework_enabled: Optional[bool] = None, marketplace_auto_install_enabled: Optional[bool] = None, marketplace_enabled: Optional[bool] = None, - whitelabel_configuration: Optional["WriteWhitelabelConfiguration"] = None + whitelabel_configuration: Optional["WriteWhitelabelConfiguration"] = None, + custom_welcome_email: Optional["CustomWelcomeEmail"] = None ): self.extension_framework_enabled = extension_framework_enabled self.marketplace_auto_install_enabled = marketplace_auto_install_enabled self.marketplace_enabled = marketplace_enabled self.whitelabel_configuration = whitelabel_configuration + self.custom_welcome_email = custom_welcome_email @attr.s(auto_attribs=True, init=False) class WriteSshServer(model.Model): """ - Dynamic writeable type for SshServer removes: -ssh_server_id, finger_print, sha_finger_print, public_key, status + Dynamic writeable type for SshServer removes: + ssh_server_id, finger_print, sha_finger_print, public_key, status - Attributes: - ssh_server_name: The name to identify this SSH Server - ssh_server_host: The hostname or ip address of the SSH Server - ssh_server_port: The port to connect to on the SSH Server - ssh_server_user: The username used to connect to the SSH Server + Attributes: + ssh_server_name: The name to identify this SSH Server + ssh_server_host: The hostname or ip address of the SSH Server + ssh_server_port: The port to connect to on the SSH Server + ssh_server_user: The username used to connect to the SSH Server """ ssh_server_name: Optional[str] = None @@ -13044,13 +13095,13 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteSshTunnel(model.Model): """ - Dynamic writeable type for SshTunnel removes: -tunnel_id, ssh_server_name, ssh_server_host, ssh_server_port, ssh_server_user, last_attempt, local_host_port, status + Dynamic writeable type for SshTunnel removes: + tunnel_id, ssh_server_name, ssh_server_host, ssh_server_port, ssh_server_user, last_attempt, local_host_port, status - Attributes: - ssh_server_id: SSH Server ID - database_host: Hostname or IP Address of the Database Server - database_port: Port that the Database Server is listening on + Attributes: + ssh_server_id: SSH Server ID + database_host: Hostname or IP Address of the Database Server + database_port: Port that the Database Server is listening on """ ssh_server_id: Optional[str] = None @@ -13072,14 +13123,14 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteTheme(model.Model): """ - Dynamic writeable type for Theme removes: -can, id + Dynamic writeable type for Theme removes: + can, id - Attributes: - begin_at: Timestamp for when this theme becomes active. Null=always - end_at: Timestamp for when this theme expires. Null=never - name: Name of theme. Can only be alphanumeric and underscores. - settings: + Attributes: + begin_at: Timestamp for when this theme becomes active. Null=always + end_at: Timestamp for when this theme expires. Null=never + name: Name of theme. Can only be alphanumeric and underscores. + settings: """ begin_at: Optional[datetime.datetime] = None @@ -13104,19 +13155,19 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteUser(model.Model): """ - Dynamic writeable type for User removes: -can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, url + Dynamic writeable type for User removes: + can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, url - Attributes: - credentials_email: Dynamic writeable type for CredentialsEmail removes: -can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url - first_name: First name - home_folder_id: ID string for user's home folder - is_disabled: Account has been disabled - last_name: Last name - locale: User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example. - models_dir_validated: User's dev workspace has been checked for presence of applicable production projects - ui_state: Per user dictionary of undocumented state information owned by the Looker UI. + Attributes: + credentials_email: Dynamic writeable type for CredentialsEmail removes: + can, created_at, is_disabled, logged_in_at, password_reset_url, type, url, user_url + first_name: First name + home_folder_id: ID string for user's home folder + is_disabled: Account has been disabled + last_name: Last name + locale: User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example. + models_dir_validated: User's dev workspace has been checked for presence of applicable production projects + ui_state: Per user dictionary of undocumented state information owned by the Looker UI. """ credentials_email: Optional["WriteCredentialsEmail"] = None @@ -13153,18 +13204,18 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteUserAttribute(model.Model): """ - Dynamic writeable type for UserAttribute removes: -can, id, is_system, is_permanent + Dynamic writeable type for UserAttribute removes: + can, id, is_system, is_permanent - Attributes: - name: Name of user attribute - label: Human-friendly label for user attribute - type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") - default_value: Default value for when no value is set on the user - value_is_hidden: If true, users will not be able to view values of this attribute - user_can_view: Non-admin users can see the values of their attributes and use them in filters - user_can_edit: Users can change the value of this attribute for themselves - hidden_value_domain_whitelist: Destinations to which a hidden attribute may be sent. Once set, cannot be edited. + Attributes: + name: Name of user attribute + label: Human-friendly label for user attribute + type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + default_value: Default value for when no value is set on the user + value_is_hidden: If true, users will not be able to view values of this attribute + user_can_view: Non-admin users can see the values of their attributes and use them in filters + user_can_edit: Users can change the value of this attribute for themselves + hidden_value_domain_whitelist: Destinations to which a hidden attribute may be sent. Once set, cannot be edited. """ name: str @@ -13201,11 +13252,11 @@ def __init__( @attr.s(auto_attribs=True, init=False) class WriteUserAttributeWithValue(model.Model): """ - Dynamic writeable type for UserAttributeWithValue removes: -can, name, label, rank, user_id, user_can_edit, value_is_hidden, user_attribute_id, source, hidden_value_domain_whitelist + Dynamic writeable type for UserAttributeWithValue removes: + can, name, label, rank, user_id, user_can_edit, value_is_hidden, user_attribute_id, source, hidden_value_domain_whitelist - Attributes: - value: Value of attribute for user + Attributes: + value: Value of attribute for user """ value: Optional[str] = None @@ -13217,23 +13268,23 @@ def __init__(self, *, value: Optional[str] = None): @attr.s(auto_attribs=True, init=False) class WriteWhitelabelConfiguration(model.Model): """ - Dynamic writeable type for WhitelabelConfiguration removes: -id, logo_url, favicon_url - - Attributes: - logo_file: Customer logo image. Expected base64 encoded data (write-only) - favicon_file: Custom favicon image. Expected base64 encoded data (write-only) - default_title: Default page title - show_help_menu: Boolean to toggle showing help menus - show_docs: Boolean to toggle showing docs - show_email_sub_options: Boolean to toggle showing email subscription options. - allow_looker_mentions: Boolean to toggle mentions of Looker in emails - allow_looker_links: Boolean to toggle links to Looker in emails - custom_welcome_email_advanced: Allow subject line and email heading customization in customized emails” - setup_mentions: Remove the word Looker from appearing in the account setup page - alerts_logo: Remove Looker logo from Alerts - alerts_links: Remove Looker links from Alerts - folders_mentions: Remove Looker mentions in home folder page when you don’t have any items saved + Dynamic writeable type for WhitelabelConfiguration removes: + id, logo_url, favicon_url + + Attributes: + logo_file: Customer logo image. Expected base64 encoded data (write-only) + favicon_file: Custom favicon image. Expected base64 encoded data (write-only) + default_title: Default page title + show_help_menu: Boolean to toggle showing help menus + show_docs: Boolean to toggle showing docs + show_email_sub_options: Boolean to toggle showing email subscription options. + allow_looker_mentions: Boolean to toggle mentions of Looker in emails + allow_looker_links: Boolean to toggle links to Looker in emails + custom_welcome_email_advanced: Allow subject line and email heading customization in customized emails” + setup_mentions: Remove the word Looker from appearing in the account setup page + alerts_logo: Remove Looker logo from Alerts + alerts_links: Remove Looker links from Alerts + folders_mentions: Remove Looker mentions in home folder page when you don’t have any items saved """ logo_file: Optional[str] = None @@ -13762,6 +13813,10 @@ def __init__( ForwardRef("InternalHelpResourcesContent"), # type: ignore forward_ref_structure_hook, # type:ignore ) +sr.converter40.register_structure_hook( + ForwardRef("InvestigativeContentType"), # type: ignore + forward_ref_structure_hook, # type:ignore +) sr.converter40.register_structure_hook( ForwardRef("LDAPConfig"), # type: ignore forward_ref_structure_hook, # type:ignore @@ -14218,6 +14273,10 @@ def __init__( ForwardRef("UserAttributeWithValue"), # type: ignore forward_ref_structure_hook, # type:ignore ) +sr.converter40.register_structure_hook( + ForwardRef("UserEmailOnly"), # type: ignore + forward_ref_structure_hook, # type:ignore +) sr.converter40.register_structure_hook( ForwardRef("UserLoginLockout"), # type: ignore forward_ref_structure_hook, # type:ignore @@ -14302,10 +14361,6 @@ def __init__( ForwardRef("WriteCredentialsEmail"), # type: ignore forward_ref_structure_hook, # type:ignore ) -sr.converter40.register_structure_hook( - ForwardRef("WriteCustomWelcomeEmail"), # type: ignore - forward_ref_structure_hook, # type:ignore -) sr.converter40.register_structure_hook( ForwardRef("WriteDashboard"), # type: ignore forward_ref_structure_hook, # type:ignore diff --git a/python/looker_sdk/sdk/constants.py b/python/looker_sdk/sdk/constants.py index a8d31fa11..04efdaefb 100644 --- a/python/looker_sdk/sdk/constants.py +++ b/python/looker_sdk/sdk/constants.py @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -sdk_version = "21.14" +sdk_version = "21.16" environment_prefix = "LOOKERSDK" diff --git a/spec/Looker.3.1.json b/spec/Looker.3.1.json index 5a128c5a0..b8aab34cd 100644 --- a/spec/Looker.3.1.json +++ b/spec/Looker.3.1.json @@ -2,9 +2,9 @@ "swagger": "2.0", "info": { "version": "3.1.0", - "x-looker-release-version": "21.14.0", + "x-looker-release-version": "21.16.0", "title": "Looker API 3.1 Reference", - "description": "### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### Try It Out!\n\nThis section describes the existing 'api-docs' page available on Looker instances. We recommend using the\n[API Explorer](https://looker.com/docs/r/api/explorer) instead.\n\nThe 'api-docs' page served by the Looker instance includes 'Try It Out!' buttons for each API method. After logging\nin with API3 credentials, you can use the \"Try It Out!\" buttons to call the API directly from the documentation\npage to interactively explore API features and responses.\n\n**NOTE**! With great power comes great responsibility: The \"Try It Out!\" button makes API calls to your live Looker\ninstance. Be especially careful with destructive API operations such as `delete_user` or similar.\nThere is no \"undo\" for API operations. (API Explorer's \"Run It\" feature requires a check mark before running\nAPI operations that can change data.)\n\n\n### In This Release\n\nThe following are a few examples of noteworthy items that have changed between API 3.0 and API 3.1.\nFor more comprehensive coverage of API changes, please see the release notes for your Looker release.\n\n### Examples of new things added in API 3.1 (compared to API 3.0):\n\n* [Dashboard construction](#!/3.1/Dashboard/) APIs\n* [Themes](#!/3.1/Theme/) and [custom color collections](#!/3.1/ColorCollection) APIs\n* Create and run [SQL Runner](#!/3.1/Query/run_sql_query) queries\n* Create and run [merged results](#!/3.1/Query/create_merge_query) queries\n* Create and modify [dashboard filters](#!/3.1/Dashboard/create_dashboard_filter)\n* Create and modify [password requirements](#!/3.1/Auth/password_config)\n\n### Deprecated in API 3.0\n\nThe following functions and properties have been deprecated in API 3.0. They continue to exist and work in API 3.0\nfor the next several Looker releases but they have not been carried forward to API 3.1:\n\n* Dashboard Prefetch functions\n* User access_filter functions\n* User API 1.0 credentials functions\n* Space.is_root and Space.is_user_root properties. Use Space.is_shared_root and Space.is_users_root instead.\n\n### Semantic changes in API 3.1:\n\n* [all_looks()](#!/3.1/Look/all_looks) no longer includes soft-deleted looks, matching [all_dashboards()](#!/3.1/Dashboard/all_dashboards) behavior.\nYou can find soft-deleted looks using [search_looks()](#!/3.1/Look/search_looks) with the `deleted` param set to True.\n* [all_spaces()](#!/3.1/Space/all_spaces) no longer includes duplicate items\n* [search_users()](#!/3.1/User/search_users) no longer accepts Y,y,1,0,N,n for Boolean params, only \"true\" and \"false\".\n* For greater client and network compatibility, [render_task_results](#!/3.1/RenderTask/render_task_results) now returns\nHTTP status **202 Accepted** instead of HTTP status **102 Processing**\n* [all_running_queries()](#!/3.1/Query/all_running_queries) and [kill_query](#!/3.1/Query/kill_query) functions have moved into the [Query](#!/3.1/Query/) function group.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n", + "description": "### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### Try It Out!\n\nThis section describes the existing 'api-docs' page available on Looker instances. We recommend using the\n[API Explorer](https://looker.com/docs/r/api/explorer) instead.\n\nThe 'api-docs' page served by the Looker instance includes 'Try It Out!' buttons for each API method. After logging\nin with API3 credentials, you can use the \"Try It Out!\" buttons to call the API directly from the documentation\npage to interactively explore API features and responses.\n\n**NOTE**! With great power comes great responsibility: The \"Try It Out!\" button makes API calls to your live Looker\ninstance. Be especially careful with destructive API operations such as `delete_user` or similar.\nThere is no \"undo\" for API operations. (API Explorer's \"Run It\" feature requires a check mark before running\nAPI operations that can change data.)\n\n\n### In This Release\n\nThe following are a few examples of noteworthy items that have changed between API 3.0 and API 3.1.\nFor more comprehensive coverage of API changes, please see the release notes for your Looker release.\n\n### Examples of new things added in API 3.1 (compared to API 3.0):\n\n* [Dashboard construction](#!/3.1/Dashboard/) APIs\n* [Themes](#!/3.1/Theme/) and [custom color collections](#!/3.1/ColorCollection) APIs\n* Create and run [SQL Runner](#!/3.1/Query/run_sql_query) queries\n* Create and run [merged results](#!/3.1/Query/create_merge_query) queries\n* Create and modify [dashboard filters](#!/3.1/Dashboard/create_dashboard_filter)\n* Create and modify [password requirements](#!/3.1/Auth/password_config)\n\n### Deprecated in API 3.0\n\nThe following functions and properties have been deprecated in API 3.0. They continue to exist and work in API 3.0\nfor the next several Looker releases but they have not been carried forward to API 3.1:\n\n* Dashboard Prefetch functions\n* User access_filter functions\n* User API 1.0 credentials functions\n* Space.is_root and Space.is_user_root properties. Use Space.is_shared_root and Space.is_users_root instead.\n\n### Semantic changes in API 3.1:\n\n* [all_looks()](#!/3.1/Look/all_looks) no longer includes soft-deleted looks, matching [all_dashboards()](#!/3.1/Dashboard/all_dashboards) behavior.\nYou can find soft-deleted looks using [search_looks()](#!/3.1/Look/search_looks) with the `deleted` param set to True.\n* [all_spaces()](#!/3.1/Space/all_spaces) no longer includes duplicate items\n* [search_users()](#!/3.1/User/search_users) no longer accepts Y,y,1,0,N,n for Boolean params, only \"true\" and \"false\".\n* For greater client and network compatibility, [render_task_results](#!/3.1/RenderTask/render_task_results) now returns\nHTTP status **202 Accepted** instead of HTTP status **102 Processing**\n* [all_running_queries()](#!/3.1/Query/all_running_queries) and [kill_query](#!/3.1/Query/kill_query) functions have moved into the [Query](#!/3.1/Query/) function group.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://looker.com/docs/r/api/support-policy) for more information.\n\n\n", "contact": { "name": "Looker Team", "url": "https://help.looker.com" @@ -15,10 +15,16 @@ } }, "basePath": "/api/3.1", - "consumes": ["application/json"], - "produces": ["application/json"], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], "host": "localhost:20000", - "schemes": ["https"], + "schemes": [ + "https" + ], "tags": [ { "name": "ApiAuth", @@ -128,7 +134,9 @@ "paths": { "/query_tasks": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query_task", "summary": "Run Query Async", "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n", @@ -281,7 +289,9 @@ }, "/query_tasks/multi_results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_multi_results", "summary": "Get Multiple Async Query Results", "description": "### Fetch results of multiple async queries\n\nReturns the results of multiple async queries in one request.\n\nFor Query Tasks that are not completed, the response will include the execution status of the Query Task but will not include query results.\nQuery Tasks whose results have expired will have a status of 'expired'.\nIf the user making the API request does not have sufficient privileges to view a Query Task result, the result will have a status of 'missing'\n", @@ -327,7 +337,9 @@ }, "/query_tasks/{query_task_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task", "summary": "Get Async Query Info", "description": "### Get Query Task details\n\nUse this function to check the status of an async query task. After the status\nreaches \"Complete\", you can call [query_task_results(query_task_id)](#!/Query/query_task_results) to\nretrieve the results of the query.\n\nUse [create_query_task()](#!/Query/create_query_task) to create an async query task.\n", @@ -373,11 +385,16 @@ }, "/query_tasks/{query_task_id}/results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_results", "summary": "Get Async Query Results", "description": "### Get Async Query Results\n\nReturns the results of an async query task if the query has completed.\n\nIf the query task is still running or waiting to run, this function returns 204 No Content.\n\nIf the query task ID is invalid or the cached results of the query task have expired, this function returns 404 Not Found.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task\nCall query_task_results only after the query task status reaches \"Complete\".\n\nYou can also use [query_task_multi_results()](#!/Query/query_task_multi_results) retrieve the\nresults of multiple async query tasks at the same time.\n\n#### SQL Error Handling:\nIf the query fails due to a SQL db error, how this is communicated depends on the result_format you requested in `create_query_task()`.\n\nFor `json_detail` result_format: `query_task_results()` will respond with HTTP status '200 OK' and db SQL error info\nwill be in the `errors` property of the response object. The 'data' property will be empty.\n\nFor all other result formats: `query_task_results()` will respond with HTTP status `400 Bad Request` and some db SQL error info\nwill be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`.\nThese data formats can only carry row data, and error info is not row data.\n", - "produces": ["text", "application/json"], + "produces": [ + "text", + "application/json" + ], "parameters": [ { "name": "query_task_id", @@ -419,7 +436,9 @@ }, "/queries/{query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query", "summary": "Get Query", "description": "### Get a previously created query by id.\n\nA Looker query object includes the various parameters that define a database query that has been run or\ncould be run in the future. These parameters include: model, view, fields, filters, pivots, etc.\nQuery *results* are not part of the query object.\n\nQuery objects are unique and immutable. Query objects are created automatically in Looker as users explore data.\nLooker does not delete them; they become part of the query history. When asked to create a query for\nany given set of parameters, Looker will first try to find an existing query object with matching\nparameters and will only create a new object when an appropriate object can not be found.\n\nThis 'get' method is used to get the details about a query for a given id. See the other methods here\nto 'create' and 'run' queries.\n\nNote that some fields like 'filter_config' and 'vis_config' etc are specific to how the Looker UI\nbuilds queries and visualizations and are not generally useful for API use. They are not required when\ncreating new queries and can usually just be ignored.\n\n", @@ -466,7 +485,9 @@ }, "/queries/slug/{slug}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_for_slug", "summary": "Get Query for Slug", "description": "### Get the query for a given query slug.\n\nThis returns the query for the 'slug' in a query share URL.\n\nThe 'slug' is a randomly chosen short string that is used as an alternative to the query's id value\nfor use in URLs etc. This method exists as a convenience to help you use the API to 'find' queries that\nhave been created using the Looker UI.\n\nYou can use the Looker explore page to build a query and then choose the 'Share' option to\nshow the share url for the query. Share urls generally look something like 'https://looker.yourcompany/x/vwGSbfc'.\nThe trailing 'vwGSbfc' is the share slug. You can pass that string to this api method to get details about the query.\nThose details include the 'id' that you can use to run the query. Or, you can copy the query body\n(perhaps with your own modification) and use that as the basis to make/run new queries.\n\nThis will also work with slugs from Looker explore urls like\n'https://looker.yourcompany/explore/ecommerce/orders?qid=aogBgL6o3cKK1jN3RoZl5s'. In this case\n'aogBgL6o3cKK1jN3RoZl5s' is the slug.\n", @@ -512,7 +533,9 @@ }, "/queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query", "summary": "Create Query", "description": "### Create a query.\n\nThis allows you to create a new query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", @@ -578,11 +601,18 @@ }, "/queries/{query_id}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_query", "summary": "Run Query", "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "query_id", @@ -725,11 +755,18 @@ }, "/queries/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_inline_query", "summary": "Run Inline Query", "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "result_format", @@ -873,11 +910,18 @@ }, "/queries/models/{model_name}/views/{view_name}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_url_encoded_query", "summary": "Run Url Encoded Query", "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/3.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n :fields => \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n :sorts => \"products.count desc 0\",\n :limit => \"500\",\n :query_timezone => \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "model_name", @@ -939,11 +983,15 @@ }, "/login": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login", "summary": "Login", "description": "### Present client credentials to obtain an authorization token\n\nLooker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://looker.com/docs/r/api/outh2_resource_owner_pc) pattern.\nThe client credentials required for this login must be obtained by creating an API3 key on a user account\nin the Looker Admin console. The API3 key consists of a public `client_id` and a private `client_secret`.\n\nThe access token returned by `login` must be used in the HTTP Authorization header of subsequent\nAPI requests, like this:\n```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```\nReplace \"4QDkCy...\" with the `access_token` value returned by `login`.\nThe word `token` is a string literal and must be included exactly as shown.\n\nThis function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params.\n\nExample of passing credentials in the HTTP request body:\n````\nPOST HTTP /login\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv\n````\n\n### Best Practice:\nAlways pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations.\n\nFor more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API3](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md).\n", - "consumes": ["application/x-www-form-urlencoded"], + "consumes": [ + "application/x-www-form-urlencoded" + ], "parameters": [ { "name": "client_id", @@ -986,7 +1034,9 @@ }, "/login/{user_id}": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login_user", "summary": "Login user", "description": "### Create an access token that runs as a given user.\n\nThis can only be called by an authenticated admin user. It allows that admin to generate a new\nauthentication token for the user with the given user id. That token can then be used for subsequent\nAPI calls - which are then performed *as* that target user.\n\nThe target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such\ncredentials are created by this call.\n\nThis allows for building systems where api user authentication for an arbitrary number of users is done\noutside of Looker and funneled through a single 'service account' with admin permissions. Note that a\nnew access token is generated on each call. If target users are going to be making numerous API\ncalls in a short period then it is wise to cache this authentication token rather than call this before\neach of those API calls.\n\nSee 'login' for more detail on the access token and how to use it.\n", @@ -1033,7 +1083,9 @@ }, "/logout": { "delete": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "logout", "summary": "Logout", "description": "### Logout of the API and invalidate the current access token.\n", @@ -1063,7 +1115,9 @@ }, "/backup_configuration": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "backup_configuration", "summary": "Get Backup Configuration", "description": "### WARNING: The Looker internal database backup function has been deprecated.\n", @@ -1092,7 +1146,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_backup_configuration", "summary": "Update Backup Configuration", "description": "### WARNING: The Looker internal database backup function has been deprecated.\n", @@ -1140,7 +1196,9 @@ }, "/cloud_storage": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "cloud_storage_configuration", "summary": "Get Cloud Storage", "description": "Get the current Cloud Storage Configuration.\n", @@ -1168,7 +1226,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_cloud_storage_configuration", "summary": "Update Cloud Storage", "description": "Update the current Cloud Storage Configuration.\n", @@ -1215,7 +1275,9 @@ }, "/color_collections": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "all_color_collections", "summary": "Get all Color Collections", "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1255,7 +1317,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "create_color_collection", "summary": "Create ColorCollection", "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1320,7 +1384,9 @@ }, "/color_collections/custom": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_custom", "summary": "Get all Custom Color Collections", "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1362,7 +1428,9 @@ }, "/color_collections/standard": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_standard", "summary": "Get all Standard Color Collections", "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1404,7 +1472,9 @@ }, "/color_collections/default": { "put": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "set_default_color_collection", "summary": "Set Default Color Collection", "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1453,7 +1523,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "default_color_collection", "summary": "Get Default Color Collection", "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", @@ -1483,7 +1555,9 @@ }, "/color_collections/{collection_id}": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collection", "summary": "Get Color Collection by ID", "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1527,7 +1601,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "update_color_collection", "summary": "Update Custom Color collection", "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1591,7 +1667,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "delete_color_collection", "summary": "Delete ColorCollection", "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1645,7 +1723,9 @@ }, "/content_favorite/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_favorites", "summary": "Search Favorite Contents", "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -1757,7 +1837,9 @@ }, "/content_favorite/{content_favorite_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_favorite", "summary": "Get Favorite Content", "description": "### Get favorite content by its id", @@ -1802,7 +1884,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_favorite", "summary": "Delete Favorite Content", "description": "### Delete favorite content", @@ -1848,7 +1932,9 @@ }, "/content_favorite": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_favorite", "summary": "Create Favorite Content", "description": "### Create favorite content", @@ -1907,7 +1993,9 @@ }, "/content_metadata": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadatas", "summary": "Get All Content Metadatas", "description": "### Get information about all content metadata in a space.\n", @@ -1957,7 +2045,9 @@ }, "/content_metadata/{content_metadata_id}": { "patch": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata", "summary": "Update Content Metadata", "description": "### Move a piece of content.\n", @@ -2016,7 +2106,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_metadata", "summary": "Get Content Metadata", "description": "### Get information about an individual content metadata record.\n", @@ -2063,7 +2155,9 @@ }, "/content_metadata_access": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_metadata_access", "summary": "Create Content Metadata Access", "description": "### Create content metadata access.\n", @@ -2128,7 +2222,9 @@ "x-looker-rate-limited": true }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadata_accesses", "summary": "Get All Content Metadata Accesses", "description": "### All content metadata access records for a content metadata item.\n", @@ -2178,7 +2274,9 @@ }, "/content_metadata_access/{content_metadata_access_id}": { "put": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata_access", "summary": "Update Content Metadata Access", "description": "### Update type of access for content metadata.\n", @@ -2237,7 +2335,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_metadata_access", "summary": "Delete Content Metadata Access", "description": "### Remove content metadata access.\n", @@ -2283,11 +2383,16 @@ }, "/content_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_thumbnail", "summary": "Get Content Thumbnail", "description": "### Get an image representing the contents of a dashboard or look.\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", - "produces": ["image/svg+xml", "image/png"], + "produces": [ + "image/svg+xml", + "image/png" + ], "parameters": [ { "name": "type", @@ -2360,7 +2465,9 @@ }, "/content_validation": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_validation", "summary": "Validate Content", "description": "### Validate All Content\n\nPerforms validation of all looks and dashboards\nReturns a list of errors found as well as metadata about the content validation run.\n", @@ -2411,7 +2518,9 @@ }, "/content_view/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_views", "summary": "Search Content Views", "description": "### Search Content Views\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -2543,7 +2652,9 @@ }, "/custom_welcome_email": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "custom_welcome_email", "summary": "Get Custom Welcome Email", "description": "### Get the current status and content of custom welcome emails\n", @@ -2571,7 +2682,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email", "summary": "Update Custom Welcome Email Content", "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", @@ -2631,7 +2744,9 @@ }, "/custom_welcome_email_test": { "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email_test", "summary": "Send a test welcome email to the currently logged in user with the supplied content ", "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", @@ -2684,7 +2799,9 @@ }, "/dashboards": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "all_dashboards", "summary": "Get All Dashboards", "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -2724,7 +2841,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard", "summary": "Create Dashboard", "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title`, `user_id`, and `space_id` are all required fields.\n`Space_id` and `user_id` must contain the id of an existing space or user, respectively.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", @@ -2783,7 +2902,9 @@ }, "/dashboards/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboards", "summary": "Search Dashboards", "description": "### Search Dashboards\n\nReturns an **array of dashboard objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", @@ -2958,7 +3079,9 @@ }, "/dashboards/{lookml_dashboard_id}/import/{space_id}": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "import_lookml_dashboard", "summary": "Import LookML Dashboard", "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -3044,7 +3167,9 @@ }, "/dashboards/{lookml_dashboard_id}/sync": { "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "sync_lookml_dashboard", "summary": "Sync LookML Dashboard", "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -3115,7 +3240,9 @@ }, "/dashboards/{dashboard_id}": { "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard", "summary": "Delete Dashboard", "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", @@ -3164,7 +3291,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard", "summary": "Update Dashboard", "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", @@ -3228,7 +3357,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard", "summary": "Get Dashboard", "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -3274,7 +3405,9 @@ }, "/dashboards/aggregate_table_lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_aggregate_table_lookml", "summary": "Get Aggregate Table LookML for a dashboard", "description": "### Get Aggregate Table LookML for Each Query on a Dahboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", @@ -3313,7 +3446,9 @@ }, "/dashboards/lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_lookml", "summary": "Get lookml of a UDD", "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", @@ -3352,7 +3487,9 @@ }, "/dashboard_elements/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboard_elements", "summary": "Search Dashboard Elements", "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -3438,7 +3575,9 @@ }, "/dashboard_elements/{dashboard_element_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_element", "summary": "Get DashboardElement", "description": "### Get information about the dashboard element with a specific id.", @@ -3482,7 +3621,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_element", "summary": "Delete DashboardElement", "description": "### Delete a dashboard element with a specific id.", @@ -3525,7 +3666,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_element", "summary": "Update DashboardElement", "description": "### Update the dashboard element with a specific id.", @@ -3592,7 +3735,9 @@ }, "/dashboards/{dashboard_id}/dashboard_elements": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_elements", "summary": "Get All DashboardElements", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -3641,7 +3786,9 @@ }, "/dashboard_elements": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_element", "summary": "Create DashboardElement", "description": "### Create a dashboard element on the dashboard with a specific id.", @@ -3707,7 +3854,9 @@ }, "/dashboard_filters/{dashboard_filter_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_filter", "summary": "Get Dashboard Filter", "description": "### Get information about the dashboard filters with a specific id.", @@ -3751,7 +3900,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_filter", "summary": "Delete Dashboard Filter", "description": "### Delete a dashboard filter with a specific id.", @@ -3794,7 +3945,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_filter", "summary": "Update Dashboard Filter", "description": "### Update the dashboard filter with a specific id.", @@ -3861,7 +4014,9 @@ }, "/dashboards/{dashboard_id}/dashboard_filters": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_filters", "summary": "Get All Dashboard Filters", "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", @@ -3910,7 +4065,9 @@ }, "/dashboard_filters": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_filter", "summary": "Create Dashboard Filter", "description": "### Create a dashboard filter on the dashboard with a specific id.", @@ -3976,7 +4133,9 @@ }, "/dashboard_layout_components/{dashboard_layout_component_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_component", "summary": "Get DashboardLayoutComponent", "description": "### Get information about the dashboard elements with a specific id.", @@ -4020,7 +4179,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout_component", "summary": "Update DashboardLayoutComponent", "description": "### Update the dashboard element with a specific id.", @@ -4087,7 +4248,9 @@ }, "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_dashboard_layout_components", "summary": "Get All DashboardLayoutComponents", "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", @@ -4136,7 +4299,9 @@ }, "/dashboard_layouts/{dashboard_layout_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout", "summary": "Get DashboardLayout", "description": "### Get information about the dashboard layouts with a specific id.", @@ -4180,7 +4345,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_layout", "summary": "Delete DashboardLayout", "description": "### Delete a dashboard layout with a specific id.", @@ -4229,7 +4396,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout", "summary": "Update DashboardLayout", "description": "### Update the dashboard layout with a specific id.", @@ -4296,7 +4465,9 @@ }, "/dashboards/{dashboard_id}/dashboard_layouts": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_layouts", "summary": "Get All DashboardLayouts", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -4345,7 +4516,9 @@ }, "/dashboard_layouts": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_layout", "summary": "Create DashboardLayout", "description": "### Create a dashboard layout on the dashboard with a specific id.", @@ -4411,7 +4584,9 @@ }, "/data_actions": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "perform_data_action", "summary": "Send a Data Action", "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", @@ -4452,7 +4627,9 @@ }, "/data_actions/form": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "fetch_remote_data_action_form", "summary": "Fetch Remote Data Action Form", "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", @@ -4502,7 +4679,9 @@ }, "/datagroups": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "all_datagroups", "summary": "Get All Datagroups", "description": "### Get information about all datagroups.\n", @@ -4535,7 +4714,9 @@ }, "/datagroups/{datagroup_id}": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "datagroup", "summary": "Get Datagroup", "description": "### Get information about a datagroup.\n", @@ -4572,7 +4753,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "update_datagroup", "summary": "Update Datagroup", "description": "### Update a datagroup using the specified params.\n", @@ -4638,7 +4821,9 @@ }, "/connections": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_connections", "summary": "Get All Connections", "description": "### Get information about all connections.\n", @@ -4678,7 +4863,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_connection", "summary": "Create Connection", "description": "### Create a connection using the specified configuration.\n", @@ -4737,7 +4924,9 @@ }, "/connections/{connection_name}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "connection", "summary": "Get Connection", "description": "### Get information about a connection.\n", @@ -4781,7 +4970,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_connection", "summary": "Update Connection", "description": "### Update a connection using the specified configuration.\n", @@ -4839,7 +5030,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection", "summary": "Delete Connection", "description": "### Delete a connection.\n", @@ -4884,7 +5077,9 @@ }, "/connections/{connection_name}/connection_override/{override_context}": { "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection_override", "summary": "Delete Connection Override", "description": "### Delete a connection override.\n", @@ -4942,7 +5137,9 @@ }, "/connections/{connection_name}/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection", "summary": "Test Connection", "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -5008,7 +5205,9 @@ }, "/connections/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection_config", "summary": "Test Connection Configuration", "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -5070,7 +5269,9 @@ }, "/derived_table/graph/model/{model}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "graph_derived_tables_for_model", "summary": "Get Derived Table", "description": "### Discover information about derived tables\n", @@ -5123,7 +5324,9 @@ }, "/dialect_info": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_dialect_infos", "summary": "Get All Dialect Infos", "description": "### Get information about all dialects.\n", @@ -5165,7 +5368,9 @@ }, "/digest_emails_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "digest_emails_enabled", "summary": "Get Digest_emails", "description": "### Retrieve the value for whether or not digest emails is enabled\n", @@ -5193,7 +5398,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_digest_emails_enabled", "summary": "Update Digest_emails", "description": "### Update the setting for enabling/disabling digest emails\n", @@ -5246,7 +5453,9 @@ }, "/digest_email_send": { "post": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "create_digest_email_send", "summary": "Deliver digest email contents", "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", @@ -5283,7 +5492,9 @@ }, "/embed/sso_url": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_sso_embed_url", "summary": "Create SSO Embed Url", "description": "### Create SSO Embed URL\n\nCreates an SSO embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to this URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed SSO embed URL can only be used once. After it has been used to request a page from the\nLooker server, the URL is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (group_ids property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the group_ids property, or both the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the group_ids, models, and permissions properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nSSO embed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nTo diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the newest active secret defined in the Looker instance.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", @@ -5342,7 +5553,9 @@ }, "/projects/{project_id}/git_branches": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_branches", "summary": "Get All Git Branches", "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", @@ -5384,7 +5597,9 @@ }, "/projects/{project_id}/git_branch": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_branch", "summary": "Get Active Git Branch", "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", @@ -5421,7 +5636,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_branch", "summary": "Checkout New Git Branch", "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", @@ -5485,7 +5702,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_git_branch", "summary": "Update Project Git Branch", "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", @@ -5545,7 +5764,9 @@ }, "/projects/{project_id}/git_branch/{branch_name}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "find_git_branch", "summary": "Find a Git Branch", "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", @@ -5589,7 +5810,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_git_branch", "summary": "Delete a Git Branch", "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", @@ -5641,7 +5864,9 @@ }, "/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_groups", "summary": "Get All Groups", "description": "### Get information about all groups.\n", @@ -5731,7 +5956,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "create_group", "summary": "Create Group", "description": "### Creates a new group (admin only).\n", @@ -5797,7 +6024,9 @@ }, "/groups/search": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups", "summary": "Search Groups", "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -5905,7 +6134,9 @@ }, "/groups/{group_id}": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "group", "summary": "Get Group", "description": "### Get information about a group.\n", @@ -5950,7 +6181,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_group", "summary": "Update Group", "description": "### Updates the a group (admin only).", @@ -6016,7 +6249,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group", "summary": "Delete Group", "description": "### Deletes a group (admin only).\n", @@ -6068,7 +6303,9 @@ }, "/groups/{group_id}/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_groups", "summary": "Get All Groups in Group", "description": "### Get information about all the groups in a group\n", @@ -6116,7 +6353,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_group", "summary": "Add a Group to Group", "description": "### Adds a new group to a group.\n", @@ -6171,7 +6410,9 @@ }, "/groups/{group_id}/users": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_users", "summary": "Get All Users in Group", "description": "### Get information about all the users directly included in a group.\n", @@ -6242,7 +6483,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_user", "summary": "Add a User to Group", "description": "### Adds a new user to a group.\n", @@ -6297,7 +6540,9 @@ }, "/groups/{group_id}/users/{user_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_user", "summary": "Remove a User from Group", "description": "### Removes a user from a group.\n", @@ -6348,7 +6593,9 @@ }, "/groups/{group_id}/groups/{deleting_group_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_from_group", "summary": "Deletes a Group from Group", "description": "### Removes a group from a group.\n", @@ -6399,7 +6646,9 @@ }, "/groups/{group_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_user_attribute_group_value", "summary": "Set User Attribute Group Value", "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", @@ -6460,7 +6709,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_user_attribute_group_value", "summary": "Delete User Attribute Group Value", "description": "### Remove a user attribute value from a group.\n", @@ -6505,7 +6756,9 @@ }, "/homepages": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_homepages", "summary": "Get All Homepages", "description": "### Get information about all homepages.\n", @@ -6546,7 +6799,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "create_homepage", "summary": "Create Homepage", "description": "### Create a new homepage.\n", @@ -6613,7 +6868,9 @@ }, "/homepages/search": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "search_homepages", "summary": "Search Homepages", "description": "### Search Homepages\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -6744,7 +7001,9 @@ }, "/homepages/{homepage_id}": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "homepage", "summary": "Get Homepage", "description": "### Get information about a homepage.\n", @@ -6790,7 +7049,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "update_homepage", "summary": "Update Homepage", "description": "### Update a homepage definition.\n", @@ -6857,7 +7118,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "delete_homepage", "summary": "Delete Homepage", "description": "### Delete a homepage.\n", @@ -6904,7 +7167,9 @@ }, "/homepage_items": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_homepage_items", "summary": "Get All Homepage Items", "description": "### Get information about all homepage items.\n", @@ -6959,7 +7224,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "create_homepage_item", "summary": "Create Homepage Item", "description": "### Create a new homepage item.\n", @@ -7026,7 +7293,9 @@ }, "/homepage_items/{homepage_item_id}": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "homepage_item", "summary": "Get Homepage Item", "description": "### Get information about a homepage item.\n", @@ -7072,7 +7341,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "update_homepage_item", "summary": "Update Homepage Item", "description": "### Update a homepage item definition.\n", @@ -7139,7 +7410,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "delete_homepage_item", "summary": "Delete Homepage Item", "description": "### Delete a homepage item.\n", @@ -7186,7 +7459,9 @@ }, "/homepage_sections": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_homepage_sections", "summary": "Get All Homepage sections", "description": "### Get information about all homepage sections.\n", @@ -7234,7 +7509,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "create_homepage_section", "summary": "Create Homepage section", "description": "### Create a new homepage section.\n", @@ -7301,7 +7578,9 @@ }, "/homepage_sections/{homepage_section_id}": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "homepage_section", "summary": "Get Homepage section", "description": "### Get information about a homepage section.\n", @@ -7347,7 +7626,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "update_homepage_section", "summary": "Update Homepage section", "description": "### Update a homepage section definition.\n", @@ -7414,7 +7695,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "delete_homepage_section", "summary": "Delete Homepage section", "description": "### Delete a homepage section.\n", @@ -7461,7 +7744,9 @@ }, "/primary_homepage_sections": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_primary_homepage_sections", "summary": "Get All Primary homepage sections", "description": "### Get information about the primary homepage's sections.\n", @@ -7503,7 +7788,9 @@ }, "/integration_hubs": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integration_hubs", "summary": "Get All Integration Hubs", "description": "### Get information about all Integration Hubs.\n", @@ -7543,7 +7830,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "create_integration_hub", "summary": "Create Integration Hub", "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -7610,7 +7899,9 @@ }, "/integration_hubs/{integration_hub_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration_hub", "summary": "Get Integration Hub", "description": "### Get information about a Integration Hub.\n", @@ -7655,7 +7946,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration_hub", "summary": "Update Integration Hub", "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -7722,7 +8015,9 @@ "x-looker-rate-limited": true }, "delete": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "delete_integration_hub", "summary": "Delete Integration Hub", "description": "### Delete a Integration Hub.\n", @@ -7768,7 +8063,9 @@ }, "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "accept_integration_hub_legal_agreement", "summary": "Accept Integration Hub Legal Agreement", "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", @@ -7814,7 +8111,9 @@ }, "/integrations": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integrations", "summary": "Get All Integrations", "description": "### Get information about all Integrations.\n", @@ -7863,7 +8162,9 @@ }, "/integrations/{integration_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration", "summary": "Get Integration", "description": "### Get information about a Integration.\n", @@ -7907,7 +8208,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration", "summary": "Update Integration", "description": "### Update parameters on a Integration.\n", @@ -7974,7 +8277,9 @@ }, "/integrations/{integration_id}/form": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "fetch_integration_form", "summary": "Fetch Remote Integration Form", "description": "Returns the Integration form for presentation to the user.", @@ -8031,7 +8336,9 @@ }, "/integrations/{integration_id}/test": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "test_integration", "summary": "Test integration", "description": "Tests the integration to make sure all the settings are working.", @@ -8076,7 +8383,9 @@ }, "/internal_help_resources_content": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources_content", "summary": "Get Internal Help Resources Content", "description": "### Set the menu item name and content for internal help resources\n", @@ -8104,7 +8413,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources_content", "summary": "Update internal help resources content", "description": "Update internal help resources content\n", @@ -8157,7 +8468,9 @@ }, "/internal_help_resources_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources", "summary": "Get Internal Help Resources", "description": "### Get and set the options for internal help resources\n", @@ -8187,7 +8500,9 @@ }, "/internal_help_resources": { "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources", "summary": "Update internal help resources configuration", "description": "Update internal help resources settings\n", @@ -8240,7 +8555,9 @@ }, "/ldap_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "ldap_config", "summary": "Get LDAP Configuration", "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", @@ -8262,7 +8579,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_ldap_config", "summary": "Update LDAP Configuration", "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", @@ -8309,7 +8628,9 @@ }, "/ldap_config/test_connection": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_connection", "summary": "Test LDAP Connection", "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n", @@ -8356,7 +8677,9 @@ }, "/ldap_config/test_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_auth", "summary": "Test LDAP Auth", "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\n", @@ -8403,7 +8726,9 @@ }, "/ldap_config/test_user_info": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_info", "summary": "Test LDAP User Info", "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user without needing to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full info for the user from the LDAP server without actually authenticating the user. So, user password is not required.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\n", @@ -8450,7 +8775,9 @@ }, "/ldap_config/test_user_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_auth", "summary": "Test LDAP User Auth", "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\n", @@ -8497,7 +8824,9 @@ }, "/legacy_features": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_legacy_features", "summary": "Get All Legacy Features", "description": "### Get all legacy features.\n", @@ -8530,7 +8859,9 @@ }, "/legacy_features/{legacy_feature_id}": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "legacy_feature", "summary": "Get Legacy Feature", "description": "### Get information about the legacy feature with a specific id.\n", @@ -8568,7 +8899,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_legacy_feature", "summary": "Update Legacy Feature", "description": "### Update information about the legacy feature with a specific id.\n", @@ -8629,7 +8962,9 @@ }, "/locales": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_locales", "summary": "Get All Locales", "description": "### Get a list of locales that Looker supports.\n", @@ -8662,7 +8997,9 @@ }, "/looks": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "all_looks", "summary": "Get All Looks", "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", @@ -8702,7 +9039,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "create_look", "summary": "Create Look", "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", @@ -8768,7 +9107,9 @@ }, "/looks/search": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "search_looks", "summary": "Search Looks", "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", @@ -8928,7 +9269,9 @@ }, "/looks/{look_id}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "look", "summary": "Get Look", "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", @@ -8973,7 +9316,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "update_look", "summary": "Update Look", "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nIn API 3.1 and later, you can pass `deleted: true` as a parameter to [search_looks()](#!/3.1/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", @@ -9039,7 +9384,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "delete_look", "summary": "Delete Look", "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", @@ -9085,11 +9432,18 @@ }, "/looks/{look_id}/run/{result_format}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "run_look", "summary": "Run Look", "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "look_id", @@ -9232,7 +9586,9 @@ }, "/lookml_models": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "all_lookml_models", "summary": "Get All LookML Models", "description": "### Get information about all lookml models.\n", @@ -9272,7 +9628,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "create_lookml_model", "summary": "Create LookML Model", "description": "### Create a lookml model using the specified configuration.\n", @@ -9331,7 +9689,9 @@ }, "/lookml_models/{lookml_model_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model", "summary": "Get LookML Model", "description": "### Get information about a lookml model.\n", @@ -9375,7 +9735,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "update_lookml_model", "summary": "Update LookML Model", "description": "### Update a lookml model using the specified configuration.\n", @@ -9433,7 +9795,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "delete_lookml_model", "summary": "Delete LookML Model", "description": "### Delete a lookml model.\n", @@ -9478,7 +9842,9 @@ }, "/lookml_models/{lookml_model_name}/explores/{explore_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model_explore", "summary": "Get LookML Model Explore", "description": "### Get information about a lookml model explore.\n", @@ -9531,7 +9897,9 @@ }, "/merge_queries/{merge_query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "merge_query", "summary": "Get Merge Query", "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", @@ -9577,7 +9945,9 @@ }, "/merge_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_merge_query", "summary": "Create Merge Query", "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n", @@ -9643,7 +10013,9 @@ }, "/model_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_model_sets", "summary": "Search Model Sets", "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -9744,7 +10116,9 @@ }, "/model_sets/{model_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "model_set", "summary": "Get Model Set", "description": "### Get information about the model set with a specific id.\n", @@ -9789,7 +10163,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_model_set", "summary": "Delete Model Set", "description": "### Delete the model set with a specific id.\n", @@ -9833,7 +10209,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_model_set", "summary": "Update Model Set", "description": "### Update information about the model set with a specific id.\n", @@ -9894,7 +10272,9 @@ }, "/model_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_model_sets", "summary": "Get All Model Sets", "description": "### Get information about all model sets.\n", @@ -9928,7 +10308,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_model_set", "summary": "Create Model Set", "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", @@ -9981,7 +10363,9 @@ }, "/oidc_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_config", "summary": "Get OIDC Configuration", "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n", @@ -10003,7 +10387,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_oidc_config", "summary": "Update OIDC Configuration", "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n", @@ -10050,7 +10436,9 @@ }, "/oidc_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_test_config", "summary": "Get OIDC Test Configuration", "description": "### Get a OIDC test configuration by test_slug.\n", @@ -10081,7 +10469,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_oidc_test_config", "summary": "Delete OIDC Test Configuration", "description": "### Delete a OIDC test configuration.\n", @@ -10120,7 +10510,9 @@ }, "/oidc_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_oidc_test_config", "summary": "Create OIDC Test Configuration", "description": "### Create a OIDC test configuration.\n", @@ -10167,7 +10559,9 @@ }, "/password_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "password_config", "summary": "Get Password Config", "description": "### Get password config.\n", @@ -10195,7 +10589,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_password_config", "summary": "Update Password Config", "description": "### Update password config.\n", @@ -10248,7 +10644,9 @@ }, "/password_config/force_password_reset_at_next_login_for_all_users": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "force_password_reset_at_next_login_for_all_users", "summary": "Force password reset", "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n", @@ -10290,7 +10688,9 @@ }, "/permissions": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permissions", "summary": "Get All Permissions", "description": "### Get all supported permissions.\n", @@ -10323,7 +10723,9 @@ }, "/permission_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_permission_sets", "summary": "Search Permission Sets", "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -10424,7 +10826,9 @@ }, "/permission_sets/{permission_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "permission_set", "summary": "Get Permission Set", "description": "### Get information about the permission set with a specific id.\n", @@ -10469,7 +10873,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_permission_set", "summary": "Delete Permission Set", "description": "### Delete the permission set with a specific id.\n", @@ -10519,7 +10925,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_permission_set", "summary": "Update Permission Set", "description": "### Update information about the permission set with a specific id.\n", @@ -10586,7 +10994,9 @@ }, "/permission_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permission_sets", "summary": "Get All Permission Sets", "description": "### Get information about all permission sets.\n", @@ -10626,7 +11036,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_permission_set", "summary": "Create Permission Set", "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\n", @@ -10685,7 +11097,9 @@ }, "/projects/{project_id}/deploy_ref_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_ref_to_production", "summary": "Deploy Remote Branch or Ref to Production", "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", @@ -10753,7 +11167,9 @@ }, "/projects/{project_id}/deploy_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_to_production", "summary": "Deploy To Production", "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", @@ -10807,7 +11223,9 @@ }, "/projects/{project_id}/reset_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_production", "summary": "Reset To Production", "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -10861,7 +11279,9 @@ }, "/projects/{project_id}/reset_to_remote": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_remote", "summary": "Reset To Remote", "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -10915,7 +11335,9 @@ }, "/projects": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_projects", "summary": "Get All Projects", "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", @@ -10955,7 +11377,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_project", "summary": "Create Project", "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", @@ -11014,7 +11438,9 @@ }, "/projects/{project_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project", "summary": "Get Project", "description": "### Get A Project\n\nReturns the project with the given project id\n", @@ -11058,7 +11484,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_project", "summary": "Update Project", "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", @@ -11137,7 +11565,9 @@ }, "/projects/{project_id}/manifest": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "manifest", "summary": "Get Manifest", "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", @@ -11176,11 +11606,15 @@ }, "/projects/{project_id}/git/deploy_key": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_deploy_key", "summary": "Create Deploy Key", "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", - "produces": ["text/plain"], + "produces": [ + "text/plain" + ], "parameters": [ { "name": "project_id", @@ -11232,11 +11666,15 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_deploy_key", "summary": "Git Deploy Key", "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", - "produces": ["text/plain"], + "produces": [ + "text/plain" + ], "parameters": [ { "name": "project_id", @@ -11272,7 +11710,9 @@ }, "/projects/{project_id}/validate": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "validate_project", "summary": "Validate Project", "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", @@ -11328,7 +11768,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_validation_results", "summary": "Cached Project Validation Results", "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", @@ -11377,7 +11819,9 @@ }, "/projects/{project_id}/current_workspace": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_workspace", "summary": "Get Project Workspace", "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", @@ -11423,7 +11867,9 @@ }, "/projects/{project_id}/files": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_project_files", "summary": "Get All Project Files", "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", @@ -11472,7 +11918,9 @@ }, "/projects/{project_id}/files/file": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_file", "summary": "Get Project File", "description": "### Get Project File Info\n\nReturns information about a file in the project\n", @@ -11525,7 +11973,9 @@ }, "/projects/{project_id}/git_connection_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_connection_tests", "summary": "Get All Git Connection Tests", "description": "### Get All Git Connection Tests\n\ndev mode required.\n - Call `update_session` to select the 'dev' workspace.\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", @@ -11574,7 +12024,9 @@ }, "/projects/{project_id}/git_connection_tests/{test_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_git_connection_test", "summary": "Run Git Connection Test", "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", @@ -11646,7 +12098,9 @@ }, "/projects/{project_id}/lookml_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_lookml_tests", "summary": "Get All LookML Tests", "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", @@ -11695,7 +12149,9 @@ }, "/projects/{project_id}/lookml_tests/run": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_lookml_test", "summary": "Run LookML Test", "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", @@ -11770,7 +12226,9 @@ }, "/projects/{project_id}/tag": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "tag_ref", "summary": "Tag Ref", "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n\nThis is an internal-only, undocumented route.\n", @@ -11860,7 +12318,9 @@ }, "/render_tasks/lookml_dashboards/{dashboard_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_lookml_dashboard_render_task", "summary": "Create Lookml Dashboard Render Task", "description": "### Create a new task to render a lookml dashboard to a document or image.\n\n# DEPRECATED: Use [create_dashboard_render_task()](#!/RenderTask/create_dashboard_render_task) in API 4.0+\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -11971,7 +12431,9 @@ }, "/render_tasks/looks/{look_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_look_render_task", "summary": "Create Look Render Task", "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -12059,7 +12521,9 @@ }, "/render_tasks/queries/{query_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_query_render_task", "summary": "Create Query Render Task", "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -12147,7 +12611,9 @@ }, "/render_tasks/dashboards/{dashboard_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_dashboard_render_task", "summary": "Create Dashboard Render Task", "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -12258,7 +12724,9 @@ }, "/render_tasks/{render_task_id}": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task", "summary": "Get Render Task", "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -12304,11 +12772,17 @@ }, "/render_tasks/{render_task_id}/results": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task_results", "summary": "Render Task Results", "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", - "produces": ["image/jpeg", "image/png", "application/pdf"], + "produces": [ + "image/jpeg", + "image/png", + "application/pdf" + ], "parameters": [ { "name": "render_task_id", @@ -12347,7 +12821,9 @@ }, "/projects/{root_project_id}/credential/{credential_id}": { "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_repository_credential", "summary": "Create Repository Credential", "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", @@ -12418,7 +12894,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_repository_credential", "summary": "Delete Repository Credential", "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", @@ -12470,7 +12948,9 @@ }, "/projects/{root_project_id}/credentials": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "get_all_repository_credentials", "summary": "Get All Repository Credentials", "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", @@ -12512,7 +12992,9 @@ }, "/roles": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_roles", "summary": "Get All Roles", "description": "### Get information about all roles.\n", @@ -12564,7 +13046,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_role", "summary": "Create Role", "description": "### Create a role with the specified information.\n", @@ -12623,7 +13107,9 @@ }, "/roles/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_roles", "summary": "Search Roles", "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -12717,7 +13203,9 @@ }, "/roles/{role_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role", "summary": "Get Role", "description": "### Get information about the role with a specific id.\n", @@ -12755,7 +13243,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_role", "summary": "Delete Role", "description": "### Delete the role with a specific id.\n", @@ -12805,7 +13295,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_role", "summary": "Update Role", "description": "### Update information about the role with a specific id.\n", @@ -12872,7 +13364,9 @@ }, "/roles/{role_id}/groups": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_groups", "summary": "Get Role Groups", "description": "### Get information about all the groups with the role that has a specific id.\n", @@ -12920,7 +13414,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_groups", "summary": "Update Role Groups", "description": "### Set all groups for a role, removing all existing group associations from that role.\n", @@ -12988,7 +13484,9 @@ }, "/roles/{role_id}/users": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_users", "summary": "Get Role Users", "description": "### Get information about all the users with the role that has a specific id.\n", @@ -13043,7 +13541,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_users", "summary": "Update Role Users", "description": "### Set all the users of the role with a specific id.\n", @@ -13123,7 +13623,9 @@ }, "/running_queries": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "all_running_queries", "summary": "Get All Running Queries", "description": "Get information about all running queries.\n", @@ -13150,7 +13652,9 @@ }, "/running_queries/{query_task_id}": { "delete": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "kill_query", "summary": "Kill Running Query", "description": "Kill a query with a specific query_task_id.\n", @@ -13195,7 +13699,9 @@ }, "/saml_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_config", "summary": "Get SAML Configuration", "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n", @@ -13217,7 +13723,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_saml_config", "summary": "Update SAML Configuration", "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n", @@ -13264,7 +13772,9 @@ }, "/saml_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_test_config", "summary": "Get SAML Test Configuration", "description": "### Get a SAML test configuration by test_slug.\n", @@ -13295,7 +13805,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_saml_test_config", "summary": "Delete SAML Test Configuration", "description": "### Delete a SAML test configuration.\n", @@ -13334,7 +13846,9 @@ }, "/saml_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_saml_test_config", "summary": "Create SAML Test Configuration", "description": "### Create a SAML test configuration.\n", @@ -13381,11 +13895,15 @@ }, "/parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "parse_saml_idp_metadata", "summary": "Parse SAML IdP XML", "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n", - "consumes": ["text/plain"], + "consumes": [ + "text/plain" + ], "parameters": [ { "name": "body", @@ -13423,11 +13941,15 @@ }, "/fetch_and_parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "fetch_and_parse_saml_idp_metadata", "summary": "Parse SAML IdP Url", "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n", - "consumes": ["text/plain"], + "consumes": [ + "text/plain" + ], "parameters": [ { "name": "body", @@ -13465,7 +13987,9 @@ }, "/scheduled_plans/space/{space_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_space", "summary": "Scheduled Plans for Space", "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", @@ -13515,7 +14039,9 @@ }, "/scheduled_plans/{scheduled_plan_id}": { "delete": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "delete_scheduled_plan", "summary": "Delete Scheduled Plan", "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", @@ -13559,7 +14085,9 @@ "x-looker-activity-type": "db_query" }, "patch": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "update_scheduled_plan", "summary": "Update Scheduled Plan", "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -13618,7 +14146,9 @@ "x-looker-activity-type": "db_query" }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan", "summary": "Get Scheduled Plan", "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", @@ -13665,7 +14195,9 @@ }, "/scheduled_plans": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "create_scheduled_plan", "summary": "Create Scheduled Plan", "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://looker.com/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -13722,7 +14254,9 @@ "x-looker-activity-type": "db_query" }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "all_scheduled_plans", "summary": "Get All Scheduled Plans", "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -13785,7 +14319,9 @@ }, "/scheduled_plans/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once", "summary": "Run Scheduled Plan Once", "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -13845,7 +14381,9 @@ }, "/scheduled_plans/look/{look_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_look", "summary": "Scheduled Plans for Look", "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -13910,7 +14448,9 @@ }, "/scheduled_plans/dashboard/{dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_dashboard", "summary": "Scheduled Plans for Dashboard", "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -13975,7 +14515,9 @@ }, "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_lookml_dashboard", "summary": "Scheduled Plans for LookML Dashboard", "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -14039,7 +14581,9 @@ }, "/scheduled_plans/{scheduled_plan_id}/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once_by_id", "summary": "Run Scheduled Plan Once by Id", "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", @@ -14107,7 +14651,9 @@ }, "/session_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "session_config", "summary": "Get Session Config", "description": "### Get session config.\n", @@ -14135,7 +14681,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_session_config", "summary": "Update Session Config", "description": "### Update session config.\n", @@ -14188,7 +14736,9 @@ }, "/session": { "get": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "session", "summary": "Get Session", "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", @@ -14216,7 +14766,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "update_session", "summary": "Update Session", "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", @@ -14269,7 +14821,9 @@ }, "/spaces/search": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "search_spaces", "summary": "Search Spaces", "description": "### Search Spaces\n\n Returns an **array of space objects** that match the given search criteria.\n\n If multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\n Get a **single space** by id with [Space](#!/Space/space)\n", @@ -14394,7 +14948,9 @@ }, "/spaces/{space_id}": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space", "summary": "Get Space", "description": "### Get information about the space with a specific id.", @@ -14439,7 +14995,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "delete_space", "summary": "Delete Space", "description": "### Delete the space with a specific id including any children spaces.\n**DANGER** this will delete all looks and dashboards in the space.\n", @@ -14483,7 +15041,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "update_space", "summary": "Update Space", "description": "### Update the space with a specific id.", @@ -14544,7 +15104,9 @@ }, "/spaces": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "all_spaces", "summary": "Get All Spaces", "description": "### Get information about all spaces.\n\nIn API 3.x, this will not return empty personal spaces, unless they belong to the calling user.\nIn API 4.0+, all personal spaces will be returned.\n\n", @@ -14585,7 +15147,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "create_space", "summary": "Create Space", "description": "### Create a space with specified information.\n\nCaller must have permission to edit the parent space and to create spaces, otherwise the request\nreturns 404 Not Found.\n", @@ -14645,7 +15209,9 @@ }, "/spaces/{space_id}/children": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_children", "summary": "Get Space Children", "description": "### Get the children of a space.", @@ -14718,7 +15284,9 @@ }, "/spaces/{space_id}/children/search": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_children_search", "summary": "Search Space Children", "description": "### Search the children of a space", @@ -14782,7 +15350,9 @@ }, "/spaces/{space_id}/parent": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_parent", "summary": "Get Space Parent", "description": "### Get the parent of a space", @@ -14829,7 +15399,9 @@ }, "/spaces/{space_id}/ancestors": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_ancestors", "summary": "Get Space Ancestors", "description": "### Get the ancestors of a space", @@ -14879,7 +15451,9 @@ }, "/spaces/{space_id}/looks": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_looks", "summary": "Get Space Looks", "description": "### Get all looks in a space.\nIn API 3.x, this will return all looks in a space, including looks in the trash.\nIn API 4.0+, all looks in a space will be returned, excluding looks in the trash.\n", @@ -14929,7 +15503,9 @@ }, "/spaces/{space_id}/dashboards": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_dashboards", "summary": "Get Space Dashboards", "description": "### Get the dashboards in a space", @@ -14979,7 +15555,9 @@ }, "/folders/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "search_folders", "summary": "Search Folders", "description": "Search for folders by creator id, parent id, name, etc", @@ -15103,7 +15681,9 @@ }, "/folders/{folder_id}": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder", "summary": "Get Folder", "description": "### Get information about the folder with a specific id.", @@ -15147,7 +15727,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "delete_folder", "summary": "Delete Folder", "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", @@ -15190,7 +15772,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "update_folder", "summary": "Update Folder", "description": "### Update the folder with a specific id.", @@ -15250,7 +15834,9 @@ }, "/folders": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "all_folders", "summary": "Get All Folders", "description": "### Get information about all folders.\n\nIn API 3.x, this will not return empty personal folders, unless they belong to the calling user.\nIn API 4.0+, all personal folders will be returned.\n\n", @@ -15290,7 +15876,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "create_folder", "summary": "Create Folder", "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", @@ -15349,7 +15937,9 @@ }, "/folders/{folder_id}/children": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children", "summary": "Get Folder Children", "description": "### Get the children of a folder.", @@ -15421,7 +16011,9 @@ }, "/folders/{folder_id}/children/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children_search", "summary": "Search Folder Children", "description": "### Search the children of a folder", @@ -15484,7 +16076,9 @@ }, "/folders/{folder_id}/parent": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_parent", "summary": "Get Folder Parent", "description": "### Get the parent of a folder", @@ -15530,7 +16124,9 @@ }, "/folders/{folder_id}/ancestors": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_ancestors", "summary": "Get Folder Ancestors", "description": "### Get the ancestors of a folder", @@ -15579,7 +16175,9 @@ }, "/folders/{folder_id}/looks": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_looks", "summary": "Get Folder Looks", "description": "### Get all looks in a folder.\nIn API 3.x, this will return all looks in a folder, including looks in the trash.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", @@ -15628,7 +16226,9 @@ }, "/folders/{folder_id}/dashboards": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_dashboards", "summary": "Get Folder Dashboards", "description": "### Get the dashboards in a folder", @@ -15677,7 +16277,9 @@ }, "/sql_queries/{slug}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "sql_query", "summary": "Get SQL Runner Query", "description": "Get a SQL Runner query.", @@ -15716,7 +16318,9 @@ }, "/sql_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_sql_query", "summary": "Create SQL Runner Query", "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", @@ -15775,11 +16379,18 @@ }, "/sql_queries/{slug}/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_sql_query", "summary": "Run SQL Runner Query", "description": "Execute a SQL Runner query in a given result_format.", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "slug", @@ -15841,7 +16452,9 @@ }, "/themes": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "all_themes", "summary": "Get All Themes", "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -15881,7 +16494,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "create_theme", "summary": "Create Theme", "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://looker.com/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -15940,7 +16555,9 @@ }, "/themes/search": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "search_themes", "summary": "Search Themes", "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -16043,7 +16660,9 @@ }, "/themes/default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "default_theme", "summary": "Get Default Theme", "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", @@ -16081,7 +16700,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "set_default_theme", "summary": "Set Default Theme", "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -16132,7 +16753,9 @@ }, "/themes/active": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "active_themes", "summary": "Get Active Themes", "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n\n", @@ -16189,7 +16812,9 @@ }, "/themes/theme_or_default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme_or_default", "summary": "Get Theme or Default", "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -16236,7 +16861,9 @@ }, "/themes/validate": { "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "validate_theme", "summary": "Validate Theme", "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -16301,7 +16928,9 @@ }, "/themes/{theme_id}": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme", "summary": "Get Theme", "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -16345,7 +16974,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "update_theme", "summary": "Update Theme", "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -16403,7 +17034,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "delete_theme", "summary": "Delete Theme", "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -16448,7 +17081,9 @@ }, "/timezones": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_timezones", "summary": "Get All Timezones", "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", @@ -16481,7 +17116,9 @@ }, "/user_attributes": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attributes", "summary": "Get All User Attributes", "description": "### Get information about all user attributes.\n", @@ -16528,7 +17165,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "create_user_attribute", "summary": "Create User Attribute", "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", @@ -16594,7 +17233,9 @@ }, "/user_attributes/{user_attribute_id}": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "user_attribute", "summary": "Get User Attribute", "description": "### Get information about a user attribute.\n", @@ -16639,7 +17280,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "update_user_attribute", "summary": "Update User Attribute", "description": "### Update a user attribute definition.\n", @@ -16705,7 +17348,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "delete_user_attribute", "summary": "Delete User Attribute", "description": "### Delete a user attribute (admin only).\n", @@ -16751,7 +17396,9 @@ }, "/user_attributes/{user_attribute_id}/group_values": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attribute_group_values", "summary": "Get User Attribute Group Values", "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", @@ -16799,7 +17446,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "set_user_attribute_group_values", "summary": "Set User Attribute Group Values", "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", @@ -16872,7 +17521,9 @@ }, "/user_login_lockouts": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "all_user_login_lockouts", "summary": "Get All User Login Lockouts", "description": "### Get currently locked-out users.\n", @@ -16914,7 +17565,9 @@ }, "/user_login_lockouts/search": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "search_user_login_lockouts", "summary": "Search User Login Lockouts", "description": "### Search currently locked-out users.\n", @@ -17014,7 +17667,9 @@ }, "/user_login_lockout/{key}": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_user_login_lockout", "summary": "Delete User Login Lockout", "description": "### Removes login lockout for the associated user.\n", @@ -17059,7 +17714,9 @@ }, "/user": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "me", "summary": "Get Current User", "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", @@ -17092,7 +17749,9 @@ }, "/users": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_users", "summary": "Get All Users", "description": "### Get information about all users.\n", @@ -17167,7 +17826,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user", "summary": "Create User", "description": "### Create a user with the specified information.\n", @@ -17227,7 +17888,9 @@ }, "/users/search": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users", "summary": "Search Users", "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", @@ -17365,7 +18028,9 @@ }, "/users/search/names/{pattern}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users_names", "summary": "Search User Names", "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", @@ -17480,7 +18145,9 @@ }, "/users/{user_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user", "summary": "Get User by Id", "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", @@ -17525,7 +18192,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user", "summary": "Update User", "description": "### Update information about the user with a specific id.\n", @@ -17585,7 +18254,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user", "summary": "Delete User", "description": "### Delete the user with a specific id.\n\n**DANGER** this will delete the user and all looks and other information owned by the user.\n", @@ -17631,7 +18302,9 @@ }, "/users/credential/{credential_type}/{credential_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_for_credential", "summary": "Get User by Credential Id", "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\n", @@ -17684,7 +18357,9 @@ }, "/users/{user_id}/credentials_email": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_email", "summary": "Get Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -17729,7 +18404,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email", "summary": "Create Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -17801,7 +18478,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user_credentials_email", "summary": "Update Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -17867,7 +18546,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_email", "summary": "Delete Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -17913,7 +18594,9 @@ }, "/users/{user_id}/credentials_totp": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_totp", "summary": "Get Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -17958,7 +18641,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_totp", "summary": "Create Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -18030,7 +18715,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_totp", "summary": "Delete Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -18076,7 +18763,9 @@ }, "/users/{user_id}/credentials_ldap": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_ldap", "summary": "Get LDAP Credential", "description": "### LDAP login information for the specified user.", @@ -18121,7 +18810,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_ldap", "summary": "Delete LDAP Credential", "description": "### LDAP login information for the specified user.", @@ -18167,7 +18858,9 @@ }, "/users/{user_id}/credentials_google": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_google", "summary": "Get Google Auth Credential", "description": "### Google authentication login information for the specified user.", @@ -18212,7 +18905,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_google", "summary": "Delete Google Auth Credential", "description": "### Google authentication login information for the specified user.", @@ -18258,7 +18953,9 @@ }, "/users/{user_id}/credentials_saml": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_saml", "summary": "Get Saml Auth Credential", "description": "### Saml authentication login information for the specified user.", @@ -18303,7 +19000,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_saml", "summary": "Delete Saml Auth Credential", "description": "### Saml authentication login information for the specified user.", @@ -18349,7 +19048,9 @@ }, "/users/{user_id}/credentials_oidc": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_oidc", "summary": "Get OIDC Auth Credential", "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", @@ -18394,7 +19095,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_oidc", "summary": "Delete OIDC Auth Credential", "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", @@ -18440,7 +19143,9 @@ }, "/users/{user_id}/credentials_api3/{credentials_api3_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_api3", "summary": "Get API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -18493,7 +19198,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_api3", "summary": "Delete API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -18547,7 +19254,9 @@ }, "/users/{user_id}/credentials_api3": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_api3s", "summary": "Get All API 3 Credentials", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -18595,7 +19304,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_api3", "summary": "Create API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -18669,7 +19380,9 @@ }, "/users/{user_id}/credentials_embed/{credentials_embed_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_embed", "summary": "Get Embedding Credential", "description": "### Embed login information for the specified user.", @@ -18722,7 +19435,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_embed", "summary": "Delete Embedding Credential", "description": "### Embed login information for the specified user.", @@ -18776,7 +19491,9 @@ }, "/users/{user_id}/credentials_embed": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_embeds", "summary": "Get All Embedding Credentials", "description": "### Embed login information for the specified user.", @@ -18826,7 +19543,9 @@ }, "/users/{user_id}/credentials_looker_openid": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_looker_openid", "summary": "Get Looker OpenId Credential", "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", @@ -18871,7 +19590,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_looker_openid", "summary": "Delete Looker OpenId Credential", "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", @@ -18917,7 +19638,9 @@ }, "/users/{user_id}/sessions/{session_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_session", "summary": "Get Web Login Session", "description": "### Web login session for the specified user.", @@ -18970,7 +19693,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_session", "summary": "Delete Web Login Session", "description": "### Web login session for the specified user.", @@ -19024,7 +19749,9 @@ }, "/users/{user_id}/sessions": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_sessions", "summary": "Get All Web Login Sessions", "description": "### Web login session for the specified user.", @@ -19074,7 +19801,9 @@ }, "/users/{user_id}/credentials_email/password_reset": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email_password_reset", "summary": "Create Password Reset Token", "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n", @@ -19128,7 +19857,9 @@ }, "/users/{user_id}/roles": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_roles", "summary": "Get User Roles", "description": "### Get information about roles of a given user\n", @@ -19183,7 +19914,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_roles", "summary": "Set User Roles", "description": "### Set roles of the user with a specific id.\n", @@ -19246,7 +19979,9 @@ }, "/users/{user_id}/attribute_values": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_attribute_user_values", "summary": "Get User Attribute Values", "description": "### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n", @@ -19316,7 +20051,9 @@ }, "/users/{user_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_attribute_user_value", "summary": "Set User Attribute User Value", "description": "### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n", @@ -19377,7 +20114,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_attribute_user_value", "summary": "Delete User Attribute User Value", "description": "### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n", @@ -19422,11 +20161,15 @@ }, "/vector_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "vector_thumbnail", "summary": "Get Vector Thumbnail", "description": "### Get a vector image representing the contents of a dashboard or look.\n\n# DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail)\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", - "produces": ["image/svg+xml"], + "produces": [ + "image/svg+xml" + ], "parameters": [ { "name": "type", @@ -19477,7 +20220,9 @@ }, "/versions": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "versions", "summary": "Get ApiVersion", "description": "### Get information about all API versions supported by this Looker instance.\n", @@ -19516,7 +20261,9 @@ }, "/whitelabel_configuration": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "whitelabel_configuration", "summary": "Get Whitelabel configuration", "description": "### This feature is enabled only by special license.\n### Gets the whitelabel configuration, which includes hiding documentation links, custom favicon uploading, etc.\n", @@ -19553,7 +20300,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_whitelabel_configuration", "summary": "Update Whitelabel configuration", "description": "### Update the whitelabel configuration\n", @@ -19606,7 +20355,9 @@ }, "/workspaces": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "all_workspaces", "summary": "Get All Workspaces", "description": "### Get All Workspaces\n\nReturns all workspaces available to the calling user.\n", @@ -19639,7 +20390,9 @@ }, "/workspaces/{workspace_id}": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "workspace", "summary": "Get Workspace", "description": "### Get A Workspace\n\nReturns information about a workspace such as the git status and selected branches\nof all projects available to the caller's user account.\n\nA workspace defines which versions of project files will be used to evaluate expressions\nand operations that use model definitions - operations such as running queries or rendering dashboards.\nEach project has its own git repository, and each project in a workspace may be configured to reference\nparticular branch or revision within their respective repositories.\n\nThere are two predefined workspaces available: \"production\" and \"dev\".\n\nThe production workspace is shared across all Looker users. Models in the production workspace are read-only.\nChanging files in production is accomplished by modifying files in a git branch and using Pull Requests\nto merge the changes from the dev branch into the production branch, and then telling\nLooker to sync with production.\n\nThe dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect\nthat user, and only when the dev workspace is selected as the active workspace for the API session.\n(See set_session_workspace()).\n\nThe dev workspace is NOT unique to an API session. Two applications accessing the Looker API using\nthe same user account will see the same files in the dev workspace. To avoid collisions between\nAPI clients it's best to have each client login with API3 credentials for a different user account.\n\nChanges made to files in a dev workspace are persistent across API sessions. It's a good\nidea to commit any changes you've made to the git repository, but not strictly required. Your modified files\nreside in a special user-specific directory on the Looker server and will still be there when you login in again\nlater and use update_session(workspace_id: \"dev\") to select the dev workspace for the new API session.\n", @@ -19695,7 +20448,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "DashboardBase": { "properties": { @@ -19916,7 +20672,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "CreateSpace": { "properties": { @@ -19932,7 +20690,10 @@ } }, "x-looker-status": "stable", - "required": ["name", "parent_id"] + "required": [ + "name", + "parent_id" + ] }, "UpdateSpace": { "properties": { @@ -20072,7 +20833,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "Homepage": { "properties": { @@ -20456,7 +21219,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "ValidationErrorDetail": { "properties": { @@ -20487,7 +21253,9 @@ } }, "x-looker-status": "stable", - "required": ["documentation_url"] + "required": [ + "documentation_url" + ] }, "AccessToken": { "properties": { @@ -20777,7 +21545,10 @@ "permission_type": { "type": "string", "readOnly": true, - "x-looker-values": ["view", "edit"], + "x-looker-values": [ + "view", + "edit" + ], "description": "Type of permission: \"view\" or \"edit\" Valid values are: \"view\", \"edit\".", "x-looker-nullable": true }, @@ -21019,7 +21790,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "ContentValidationFolder": { "properties": { @@ -21036,7 +21809,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "ContentValidationLook": { "properties": { @@ -22010,12 +22785,12 @@ }, "subject": { "type": "string", - "description": "The text to appear in the email subject line.", + "description": "The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", "x-looker-nullable": true }, "header": { "type": "string", - "description": "The text to appear in the header line of the email body.", + "description": "The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", "x-looker-nullable": true } }, @@ -22442,7 +23217,12 @@ } }, "x-looker-status": "stable", - "required": ["dashboard_id", "name", "title", "type"] + "required": [ + "dashboard_id", + "name", + "title", + "type" + ] }, "DashboardLayoutComponent": { "properties": { @@ -22793,6 +23573,11 @@ "description": "Number of times favorited", "x-looker-nullable": true }, + "filters_bar_collapsed": { + "type": "boolean", + "description": "Sets the default state of the filters bar to collapsed or open", + "x-looker-nullable": false + }, "last_accessed_at": { "type": "string", "format": "date-time", @@ -23842,7 +24627,9 @@ } }, "x-looker-status": "stable", - "required": ["target_url"] + "required": [ + "target_url" + ] }, "EmbedUrlResponse": { "properties": { @@ -23960,7 +24747,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "CreateFolder": { "properties": { @@ -23976,7 +24765,10 @@ } }, "x-looker-status": "stable", - "required": ["name", "parent_id"] + "required": [ + "name", + "parent_id" + ] }, "UpdateFolder": { "properties": { @@ -24116,7 +24908,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "GitBranch": { "properties": { @@ -24602,7 +25396,11 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["cell", "query", "dashboard"], + "x-looker-values": [ + "cell", + "query", + "dashboard" + ], "description": "A list of action types the integration supports. Valid values are: \"cell\", \"query\", \"dashboard\".", "x-looker-nullable": false }, @@ -24612,7 +25410,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["formatted", "unformatted"], + "x-looker-values": [ + "formatted", + "unformatted" + ], "description": "A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"formatted\", \"unformatted\".", "x-looker-nullable": false }, @@ -24622,7 +25423,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["apply", "noapply"], + "x-looker-values": [ + "apply", + "noapply" + ], "description": "A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"apply\", \"noapply\".", "x-looker-nullable": false }, @@ -24632,7 +25436,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["push", "url"], + "x-looker-values": [ + "push", + "url" + ], "description": "A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: \"push\", \"url\".", "x-looker-nullable": false }, @@ -26737,7 +27544,10 @@ "align": { "type": "string", "readOnly": true, - "x-looker-values": ["left", "right"], + "x-looker-values": [ + "left", + "right" + ], "description": "The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: \"left\", \"right\".", "x-looker-nullable": false }, @@ -26750,7 +27560,12 @@ "category": { "type": "string", "readOnly": true, - "x-looker-values": ["parameter", "filter", "measure", "dimension"], + "x-looker-values": [ + "parameter", + "filter", + "measure", + "dimension" + ], "description": "Field category Valid values are: \"parameter\", \"filter\", \"measure\", \"dimension\".", "x-looker-nullable": true }, @@ -26802,7 +27617,10 @@ "fill_style": { "type": "string", "readOnly": true, - "x-looker-values": ["enumeration", "range"], + "x-looker-values": [ + "enumeration", + "range" + ], "description": "The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: \"enumeration\", \"range\".", "x-looker-nullable": true }, @@ -27223,7 +28041,10 @@ "format": { "type": "string", "readOnly": true, - "x-looker-values": ["topojson", "vector_tile_region"], + "x-looker-values": [ + "topojson", + "vector_tile_region" + ], "description": "Specifies the data format of the region information. Valid values are: \"topojson\", \"vector_tile_region\".", "x-looker-nullable": false }, @@ -28350,7 +29171,12 @@ }, "pull_request_mode": { "type": "string", - "x-looker-values": ["off", "links", "recommended", "required"], + "x-looker-values": [ + "off", + "links", + "recommended", + "required" + ], "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", "x-looker-nullable": false }, @@ -28794,7 +29620,10 @@ } }, "x-looker-status": "stable", - "required": ["model", "view"] + "required": [ + "model", + "view" + ] }, "CreateQueryTask": { "properties": { @@ -28853,7 +29682,10 @@ } }, "x-looker-status": "stable", - "required": ["query_id", "result_format"] + "required": [ + "query_id", + "result_format" + ] }, "QueryTask": { "properties": { @@ -31560,4 +32392,4 @@ "x-looker-status": "stable" } } -} +} \ No newline at end of file diff --git a/spec/Looker.3.1.oas.json b/spec/Looker.3.1.oas.json index d9cc32f0c..a2405dbdf 100644 --- a/spec/Looker.3.1.oas.json +++ b/spec/Looker.3.1.oas.json @@ -2,9 +2,9 @@ "openapi": "3.0.0", "info": { "version": "3.1.0", - "x-looker-release-version": "21.14.0", + "x-looker-release-version": "21.16.0", "title": "Looker API 3.1 Reference", - "description": "### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### Try It Out!\n\nThis section describes the existing 'api-docs' page available on Looker instances. We recommend using the\n[API Explorer](https://looker.com/docs/r/api/explorer) instead.\n\nThe 'api-docs' page served by the Looker instance includes 'Try It Out!' buttons for each API method. After logging\nin with API3 credentials, you can use the \"Try It Out!\" buttons to call the API directly from the documentation\npage to interactively explore API features and responses.\n\n**NOTE**! With great power comes great responsibility: The \"Try It Out!\" button makes API calls to your live Looker\ninstance. Be especially careful with destructive API operations such as `delete_user` or similar.\nThere is no \"undo\" for API operations. (API Explorer's \"Run It\" feature requires a check mark before running\nAPI operations that can change data.)\n\n\n### In This Release\n\nThe following are a few examples of noteworthy items that have changed between API 3.0 and API 3.1.\nFor more comprehensive coverage of API changes, please see the release notes for your Looker release.\n\n### Examples of new things added in API 3.1 (compared to API 3.0):\n\n* [Dashboard construction](#!/3.1/Dashboard/) APIs\n* [Themes](#!/3.1/Theme/) and [custom color collections](#!/3.1/ColorCollection) APIs\n* Create and run [SQL Runner](#!/3.1/Query/run_sql_query) queries\n* Create and run [merged results](#!/3.1/Query/create_merge_query) queries\n* Create and modify [dashboard filters](#!/3.1/Dashboard/create_dashboard_filter)\n* Create and modify [password requirements](#!/3.1/Auth/password_config)\n\n### Deprecated in API 3.0\n\nThe following functions and properties have been deprecated in API 3.0. They continue to exist and work in API 3.0\nfor the next several Looker releases but they have not been carried forward to API 3.1:\n\n* Dashboard Prefetch functions\n* User access_filter functions\n* User API 1.0 credentials functions\n* Space.is_root and Space.is_user_root properties. Use Space.is_shared_root and Space.is_users_root instead.\n\n### Semantic changes in API 3.1:\n\n* [all_looks()](#!/3.1/Look/all_looks) no longer includes soft-deleted looks, matching [all_dashboards()](#!/3.1/Dashboard/all_dashboards) behavior.\nYou can find soft-deleted looks using [search_looks()](#!/3.1/Look/search_looks) with the `deleted` param set to True.\n* [all_spaces()](#!/3.1/Space/all_spaces) no longer includes duplicate items\n* [search_users()](#!/3.1/User/search_users) no longer accepts Y,y,1,0,N,n for Boolean params, only \"true\" and \"false\".\n* For greater client and network compatibility, [render_task_results](#!/3.1/RenderTask/render_task_results) now returns\nHTTP status **202 Accepted** instead of HTTP status **102 Processing**\n* [all_running_queries()](#!/3.1/Query/all_running_queries) and [kill_query](#!/3.1/Query/kill_query) functions have moved into the [Query](#!/3.1/Query/) function group.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n", + "description": "### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### Try It Out!\n\nThis section describes the existing 'api-docs' page available on Looker instances. We recommend using the\n[API Explorer](https://looker.com/docs/r/api/explorer) instead.\n\nThe 'api-docs' page served by the Looker instance includes 'Try It Out!' buttons for each API method. After logging\nin with API3 credentials, you can use the \"Try It Out!\" buttons to call the API directly from the documentation\npage to interactively explore API features and responses.\n\n**NOTE**! With great power comes great responsibility: The \"Try It Out!\" button makes API calls to your live Looker\ninstance. Be especially careful with destructive API operations such as `delete_user` or similar.\nThere is no \"undo\" for API operations. (API Explorer's \"Run It\" feature requires a check mark before running\nAPI operations that can change data.)\n\n\n### In This Release\n\nThe following are a few examples of noteworthy items that have changed between API 3.0 and API 3.1.\nFor more comprehensive coverage of API changes, please see the release notes for your Looker release.\n\n### Examples of new things added in API 3.1 (compared to API 3.0):\n\n* [Dashboard construction](#!/3.1/Dashboard/) APIs\n* [Themes](#!/3.1/Theme/) and [custom color collections](#!/3.1/ColorCollection) APIs\n* Create and run [SQL Runner](#!/3.1/Query/run_sql_query) queries\n* Create and run [merged results](#!/3.1/Query/create_merge_query) queries\n* Create and modify [dashboard filters](#!/3.1/Dashboard/create_dashboard_filter)\n* Create and modify [password requirements](#!/3.1/Auth/password_config)\n\n### Deprecated in API 3.0\n\nThe following functions and properties have been deprecated in API 3.0. They continue to exist and work in API 3.0\nfor the next several Looker releases but they have not been carried forward to API 3.1:\n\n* Dashboard Prefetch functions\n* User access_filter functions\n* User API 1.0 credentials functions\n* Space.is_root and Space.is_user_root properties. Use Space.is_shared_root and Space.is_users_root instead.\n\n### Semantic changes in API 3.1:\n\n* [all_looks()](#!/3.1/Look/all_looks) no longer includes soft-deleted looks, matching [all_dashboards()](#!/3.1/Dashboard/all_dashboards) behavior.\nYou can find soft-deleted looks using [search_looks()](#!/3.1/Look/search_looks) with the `deleted` param set to True.\n* [all_spaces()](#!/3.1/Space/all_spaces) no longer includes duplicate items\n* [search_users()](#!/3.1/User/search_users) no longer accepts Y,y,1,0,N,n for Boolean params, only \"true\" and \"false\".\n* For greater client and network compatibility, [render_task_results](#!/3.1/RenderTask/render_task_results) now returns\nHTTP status **202 Accepted** instead of HTTP status **102 Processing**\n* [all_running_queries()](#!/3.1/Query/all_running_queries) and [kill_query](#!/3.1/Query/kill_query) functions have moved into the [Query](#!/3.1/Query/) function group.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://looker.com/docs/r/api/support-policy) for more information.\n\n\n", "contact": { "name": "Looker Team", "url": "https://help.looker.com" @@ -123,7 +123,9 @@ "paths": { "/query_tasks": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query_task", "summary": "Run Query Async", "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n", @@ -328,7 +330,9 @@ }, "/query_tasks/multi_results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_multi_results", "summary": "Get Multiple Async Query Results", "description": "### Fetch results of multiple async queries\n\nReturns the results of multiple async queries in one request.\n\nFor Query Tasks that are not completed, the response will include the execution status of the Query Task but will not include query results.\nQuery Tasks whose results have expired will have a status of 'expired'.\nIf the user making the API request does not have sufficient privileges to view a Query Task result, the result will have a status of 'missing'\n", @@ -389,7 +393,9 @@ }, "/query_tasks/{query_task_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task", "summary": "Get Async Query Info", "description": "### Get Query Task details\n\nUse this function to check the status of an async query task. After the status\nreaches \"Complete\", you can call [query_task_results(query_task_id)](#!/Query/query_task_results) to\nretrieve the results of the query.\n\nUse [create_query_task()](#!/Query/create_query_task) to create an async query task.\n", @@ -451,7 +457,9 @@ }, "/query_tasks/{query_task_id}/results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_results", "summary": "Get Async Query Results", "description": "### Get Async Query Results\n\nReturns the results of an async query task if the query has completed.\n\nIf the query task is still running or waiting to run, this function returns 204 No Content.\n\nIf the query task ID is invalid or the cached results of the query task have expired, this function returns 404 Not Found.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task\nCall query_task_results only after the query task status reaches \"Complete\".\n\nYou can also use [query_task_multi_results()](#!/Query/query_task_multi_results) retrieve the\nresults of multiple async query tasks at the same time.\n\n#### SQL Error Handling:\nIf the query fails due to a SQL db error, how this is communicated depends on the result_format you requested in `create_query_task()`.\n\nFor `json_detail` result_format: `query_task_results()` will respond with HTTP status '200 OK' and db SQL error info\nwill be in the `errors` property of the response object. The 'data' property will be empty.\n\nFor all other result formats: `query_task_results()` will respond with HTTP status `400 Bad Request` and some db SQL error info\nwill be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`.\nThese data formats can only carry row data, and error info is not row data.\n", @@ -534,7 +542,9 @@ }, "/queries/{query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query", "summary": "Get Query", "description": "### Get a previously created query by id.\n\nA Looker query object includes the various parameters that define a database query that has been run or\ncould be run in the future. These parameters include: model, view, fields, filters, pivots, etc.\nQuery *results* are not part of the query object.\n\nQuery objects are unique and immutable. Query objects are created automatically in Looker as users explore data.\nLooker does not delete them; they become part of the query history. When asked to create a query for\nany given set of parameters, Looker will first try to find an existing query object with matching\nparameters and will only create a new object when an appropriate object can not be found.\n\nThis 'get' method is used to get the details about a query for a given id. See the other methods here\nto 'create' and 'run' queries.\n\nNote that some fields like 'filter_config' and 'vis_config' etc are specific to how the Looker UI\nbuilds queries and visualizations and are not generally useful for API use. They are not required when\ncreating new queries and can usually just be ignored.\n\n", @@ -597,7 +607,9 @@ }, "/queries/slug/{slug}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_for_slug", "summary": "Get Query for Slug", "description": "### Get the query for a given query slug.\n\nThis returns the query for the 'slug' in a query share URL.\n\nThe 'slug' is a randomly chosen short string that is used as an alternative to the query's id value\nfor use in URLs etc. This method exists as a convenience to help you use the API to 'find' queries that\nhave been created using the Looker UI.\n\nYou can use the Looker explore page to build a query and then choose the 'Share' option to\nshow the share url for the query. Share urls generally look something like 'https://looker.yourcompany/x/vwGSbfc'.\nThe trailing 'vwGSbfc' is the share slug. You can pass that string to this api method to get details about the query.\nThose details include the 'id' that you can use to run the query. Or, you can copy the query body\n(perhaps with your own modification) and use that as the basis to make/run new queries.\n\nThis will also work with slugs from Looker explore urls like\n'https://looker.yourcompany/explore/ecommerce/orders?qid=aogBgL6o3cKK1jN3RoZl5s'. In this case\n'aogBgL6o3cKK1jN3RoZl5s' is the slug.\n", @@ -659,7 +671,9 @@ }, "/queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query", "summary": "Create Query", "description": "### Create a query.\n\nThis allows you to create a new query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", @@ -753,7 +767,9 @@ }, "/queries/{query_id}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_query", "summary": "Run Query", "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", @@ -1022,7 +1038,9 @@ }, "/queries/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_inline_query", "summary": "Run Inline Query", "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", @@ -1292,7 +1310,9 @@ }, "/queries/models/{model_name}/views/{view_name}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_url_encoded_query", "summary": "Run Url Encoded Query", "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/3.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n :fields => \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n :sorts => \"products.count desc 0\",\n :limit => \"500\",\n :query_timezone => \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", @@ -1458,7 +1478,9 @@ }, "/login": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login", "summary": "Login", "description": "### Present client credentials to obtain an authorization token\n\nLooker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://looker.com/docs/r/api/outh2_resource_owner_pc) pattern.\nThe client credentials required for this login must be obtained by creating an API3 key on a user account\nin the Looker Admin console. The API3 key consists of a public `client_id` and a private `client_secret`.\n\nThe access token returned by `login` must be used in the HTTP Authorization header of subsequent\nAPI requests, like this:\n```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```\nReplace \"4QDkCy...\" with the `access_token` value returned by `login`.\nThe word `token` is a string literal and must be included exactly as shown.\n\nThis function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params.\n\nExample of passing credentials in the HTTP request body:\n````\nPOST HTTP /login\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv\n````\n\n### Best Practice:\nAlways pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations.\n\nFor more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API3](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md).\n", @@ -1520,7 +1542,9 @@ }, "/login/{user_id}": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login_user", "summary": "Login user", "description": "### Create an access token that runs as a given user.\n\nThis can only be called by an authenticated admin user. It allows that admin to generate a new\nauthentication token for the user with the given user id. That token can then be used for subsequent\nAPI calls - which are then performed *as* that target user.\n\nThe target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such\ncredentials are created by this call.\n\nThis allows for building systems where api user authentication for an arbitrary number of users is done\noutside of Looker and funneled through a single 'service account' with admin permissions. Note that a\nnew access token is generated on each call. If target users are going to be making numerous API\ncalls in a short period then it is wise to cache this authentication token rather than call this before\neach of those API calls.\n\nSee 'login' for more detail on the access token and how to use it.\n", @@ -1583,7 +1607,9 @@ }, "/logout": { "delete": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "logout", "summary": "Logout", "description": "### Logout of the API and invalidate the current access token.\n", @@ -1625,7 +1651,9 @@ }, "/backup_configuration": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "backup_configuration", "summary": "Get Backup Configuration", "description": "### WARNING: The Looker internal database backup function has been deprecated.\n", @@ -1666,7 +1694,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_backup_configuration", "summary": "Update Backup Configuration", "description": "### WARNING: The Looker internal database backup function has been deprecated.\n", @@ -1730,7 +1760,9 @@ }, "/cloud_storage": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "cloud_storage_configuration", "summary": "Get Cloud Storage", "description": "Get the current Cloud Storage Configuration.\n", @@ -1770,7 +1802,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_cloud_storage_configuration", "summary": "Update Cloud Storage", "description": "Update the current Cloud Storage Configuration.\n", @@ -1833,7 +1867,9 @@ }, "/color_collections": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "all_color_collections", "summary": "Get all Color Collections", "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1887,7 +1923,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "create_color_collection", "summary": "Create ColorCollection", "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1980,7 +2018,9 @@ }, "/color_collections/custom": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_custom", "summary": "Get all Custom Color Collections", "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -2036,7 +2076,9 @@ }, "/color_collections/standard": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_standard", "summary": "Get all Standard Color Collections", "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -2092,7 +2134,9 @@ }, "/color_collections/default": { "put": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "set_default_color_collection", "summary": "Set Default Color Collection", "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -2163,7 +2207,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "default_color_collection", "summary": "Get Default Color Collection", "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", @@ -2205,7 +2251,9 @@ }, "/color_collections/{collection_id}": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collection", "summary": "Get Color Collection by ID", "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -2265,7 +2313,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "update_color_collection", "summary": "Update Custom Color collection", "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -2357,7 +2407,9 @@ } }, "delete": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "delete_color_collection", "summary": "Delete ColorCollection", "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -2433,7 +2485,9 @@ }, "/content_favorite/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_favorites", "summary": "Search Favorite Contents", "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -2577,7 +2631,9 @@ }, "/content_favorite/{content_favorite_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_favorite", "summary": "Get Favorite Content", "description": "### Get favorite content by its id", @@ -2638,7 +2694,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_favorite", "summary": "Delete Favorite Content", "description": "### Delete favorite content", @@ -2702,7 +2760,9 @@ }, "/content_favorite": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_favorite", "summary": "Create Favorite Content", "description": "### Create favorite content", @@ -2785,7 +2845,9 @@ }, "/content_metadata": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadatas", "summary": "Get All Content Metadatas", "description": "### Get information about all content metadata in a space.\n", @@ -2851,7 +2913,9 @@ }, "/content_metadata/{content_metadata_id}": { "patch": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata", "summary": "Update Content Metadata", "description": "### Move a piece of content.\n", @@ -2934,7 +2998,9 @@ } }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_metadata", "summary": "Get Content Metadata", "description": "### Get information about an individual content metadata record.\n", @@ -2997,7 +3063,9 @@ }, "/content_metadata_access": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_metadata_access", "summary": "Create Content Metadata Access", "description": "### Create content metadata access.\n", @@ -3090,7 +3158,9 @@ } }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadata_accesses", "summary": "Get All Content Metadata Accesses", "description": "### All content metadata access records for a content metadata item.\n", @@ -3156,7 +3226,9 @@ }, "/content_metadata_access/{content_metadata_access_id}": { "put": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata_access", "summary": "Update Content Metadata Access", "description": "### Update type of access for content metadata.\n", @@ -3239,7 +3311,9 @@ } }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_metadata_access", "summary": "Delete Content Metadata Access", "description": "### Remove content metadata access.\n", @@ -3303,7 +3377,9 @@ }, "/content_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_thumbnail", "summary": "Get Content Thumbnail", "description": "### Get an image representing the contents of a dashboard or look.\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", @@ -3418,7 +3494,9 @@ }, "/content_validation": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_validation", "summary": "Validate Content", "description": "### Validate All Content\n\nPerforms validation of all looks and dashboards\nReturns a list of errors found as well as metadata about the content validation run.\n", @@ -3491,7 +3569,9 @@ }, "/content_view/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_views", "summary": "Search Content Views", "description": "### Search Content Views\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -3661,7 +3741,9 @@ }, "/custom_welcome_email": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "custom_welcome_email", "summary": "Get Custom Welcome Email", "description": "### Get the current status and content of custom welcome emails\n", @@ -3701,7 +3783,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email", "summary": "Update Custom Welcome Email Content", "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", @@ -3785,7 +3869,9 @@ }, "/custom_welcome_email_test": { "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email_test", "summary": "Send a test welcome email to the currently logged in user with the supplied content ", "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", @@ -3858,7 +3944,9 @@ }, "/dashboards": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "all_dashboards", "summary": "Get All Dashboards", "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -3912,7 +4000,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard", "summary": "Create Dashboard", "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title`, `user_id`, and `space_id` are all required fields.\n`Space_id` and `user_id` must contain the id of an existing space or user, respectively.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", @@ -3995,7 +4085,9 @@ }, "/dashboards/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboards", "summary": "Search Dashboards", "description": "### Search Dashboards\n\nReturns an **array of dashboard objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", @@ -4220,7 +4312,9 @@ }, "/dashboards/{lookml_dashboard_id}/import/{space_id}": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "import_lookml_dashboard", "summary": "Import LookML Dashboard", "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -4342,7 +4436,9 @@ }, "/dashboards/{lookml_dashboard_id}/sync": { "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "sync_lookml_dashboard", "summary": "Sync LookML Dashboard", "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -4439,7 +4535,9 @@ }, "/dashboards/{dashboard_id}": { "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard", "summary": "Delete Dashboard", "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", @@ -4510,7 +4608,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard", "summary": "Update Dashboard", "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", @@ -4602,7 +4702,9 @@ } }, "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard", "summary": "Get Dashboard", "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -4664,7 +4766,9 @@ }, "/dashboards/aggregate_table_lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_aggregate_table_lookml", "summary": "Get Aggregate Table LookML for a dashboard", "description": "### Get Aggregate Table LookML for Each Query on a Dahboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", @@ -4717,7 +4821,9 @@ }, "/dashboards/lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_lookml", "summary": "Get lookml of a UDD", "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", @@ -4770,7 +4876,9 @@ }, "/dashboard_elements/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboard_elements", "summary": "Search Dashboard Elements", "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -4882,7 +4990,9 @@ }, "/dashboard_elements/{dashboard_element_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_element", "summary": "Get DashboardElement", "description": "### Get information about the dashboard element with a specific id.", @@ -4942,7 +5052,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_element", "summary": "Delete DashboardElement", "description": "### Delete a dashboard element with a specific id.", @@ -5003,7 +5115,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_element", "summary": "Update DashboardElement", "description": "### Update the dashboard element with a specific id.", @@ -5096,7 +5210,9 @@ }, "/dashboards/{dashboard_id}/dashboard_elements": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_elements", "summary": "Get All DashboardElements", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -5161,7 +5277,9 @@ }, "/dashboard_elements": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_element", "summary": "Create DashboardElement", "description": "### Create a dashboard element on the dashboard with a specific id.", @@ -5255,7 +5373,9 @@ }, "/dashboard_filters/{dashboard_filter_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_filter", "summary": "Get Dashboard Filter", "description": "### Get information about the dashboard filters with a specific id.", @@ -5315,7 +5435,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_filter", "summary": "Delete Dashboard Filter", "description": "### Delete a dashboard filter with a specific id.", @@ -5376,7 +5498,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_filter", "summary": "Update Dashboard Filter", "description": "### Update the dashboard filter with a specific id.", @@ -5469,7 +5593,9 @@ }, "/dashboards/{dashboard_id}/dashboard_filters": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_filters", "summary": "Get All Dashboard Filters", "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", @@ -5534,7 +5660,9 @@ }, "/dashboard_filters": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_filter", "summary": "Create Dashboard Filter", "description": "### Create a dashboard filter on the dashboard with a specific id.", @@ -5628,7 +5756,9 @@ }, "/dashboard_layout_components/{dashboard_layout_component_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_component", "summary": "Get DashboardLayoutComponent", "description": "### Get information about the dashboard elements with a specific id.", @@ -5688,7 +5818,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout_component", "summary": "Update DashboardLayoutComponent", "description": "### Update the dashboard element with a specific id.", @@ -5781,7 +5913,9 @@ }, "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_dashboard_layout_components", "summary": "Get All DashboardLayoutComponents", "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", @@ -5846,7 +5980,9 @@ }, "/dashboard_layouts/{dashboard_layout_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout", "summary": "Get DashboardLayout", "description": "### Get information about the dashboard layouts with a specific id.", @@ -5906,7 +6042,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_layout", "summary": "Delete DashboardLayout", "description": "### Delete a dashboard layout with a specific id.", @@ -5977,7 +6115,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout", "summary": "Update DashboardLayout", "description": "### Update the dashboard layout with a specific id.", @@ -6070,7 +6210,9 @@ }, "/dashboards/{dashboard_id}/dashboard_layouts": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_layouts", "summary": "Get All DashboardLayouts", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -6135,7 +6277,9 @@ }, "/dashboard_layouts": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_layout", "summary": "Create DashboardLayout", "description": "### Create a dashboard layout on the dashboard with a specific id.", @@ -6229,7 +6373,9 @@ }, "/data_actions": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "perform_data_action", "summary": "Send a Data Action", "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", @@ -6282,7 +6428,9 @@ }, "/data_actions/form": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "fetch_remote_data_action_form", "summary": "Fetch Remote Data Action Form", "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", @@ -6348,7 +6496,9 @@ }, "/datagroups": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "all_datagroups", "summary": "Get All Datagroups", "description": "### Get information about all datagroups.\n", @@ -6393,7 +6543,9 @@ }, "/datagroups/{datagroup_id}": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "datagroup", "summary": "Get Datagroup", "description": "### Get information about a datagroup.\n", @@ -6444,7 +6596,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "update_datagroup", "summary": "Update Datagroup", "description": "### Update a datagroup using the specified params.\n", @@ -6538,7 +6692,9 @@ }, "/connections": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_connections", "summary": "Get All Connections", "description": "### Get information about all connections.\n", @@ -6592,7 +6748,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_connection", "summary": "Create Connection", "description": "### Create a connection using the specified configuration.\n", @@ -6675,7 +6833,9 @@ }, "/connections/{connection_name}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "connection", "summary": "Get Connection", "description": "### Get information about a connection.\n", @@ -6735,7 +6895,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_connection", "summary": "Update Connection", "description": "### Update a connection using the specified configuration.\n", @@ -6817,7 +6979,9 @@ } }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection", "summary": "Delete Connection", "description": "### Delete a connection.\n", @@ -6880,7 +7044,9 @@ }, "/connections/{connection_name}/connection_override/{override_context}": { "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection_override", "summary": "Delete Connection Override", "description": "### Delete a connection override.\n", @@ -6962,7 +7128,9 @@ }, "/connections/{connection_name}/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection", "summary": "Test Connection", "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -7053,7 +7221,9 @@ }, "/connections/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection_config", "summary": "Test Connection Configuration", "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -7136,7 +7306,9 @@ }, "/derived_table/graph/model/{model}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "graph_derived_tables_for_model", "summary": "Get Derived Table", "description": "### Discover information about derived tables\n", @@ -7207,7 +7379,9 @@ }, "/dialect_info": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_dialect_infos", "summary": "Get All Dialect Infos", "description": "### Get information about all dialects.\n", @@ -7263,7 +7437,9 @@ }, "/digest_emails_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "digest_emails_enabled", "summary": "Get Digest_emails", "description": "### Retrieve the value for whether or not digest emails is enabled\n", @@ -7303,7 +7479,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_digest_emails_enabled", "summary": "Update Digest_emails", "description": "### Update the setting for enabling/disabling digest emails\n", @@ -7376,7 +7554,9 @@ }, "/digest_email_send": { "post": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "create_digest_email_send", "summary": "Deliver digest email contents", "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", @@ -7429,7 +7609,9 @@ }, "/embed/sso_url": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_sso_embed_url", "summary": "Create SSO Embed Url", "description": "### Create SSO Embed URL\n\nCreates an SSO embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to this URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed SSO embed URL can only be used once. After it has been used to request a page from the\nLooker server, the URL is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (group_ids property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the group_ids property, or both the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the group_ids, models, and permissions properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nSSO embed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nTo diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the newest active secret defined in the Looker instance.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", @@ -7512,7 +7694,9 @@ }, "/projects/{project_id}/git_branches": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_branches", "summary": "Get All Git Branches", "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", @@ -7568,7 +7752,9 @@ }, "/projects/{project_id}/git_branch": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_branch", "summary": "Get Active Git Branch", "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", @@ -7619,7 +7805,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_branch", "summary": "Checkout New Git Branch", "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", @@ -7711,7 +7899,9 @@ } }, "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_git_branch", "summary": "Update Project Git Branch", "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", @@ -7795,7 +7985,9 @@ }, "/projects/{project_id}/git_branch/{branch_name}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "find_git_branch", "summary": "Find a Git Branch", "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", @@ -7855,7 +8047,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_git_branch", "summary": "Delete a Git Branch", "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", @@ -7927,7 +8121,9 @@ }, "/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_groups", "summary": "Get All Groups", "description": "### Get information about all groups.\n", @@ -8044,7 +8240,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "create_group", "summary": "Create Group", "description": "### Creates a new group (admin only).\n", @@ -8138,7 +8336,9 @@ }, "/groups/search": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups", "summary": "Search Groups", "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -8278,7 +8478,9 @@ }, "/groups/{group_id}": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "group", "summary": "Get Group", "description": "### Get information about a group.\n", @@ -8339,7 +8541,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_group", "summary": "Update Group", "description": "### Updates the a group (admin only).", @@ -8431,7 +8635,9 @@ } }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group", "summary": "Delete Group", "description": "### Deletes a group (admin only).\n", @@ -8505,7 +8711,9 @@ }, "/groups/{group_id}/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_groups", "summary": "Get All Groups in Group", "description": "### Get information about all the groups in a group\n", @@ -8569,7 +8777,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_group", "summary": "Add a Group to Group", "description": "### Adds a new group to a group.\n", @@ -8644,7 +8854,9 @@ }, "/groups/{group_id}/users": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_users", "summary": "Get All Users in Group", "description": "### Get information about all the users directly included in a group.\n", @@ -8737,7 +8949,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_user", "summary": "Add a User to Group", "description": "### Adds a new user to a group.\n", @@ -8812,7 +9026,9 @@ }, "/groups/{group_id}/users/{user_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_user", "summary": "Remove a User from Group", "description": "### Removes a user from a group.\n", @@ -8879,7 +9095,9 @@ }, "/groups/{group_id}/groups/{deleting_group_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_from_group", "summary": "Deletes a Group from Group", "description": "### Removes a group from a group.\n", @@ -8946,7 +9164,9 @@ }, "/groups/{group_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_user_attribute_group_value", "summary": "Set User Attribute Group Value", "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", @@ -9029,7 +9249,9 @@ } }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_user_attribute_group_value", "summary": "Delete User Attribute Group Value", "description": "### Remove a user attribute value from a group.\n", @@ -9086,7 +9308,9 @@ }, "/homepages": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_homepages", "summary": "Get All Homepages", "description": "### Get information about all homepages.\n", @@ -9141,7 +9365,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "create_homepage", "summary": "Create Homepage", "description": "### Create a new homepage.\n", @@ -9236,7 +9462,9 @@ }, "/homepages/search": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "search_homepages", "summary": "Search Homepages", "description": "### Search Homepages\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -9405,7 +9633,9 @@ }, "/homepages/{homepage_id}": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "homepage", "summary": "Get Homepage", "description": "### Get information about a homepage.\n", @@ -9467,7 +9697,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "update_homepage", "summary": "Update Homepage", "description": "### Update a homepage definition.\n", @@ -9560,7 +9792,9 @@ } }, "delete": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "delete_homepage", "summary": "Delete Homepage", "description": "### Delete a homepage.\n", @@ -9625,7 +9859,9 @@ }, "/homepage_items": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_homepage_items", "summary": "Get All Homepage Items", "description": "### Get information about all homepage items.\n", @@ -9698,7 +9934,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "create_homepage_item", "summary": "Create Homepage Item", "description": "### Create a new homepage item.\n", @@ -9793,7 +10031,9 @@ }, "/homepage_items/{homepage_item_id}": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "homepage_item", "summary": "Get Homepage Item", "description": "### Get information about a homepage item.\n", @@ -9855,7 +10095,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "update_homepage_item", "summary": "Update Homepage Item", "description": "### Update a homepage item definition.\n", @@ -9948,7 +10190,9 @@ } }, "delete": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "delete_homepage_item", "summary": "Delete Homepage Item", "description": "### Delete a homepage item.\n", @@ -10013,7 +10257,9 @@ }, "/homepage_sections": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_homepage_sections", "summary": "Get All Homepage sections", "description": "### Get information about all homepage sections.\n", @@ -10077,7 +10323,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "create_homepage_section", "summary": "Create Homepage section", "description": "### Create a new homepage section.\n", @@ -10172,7 +10420,9 @@ }, "/homepage_sections/{homepage_section_id}": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "homepage_section", "summary": "Get Homepage section", "description": "### Get information about a homepage section.\n", @@ -10234,7 +10484,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "update_homepage_section", "summary": "Update Homepage section", "description": "### Update a homepage section definition.\n", @@ -10327,7 +10579,9 @@ } }, "delete": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "delete_homepage_section", "summary": "Delete Homepage section", "description": "### Delete a homepage section.\n", @@ -10392,7 +10646,9 @@ }, "/primary_homepage_sections": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_primary_homepage_sections", "summary": "Get All Primary homepage sections", "description": "### Get information about the primary homepage's sections.\n", @@ -10448,7 +10704,9 @@ }, "/integration_hubs": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integration_hubs", "summary": "Get All Integration Hubs", "description": "### Get information about all Integration Hubs.\n", @@ -10502,7 +10760,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "create_integration_hub", "summary": "Create Integration Hub", "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -10597,7 +10857,9 @@ }, "/integration_hubs/{integration_hub_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration_hub", "summary": "Get Integration Hub", "description": "### Get information about a Integration Hub.\n", @@ -10658,7 +10920,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration_hub", "summary": "Update Integration Hub", "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -10751,7 +11015,9 @@ } }, "delete": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "delete_integration_hub", "summary": "Delete Integration Hub", "description": "### Delete a Integration Hub.\n", @@ -10815,7 +11081,9 @@ }, "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "accept_integration_hub_legal_agreement", "summary": "Accept Integration Hub Legal Agreement", "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", @@ -10879,7 +11147,9 @@ }, "/integrations": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integrations", "summary": "Get All Integrations", "description": "### Get information about all Integrations.\n", @@ -10944,7 +11214,9 @@ }, "/integrations/{integration_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration", "summary": "Get Integration", "description": "### Get information about a Integration.\n", @@ -11004,7 +11276,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration", "summary": "Update Integration", "description": "### Update parameters on a Integration.\n", @@ -11097,7 +11371,9 @@ }, "/integrations/{integration_id}/form": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "fetch_integration_form", "summary": "Fetch Remote Integration Form", "description": "Returns the Integration form for presentation to the user.", @@ -11174,7 +11450,9 @@ }, "/integrations/{integration_id}/test": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "test_integration", "summary": "Test integration", "description": "Tests the integration to make sure all the settings are working.", @@ -11237,7 +11515,9 @@ }, "/internal_help_resources_content": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources_content", "summary": "Get Internal Help Resources Content", "description": "### Set the menu item name and content for internal help resources\n", @@ -11277,7 +11557,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources_content", "summary": "Update internal help resources content", "description": "Update internal help resources content\n", @@ -11350,7 +11632,9 @@ }, "/internal_help_resources_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources", "summary": "Get Internal Help Resources", "description": "### Get and set the options for internal help resources\n", @@ -11392,7 +11676,9 @@ }, "/internal_help_resources": { "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources", "summary": "Update internal help resources configuration", "description": "Update internal help resources settings\n", @@ -11465,7 +11751,9 @@ }, "/ldap_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "ldap_config", "summary": "Get LDAP Configuration", "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", @@ -11495,7 +11783,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_ldap_config", "summary": "Update LDAP Configuration", "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", @@ -11558,7 +11848,9 @@ }, "/ldap_config/test_connection": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_connection", "summary": "Test LDAP Connection", "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n", @@ -11621,7 +11913,9 @@ }, "/ldap_config/test_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_auth", "summary": "Test LDAP Auth", "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\n", @@ -11684,7 +11978,9 @@ }, "/ldap_config/test_user_info": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_info", "summary": "Test LDAP User Info", "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user without needing to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full info for the user from the LDAP server without actually authenticating the user. So, user password is not required.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\n", @@ -11747,7 +12043,9 @@ }, "/ldap_config/test_user_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_auth", "summary": "Test LDAP User Auth", "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\n", @@ -11810,7 +12108,9 @@ }, "/legacy_features": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_legacy_features", "summary": "Get All Legacy Features", "description": "### Get all legacy features.\n", @@ -11855,7 +12155,9 @@ }, "/legacy_features/{legacy_feature_id}": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "legacy_feature", "summary": "Get Legacy Feature", "description": "### Get information about the legacy feature with a specific id.\n", @@ -11907,7 +12209,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_legacy_feature", "summary": "Update Legacy Feature", "description": "### Update information about the legacy feature with a specific id.\n", @@ -11992,7 +12296,9 @@ }, "/locales": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_locales", "summary": "Get All Locales", "description": "### Get a list of locales that Looker supports.\n", @@ -12037,7 +12343,9 @@ }, "/looks": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "all_looks", "summary": "Get All Looks", "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", @@ -12091,7 +12399,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "create_look", "summary": "Create Look", "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", @@ -12185,7 +12495,9 @@ }, "/looks/search": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "search_looks", "summary": "Search Looks", "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", @@ -12391,7 +12703,9 @@ }, "/looks/{look_id}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "look", "summary": "Get Look", "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", @@ -12452,7 +12766,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "update_look", "summary": "Update Look", "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nIn API 3.1 and later, you can pass `deleted: true` as a parameter to [search_looks()](#!/3.1/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", @@ -12544,7 +12860,9 @@ } }, "delete": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "delete_look", "summary": "Delete Look", "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", @@ -12608,7 +12926,9 @@ }, "/looks/{look_id}/run/{result_format}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "run_look", "summary": "Run Look", "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", @@ -12877,7 +13197,9 @@ }, "/lookml_models": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "all_lookml_models", "summary": "Get All LookML Models", "description": "### Get information about all lookml models.\n", @@ -12931,7 +13253,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "create_lookml_model", "summary": "Create LookML Model", "description": "### Create a lookml model using the specified configuration.\n", @@ -13014,7 +13338,9 @@ }, "/lookml_models/{lookml_model_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model", "summary": "Get LookML Model", "description": "### Get information about a lookml model.\n", @@ -13074,7 +13400,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "update_lookml_model", "summary": "Update LookML Model", "description": "### Update a lookml model using the specified configuration.\n", @@ -13156,7 +13484,9 @@ } }, "delete": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "delete_lookml_model", "summary": "Delete LookML Model", "description": "### Delete a lookml model.\n", @@ -13219,7 +13549,9 @@ }, "/lookml_models/{lookml_model_name}/explores/{explore_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model_explore", "summary": "Get LookML Model Explore", "description": "### Get information about a lookml model explore.\n", @@ -13290,7 +13622,9 @@ }, "/merge_queries/{merge_query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "merge_query", "summary": "Get Merge Query", "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", @@ -13352,7 +13686,9 @@ }, "/merge_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_merge_query", "summary": "Create Merge Query", "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n", @@ -13446,7 +13782,9 @@ }, "/model_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_model_sets", "summary": "Search Model Sets", "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -13577,7 +13915,9 @@ }, "/model_sets/{model_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "model_set", "summary": "Get Model Set", "description": "### Get information about the model set with a specific id.\n", @@ -13638,7 +13978,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_model_set", "summary": "Delete Model Set", "description": "### Delete the model set with a specific id.\n", @@ -13700,7 +14042,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_model_set", "summary": "Update Model Set", "description": "### Update information about the model set with a specific id.\n", @@ -13785,7 +14129,9 @@ }, "/model_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_model_sets", "summary": "Get All Model Sets", "description": "### Get information about all model sets.\n", @@ -13829,7 +14175,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_model_set", "summary": "Create Model Set", "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", @@ -13902,7 +14250,9 @@ }, "/oidc_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_config", "summary": "Get OIDC Configuration", "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n", @@ -13932,7 +14282,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_oidc_config", "summary": "Update OIDC Configuration", "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n", @@ -13995,7 +14347,9 @@ }, "/oidc_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_test_config", "summary": "Get OIDC Test Configuration", "description": "### Get a OIDC test configuration by test_slug.\n", @@ -14036,7 +14390,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_oidc_test_config", "summary": "Delete OIDC Test Configuration", "description": "### Delete a OIDC test configuration.\n", @@ -14089,7 +14445,9 @@ }, "/oidc_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_oidc_test_config", "summary": "Create OIDC Test Configuration", "description": "### Create a OIDC test configuration.\n", @@ -14152,7 +14510,9 @@ }, "/password_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "password_config", "summary": "Get Password Config", "description": "### Get password config.\n", @@ -14192,7 +14552,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_password_config", "summary": "Update Password Config", "description": "### Update password config.\n", @@ -14265,7 +14627,9 @@ }, "/password_config/force_password_reset_at_next_login_for_all_users": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "force_password_reset_at_next_login_for_all_users", "summary": "Force password reset", "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n", @@ -14327,7 +14691,9 @@ }, "/permissions": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permissions", "summary": "Get All Permissions", "description": "### Get all supported permissions.\n", @@ -14372,7 +14738,9 @@ }, "/permission_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_permission_sets", "summary": "Search Permission Sets", "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -14503,7 +14871,9 @@ }, "/permission_sets/{permission_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "permission_set", "summary": "Get Permission Set", "description": "### Get information about the permission set with a specific id.\n", @@ -14564,7 +14934,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_permission_set", "summary": "Delete Permission Set", "description": "### Delete the permission set with a specific id.\n", @@ -14636,7 +15008,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_permission_set", "summary": "Update Permission Set", "description": "### Update information about the permission set with a specific id.\n", @@ -14731,7 +15105,9 @@ }, "/permission_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permission_sets", "summary": "Get All Permission Sets", "description": "### Get information about all permission sets.\n", @@ -14785,7 +15161,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_permission_set", "summary": "Create Permission Set", "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\n", @@ -14868,7 +15246,9 @@ }, "/projects/{project_id}/deploy_ref_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_ref_to_production", "summary": "Deploy Remote Branch or Ref to Production", "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", @@ -14962,7 +15342,9 @@ }, "/projects/{project_id}/deploy_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_to_production", "summary": "Deploy To Production", "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", @@ -15038,7 +15420,9 @@ }, "/projects/{project_id}/reset_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_production", "summary": "Reset To Production", "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -15114,7 +15498,9 @@ }, "/projects/{project_id}/reset_to_remote": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_remote", "summary": "Reset To Remote", "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -15190,7 +15576,9 @@ }, "/projects": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_projects", "summary": "Get All Projects", "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", @@ -15244,7 +15632,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_project", "summary": "Create Project", "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", @@ -15327,7 +15717,9 @@ }, "/projects/{project_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project", "summary": "Get Project", "description": "### Get A Project\n\nReturns the project with the given project id\n", @@ -15387,7 +15779,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_project", "summary": "Update Project", "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", @@ -15500,7 +15894,9 @@ }, "/projects/{project_id}/manifest": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "manifest", "summary": "Get Manifest", "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", @@ -15553,7 +15949,9 @@ }, "/projects/{project_id}/git/deploy_key": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_deploy_key", "summary": "Create Deploy Key", "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", @@ -15634,7 +16032,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_deploy_key", "summary": "Git Deploy Key", "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", @@ -15687,7 +16087,9 @@ }, "/projects/{project_id}/validate": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "validate_project", "summary": "Validate Project", "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", @@ -15767,7 +16169,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_validation_results", "summary": "Cached Project Validation Results", "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", @@ -15832,7 +16236,9 @@ }, "/projects/{project_id}/current_workspace": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_workspace", "summary": "Get Project Workspace", "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", @@ -15894,7 +16300,9 @@ }, "/projects/{project_id}/files": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_project_files", "summary": "Get All Project Files", "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", @@ -15959,7 +16367,9 @@ }, "/projects/{project_id}/files/file": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_file", "summary": "Get Project File", "description": "### Get Project File Info\n\nReturns information about a file in the project\n", @@ -16030,7 +16440,9 @@ }, "/projects/{project_id}/git_connection_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_connection_tests", "summary": "Get All Git Connection Tests", "description": "### Get All Git Connection Tests\n\ndev mode required.\n - Call `update_session` to select the 'dev' workspace.\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", @@ -16095,7 +16507,9 @@ }, "/projects/{project_id}/git_connection_tests/{test_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_git_connection_test", "summary": "Run Git Connection Test", "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", @@ -16195,7 +16609,9 @@ }, "/projects/{project_id}/lookml_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_lookml_tests", "summary": "Get All LookML Tests", "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", @@ -16260,7 +16676,9 @@ }, "/projects/{project_id}/lookml_tests/run": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_lookml_test", "summary": "Run LookML Test", "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", @@ -16363,7 +16781,9 @@ }, "/projects/{project_id}/tag": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "tag_ref", "summary": "Tag Ref", "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n\nThis is an internal-only, undocumented route.\n", @@ -16487,7 +16907,9 @@ }, "/render_tasks/lookml_dashboards/{dashboard_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_lookml_dashboard_render_task", "summary": "Create Lookml Dashboard Render Task", "description": "### Create a new task to render a lookml dashboard to a document or image.\n\n# DEPRECATED: Use [create_dashboard_render_task()](#!/RenderTask/create_dashboard_render_task) in API 4.0+\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -16638,7 +17060,9 @@ }, "/render_tasks/looks/{look_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_look_render_task", "summary": "Create Look Render Task", "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -16760,7 +17184,9 @@ }, "/render_tasks/queries/{query_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_query_render_task", "summary": "Create Query Render Task", "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -16882,7 +17308,9 @@ }, "/render_tasks/dashboards/{dashboard_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_dashboard_render_task", "summary": "Create Dashboard Render Task", "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -17033,7 +17461,9 @@ }, "/render_tasks/{render_task_id}": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task", "summary": "Get Render Task", "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -17095,7 +17525,9 @@ }, "/render_tasks/{render_task_id}/results": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task_results", "summary": "Render Task Results", "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", @@ -17181,7 +17613,9 @@ }, "/projects/{root_project_id}/credential/{credential_id}": { "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_repository_credential", "summary": "Create Repository Credential", "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", @@ -17282,7 +17716,9 @@ } }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_repository_credential", "summary": "Delete Repository Credential", "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", @@ -17354,7 +17790,9 @@ }, "/projects/{root_project_id}/credentials": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "get_all_repository_credentials", "summary": "Get All Repository Credentials", "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", @@ -17410,7 +17848,9 @@ }, "/roles": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_roles", "summary": "Get All Roles", "description": "### Get information about all roles.\n", @@ -17479,7 +17919,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_role", "summary": "Create Role", "description": "### Create a role with the specified information.\n", @@ -17562,7 +18004,9 @@ }, "/roles/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_roles", "summary": "Search Roles", "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -17684,7 +18128,9 @@ }, "/roles/{role_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role", "summary": "Get Role", "description": "### Get information about the role with a specific id.\n", @@ -17736,7 +18182,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_role", "summary": "Delete Role", "description": "### Delete the role with a specific id.\n", @@ -17808,7 +18256,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_role", "summary": "Update Role", "description": "### Update information about the role with a specific id.\n", @@ -17903,7 +18353,9 @@ }, "/roles/{role_id}/groups": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_groups", "summary": "Get Role Groups", "description": "### Get information about all the groups with the role that has a specific id.\n", @@ -17967,7 +18419,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_groups", "summary": "Update Role Groups", "description": "### Set all groups for a role, removing all existing group associations from that role.\n", @@ -18059,7 +18513,9 @@ }, "/roles/{role_id}/users": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_users", "summary": "Get Role Users", "description": "### Get information about all the users with the role that has a specific id.\n", @@ -18132,7 +18588,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_users", "summary": "Update Role Users", "description": "### Set all the users of the role with a specific id.\n", @@ -18244,7 +18702,9 @@ }, "/running_queries": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "all_running_queries", "summary": "Get All Running Queries", "description": "Get information about all running queries.\n", @@ -18279,7 +18739,9 @@ }, "/running_queries/{query_task_id}": { "delete": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "kill_query", "summary": "Kill Running Query", "description": "Kill a query with a specific query_task_id.\n", @@ -18342,7 +18804,9 @@ }, "/saml_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_config", "summary": "Get SAML Configuration", "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n", @@ -18372,7 +18836,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_saml_config", "summary": "Update SAML Configuration", "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n", @@ -18435,7 +18901,9 @@ }, "/saml_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_test_config", "summary": "Get SAML Test Configuration", "description": "### Get a SAML test configuration by test_slug.\n", @@ -18476,7 +18944,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_saml_test_config", "summary": "Delete SAML Test Configuration", "description": "### Delete a SAML test configuration.\n", @@ -18529,7 +18999,9 @@ }, "/saml_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_saml_test_config", "summary": "Create SAML Test Configuration", "description": "### Create a SAML test configuration.\n", @@ -18592,7 +19064,9 @@ }, "/parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "parse_saml_idp_metadata", "summary": "Parse SAML IdP XML", "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n", @@ -18645,7 +19119,9 @@ }, "/fetch_and_parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "fetch_and_parse_saml_idp_metadata", "summary": "Parse SAML IdP Url", "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n", @@ -18698,7 +19174,9 @@ }, "/scheduled_plans/space/{space_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_space", "summary": "Scheduled Plans for Space", "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", @@ -18764,7 +19242,9 @@ }, "/scheduled_plans/{scheduled_plan_id}": { "delete": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "delete_scheduled_plan", "summary": "Delete Scheduled Plan", "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", @@ -18826,7 +19306,9 @@ "x-looker-activity-type": "db_query" }, "patch": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "update_scheduled_plan", "summary": "Update Scheduled Plan", "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -18909,7 +19391,9 @@ } }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan", "summary": "Get Scheduled Plan", "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", @@ -18972,7 +19456,9 @@ }, "/scheduled_plans": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "create_scheduled_plan", "summary": "Create Scheduled Plan", "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://looker.com/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -19053,7 +19539,9 @@ } }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "all_scheduled_plans", "summary": "Get All Scheduled Plans", "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -19138,7 +19626,9 @@ }, "/scheduled_plans/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once", "summary": "Run Scheduled Plan Once", "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -19222,7 +19712,9 @@ }, "/scheduled_plans/look/{look_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_look", "summary": "Scheduled Plans for Look", "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -19307,7 +19799,9 @@ }, "/scheduled_plans/dashboard/{dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_dashboard", "summary": "Scheduled Plans for Dashboard", "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -19392,7 +19886,9 @@ }, "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_lookml_dashboard", "summary": "Scheduled Plans for LookML Dashboard", "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -19476,7 +19972,9 @@ }, "/scheduled_plans/{scheduled_plan_id}/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once_by_id", "summary": "Run Scheduled Plan Once by Id", "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", @@ -19572,7 +20070,9 @@ }, "/session_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "session_config", "summary": "Get Session Config", "description": "### Get session config.\n", @@ -19612,7 +20112,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_session_config", "summary": "Update Session Config", "description": "### Update session config.\n", @@ -19685,7 +20187,9 @@ }, "/session": { "get": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "session", "summary": "Get Session", "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", @@ -19725,7 +20229,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "update_session", "summary": "Update Session", "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", @@ -19798,7 +20304,9 @@ }, "/spaces/search": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "search_spaces", "summary": "Search Spaces", "description": "### Search Spaces\n\n Returns an **array of space objects** that match the given search criteria.\n\n If multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\n Get a **single space** by id with [Space](#!/Space/space)\n", @@ -19959,7 +20467,9 @@ }, "/spaces/{space_id}": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space", "summary": "Get Space", "description": "### Get information about the space with a specific id.", @@ -20020,7 +20530,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "delete_space", "summary": "Delete Space", "description": "### Delete the space with a specific id including any children spaces.\n**DANGER** this will delete all looks and dashboards in the space.\n", @@ -20082,7 +20594,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "update_space", "summary": "Update Space", "description": "### Update the space with a specific id.", @@ -20167,7 +20681,9 @@ }, "/spaces": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "all_spaces", "summary": "Get All Spaces", "description": "### Get information about all spaces.\n\nIn API 3.x, this will not return empty personal spaces, unless they belong to the calling user.\nIn API 4.0+, all personal spaces will be returned.\n\n", @@ -20222,7 +20738,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "create_space", "summary": "Create Space", "description": "### Create a space with specified information.\n\nCaller must have permission to edit the parent space and to create spaces, otherwise the request\nreturns 404 Not Found.\n", @@ -20306,7 +20824,9 @@ }, "/spaces/{space_id}/children": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_children", "summary": "Get Space Children", "description": "### Get the children of a space.", @@ -20401,7 +20921,9 @@ }, "/spaces/{space_id}/children/search": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_children_search", "summary": "Search Space Children", "description": "### Search the children of a space", @@ -20485,7 +21007,9 @@ }, "/spaces/{space_id}/parent": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_parent", "summary": "Get Space Parent", "description": "### Get the parent of a space", @@ -20548,7 +21072,9 @@ }, "/spaces/{space_id}/ancestors": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_ancestors", "summary": "Get Space Ancestors", "description": "### Get the ancestors of a space", @@ -20614,7 +21140,9 @@ }, "/spaces/{space_id}/looks": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_looks", "summary": "Get Space Looks", "description": "### Get all looks in a space.\nIn API 3.x, this will return all looks in a space, including looks in the trash.\nIn API 4.0+, all looks in a space will be returned, excluding looks in the trash.\n", @@ -20680,7 +21208,9 @@ }, "/spaces/{space_id}/dashboards": { "get": { - "tags": ["Space"], + "tags": [ + "Space" + ], "operationId": "space_dashboards", "summary": "Get Space Dashboards", "description": "### Get the dashboards in a space", @@ -20746,7 +21276,9 @@ }, "/folders/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "search_folders", "summary": "Search Folders", "description": "Search for folders by creator id, parent id, name, etc", @@ -20906,7 +21438,9 @@ }, "/folders/{folder_id}": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder", "summary": "Get Folder", "description": "### Get information about the folder with a specific id.", @@ -20966,7 +21500,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "delete_folder", "summary": "Delete Folder", "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", @@ -21027,7 +21563,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "update_folder", "summary": "Update Folder", "description": "### Update the folder with a specific id.", @@ -21111,7 +21649,9 @@ }, "/folders": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "all_folders", "summary": "Get All Folders", "description": "### Get information about all folders.\n\nIn API 3.x, this will not return empty personal folders, unless they belong to the calling user.\nIn API 4.0+, all personal folders will be returned.\n\n", @@ -21165,7 +21705,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "create_folder", "summary": "Create Folder", "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", @@ -21248,7 +21790,9 @@ }, "/folders/{folder_id}/children": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children", "summary": "Get Folder Children", "description": "### Get the children of a folder.", @@ -21342,7 +21886,9 @@ }, "/folders/{folder_id}/children/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children_search", "summary": "Search Folder Children", "description": "### Search the children of a folder", @@ -21425,7 +21971,9 @@ }, "/folders/{folder_id}/parent": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_parent", "summary": "Get Folder Parent", "description": "### Get the parent of a folder", @@ -21487,7 +22035,9 @@ }, "/folders/{folder_id}/ancestors": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_ancestors", "summary": "Get Folder Ancestors", "description": "### Get the ancestors of a folder", @@ -21552,7 +22102,9 @@ }, "/folders/{folder_id}/looks": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_looks", "summary": "Get Folder Looks", "description": "### Get all looks in a folder.\nIn API 3.x, this will return all looks in a folder, including looks in the trash.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", @@ -21617,7 +22169,9 @@ }, "/folders/{folder_id}/dashboards": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_dashboards", "summary": "Get Folder Dashboards", "description": "### Get the dashboards in a folder", @@ -21682,7 +22236,9 @@ }, "/sql_queries/{slug}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "sql_query", "summary": "Get SQL Runner Query", "description": "Get a SQL Runner query.", @@ -21735,7 +22291,9 @@ }, "/sql_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_sql_query", "summary": "Create SQL Runner Query", "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", @@ -21818,7 +22376,9 @@ }, "/sql_queries/{slug}/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_sql_query", "summary": "Run SQL Runner Query", "description": "Execute a SQL Runner query in a given result_format.", @@ -21984,7 +22544,9 @@ }, "/themes": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "all_themes", "summary": "Get All Themes", "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22038,7 +22600,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "create_theme", "summary": "Create Theme", "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://looker.com/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22121,7 +22685,9 @@ }, "/themes/search": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "search_themes", "summary": "Search Themes", "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22254,7 +22820,9 @@ }, "/themes/default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "default_theme", "summary": "Get Default Theme", "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", @@ -22306,7 +22874,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "set_default_theme", "summary": "Set Default Theme", "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22379,7 +22949,9 @@ }, "/themes/active": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "active_themes", "summary": "Get Active Themes", "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n\n", @@ -22454,7 +23026,9 @@ }, "/themes/theme_or_default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme_or_default", "summary": "Get Theme or Default", "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22517,7 +23091,9 @@ }, "/themes/validate": { "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "validate_theme", "summary": "Validate Theme", "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22610,7 +23186,9 @@ }, "/themes/{theme_id}": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme", "summary": "Get Theme", "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22670,7 +23248,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "update_theme", "summary": "Update Theme", "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22752,7 +23332,9 @@ } }, "delete": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "delete_theme", "summary": "Delete Theme", "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -22815,7 +23397,9 @@ }, "/timezones": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_timezones", "summary": "Get All Timezones", "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", @@ -22860,7 +23444,9 @@ }, "/user_attributes": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attributes", "summary": "Get All User Attributes", "description": "### Get information about all user attributes.\n", @@ -22923,7 +23509,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "create_user_attribute", "summary": "Create User Attribute", "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", @@ -23017,7 +23605,9 @@ }, "/user_attributes/{user_attribute_id}": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "user_attribute", "summary": "Get User Attribute", "description": "### Get information about a user attribute.\n", @@ -23078,7 +23668,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "update_user_attribute", "summary": "Update User Attribute", "description": "### Update a user attribute definition.\n", @@ -23170,7 +23762,9 @@ } }, "delete": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "delete_user_attribute", "summary": "Delete User Attribute", "description": "### Delete a user attribute (admin only).\n", @@ -23234,7 +23828,9 @@ }, "/user_attributes/{user_attribute_id}/group_values": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attribute_group_values", "summary": "Get User Attribute Group Values", "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", @@ -23298,7 +23894,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "set_user_attribute_group_values", "summary": "Set User Attribute Group Values", "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", @@ -23399,7 +23997,9 @@ }, "/user_login_lockouts": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "all_user_login_lockouts", "summary": "Get All User Login Lockouts", "description": "### Get currently locked-out users.\n", @@ -23455,7 +24055,9 @@ }, "/user_login_lockouts/search": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "search_user_login_lockouts", "summary": "Search User Login Lockouts", "description": "### Search currently locked-out users.\n", @@ -23585,7 +24187,9 @@ }, "/user_login_lockout/{key}": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_user_login_lockout", "summary": "Delete User Login Lockout", "description": "### Removes login lockout for the associated user.\n", @@ -23648,7 +24252,9 @@ }, "/user": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "me", "summary": "Get Current User", "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", @@ -23691,7 +24297,9 @@ }, "/users": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_users", "summary": "Get All Users", "description": "### Get information about all users.\n", @@ -23789,7 +24397,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user", "summary": "Create User", "description": "### Create a user with the specified information.\n", @@ -23873,7 +24483,9 @@ }, "/users/search": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users", "summary": "Search Users", "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", @@ -24051,7 +24663,9 @@ }, "/users/search/names/{pattern}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users_names", "summary": "Search User Names", "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", @@ -24200,7 +24814,9 @@ }, "/users/{user_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user", "summary": "Get User by Id", "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", @@ -24261,7 +24877,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user", "summary": "Update User", "description": "### Update information about the user with a specific id.\n", @@ -24343,7 +24961,9 @@ } }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user", "summary": "Delete User", "description": "### Delete the user with a specific id.\n\n**DANGER** this will delete the user and all looks and other information owned by the user.\n", @@ -24407,7 +25027,9 @@ }, "/users/credential/{credential_type}/{credential_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_for_credential", "summary": "Get User by Credential Id", "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\n", @@ -24478,7 +25100,9 @@ }, "/users/{user_id}/credentials_email": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_email", "summary": "Get Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -24539,7 +25163,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email", "summary": "Create Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -24641,7 +25267,9 @@ } }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user_credentials_email", "summary": "Update Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -24733,7 +25361,9 @@ } }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_email", "summary": "Delete Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -24797,7 +25427,9 @@ }, "/users/{user_id}/credentials_totp": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_totp", "summary": "Get Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -24858,7 +25490,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_totp", "summary": "Create Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -24960,7 +25594,9 @@ } }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_totp", "summary": "Delete Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -25024,7 +25660,9 @@ }, "/users/{user_id}/credentials_ldap": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_ldap", "summary": "Get LDAP Credential", "description": "### LDAP login information for the specified user.", @@ -25085,7 +25723,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_ldap", "summary": "Delete LDAP Credential", "description": "### LDAP login information for the specified user.", @@ -25149,7 +25789,9 @@ }, "/users/{user_id}/credentials_google": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_google", "summary": "Get Google Auth Credential", "description": "### Google authentication login information for the specified user.", @@ -25210,7 +25852,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_google", "summary": "Delete Google Auth Credential", "description": "### Google authentication login information for the specified user.", @@ -25274,7 +25918,9 @@ }, "/users/{user_id}/credentials_saml": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_saml", "summary": "Get Saml Auth Credential", "description": "### Saml authentication login information for the specified user.", @@ -25335,7 +25981,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_saml", "summary": "Delete Saml Auth Credential", "description": "### Saml authentication login information for the specified user.", @@ -25399,7 +26047,9 @@ }, "/users/{user_id}/credentials_oidc": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_oidc", "summary": "Get OIDC Auth Credential", "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", @@ -25460,7 +26110,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_oidc", "summary": "Delete OIDC Auth Credential", "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", @@ -25524,7 +26176,9 @@ }, "/users/{user_id}/credentials_api3/{credentials_api3_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_api3", "summary": "Get API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -25595,7 +26249,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_api3", "summary": "Delete API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -25669,7 +26325,9 @@ }, "/users/{user_id}/credentials_api3": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_api3s", "summary": "Get All API 3 Credentials", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -25733,7 +26391,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_api3", "summary": "Create API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -25837,7 +26497,9 @@ }, "/users/{user_id}/credentials_embed/{credentials_embed_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_embed", "summary": "Get Embedding Credential", "description": "### Embed login information for the specified user.", @@ -25908,7 +26570,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_embed", "summary": "Delete Embedding Credential", "description": "### Embed login information for the specified user.", @@ -25982,7 +26646,9 @@ }, "/users/{user_id}/credentials_embed": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_embeds", "summary": "Get All Embedding Credentials", "description": "### Embed login information for the specified user.", @@ -26048,7 +26714,9 @@ }, "/users/{user_id}/credentials_looker_openid": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_looker_openid", "summary": "Get Looker OpenId Credential", "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", @@ -26109,7 +26777,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_looker_openid", "summary": "Delete Looker OpenId Credential", "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", @@ -26173,7 +26843,9 @@ }, "/users/{user_id}/sessions/{session_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_session", "summary": "Get Web Login Session", "description": "### Web login session for the specified user.", @@ -26244,7 +26916,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_session", "summary": "Delete Web Login Session", "description": "### Web login session for the specified user.", @@ -26318,7 +26992,9 @@ }, "/users/{user_id}/sessions": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_sessions", "summary": "Get All Web Login Sessions", "description": "### Web login session for the specified user.", @@ -26384,7 +27060,9 @@ }, "/users/{user_id}/credentials_email/password_reset": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email_password_reset", "summary": "Create Password Reset Token", "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n", @@ -26456,7 +27134,9 @@ }, "/users/{user_id}/roles": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_roles", "summary": "Get User Roles", "description": "### Get information about roles of a given user\n", @@ -26529,7 +27209,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_roles", "summary": "Set User Roles", "description": "### Set roles of the user with a specific id.\n", @@ -26610,7 +27292,9 @@ }, "/users/{user_id}/attribute_values": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_attribute_user_values", "summary": "Get User Attribute Values", "description": "### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n", @@ -26699,7 +27383,9 @@ }, "/users/{user_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_attribute_user_value", "summary": "Set User Attribute User Value", "description": "### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n", @@ -26782,7 +27468,9 @@ } }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_attribute_user_value", "summary": "Delete User Attribute User Value", "description": "### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n", @@ -26839,7 +27527,9 @@ }, "/vector_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "vector_thumbnail", "summary": "Get Vector Thumbnail", "description": "### Get a vector image representing the contents of a dashboard or look.\n\n# DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail)\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", @@ -26911,7 +27601,9 @@ }, "/versions": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "versions", "summary": "Get ApiVersion", "description": "### Get information about all API versions supported by this Looker instance.\n", @@ -26964,7 +27656,9 @@ }, "/whitelabel_configuration": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "whitelabel_configuration", "summary": "Get Whitelabel configuration", "description": "### This feature is enabled only by special license.\n### Gets the whitelabel configuration, which includes hiding documentation links, custom favicon uploading, etc.\n", @@ -27015,7 +27709,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_whitelabel_configuration", "summary": "Update Whitelabel configuration", "description": "### Update the whitelabel configuration\n", @@ -27088,7 +27784,9 @@ }, "/workspaces": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "all_workspaces", "summary": "Get All Workspaces", "description": "### Get All Workspaces\n\nReturns all workspaces available to the calling user.\n", @@ -27133,7 +27831,9 @@ }, "/workspaces/{workspace_id}": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "workspace", "summary": "Get Workspace", "description": "### Get A Workspace\n\nReturns information about a workspace such as the git status and selected branches\nof all projects available to the caller's user account.\n\nA workspace defines which versions of project files will be used to evaluate expressions\nand operations that use model definitions - operations such as running queries or rendering dashboards.\nEach project has its own git repository, and each project in a workspace may be configured to reference\nparticular branch or revision within their respective repositories.\n\nThere are two predefined workspaces available: \"production\" and \"dev\".\n\nThe production workspace is shared across all Looker users. Models in the production workspace are read-only.\nChanging files in production is accomplished by modifying files in a git branch and using Pull Requests\nto merge the changes from the dev branch into the production branch, and then telling\nLooker to sync with production.\n\nThe dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect\nthat user, and only when the dev workspace is selected as the active workspace for the API session.\n(See set_session_workspace()).\n\nThe dev workspace is NOT unique to an API session. Two applications accessing the Looker API using\nthe same user account will see the same files in the dev workspace. To avoid collisions between\nAPI clients it's best to have each client login with API3 credentials for a different user account.\n\nChanges made to files in a dev workspace are persistent across API sessions. It's a good\nidea to commit any changes you've made to the git repository, but not strictly required. Your modified files\nreside in a special user-specific directory on the Looker server and will still be there when you login in again\nlater and use update_session(workspace_id: \"dev\") to select the dev workspace for the new API session.\n", @@ -27210,7 +27910,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "DashboardBase": { "properties": { @@ -27422,7 +28125,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "CreateSpace": { "properties": { @@ -27438,7 +28143,10 @@ } }, "x-looker-status": "stable", - "required": ["name", "parent_id"] + "required": [ + "name", + "parent_id" + ] }, "UpdateSpace": { "properties": { @@ -27578,7 +28286,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "Homepage": { "properties": { @@ -27962,7 +28672,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "ValidationErrorDetail": { "properties": { @@ -27993,7 +28706,9 @@ } }, "x-looker-status": "stable", - "required": ["documentation_url"] + "required": [ + "documentation_url" + ] }, "AccessToken": { "properties": { @@ -28277,7 +28992,10 @@ "permission_type": { "type": "string", "readOnly": true, - "enum": ["view", "edit"], + "enum": [ + "view", + "edit" + ], "description": "Type of permission: \"view\" or \"edit\" Valid values are: \"view\", \"edit\".", "nullable": true }, @@ -28503,7 +29221,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "ContentValidationFolder": { "properties": { @@ -28520,7 +29240,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "ContentValidationLook": { "properties": { @@ -29479,12 +30201,12 @@ }, "subject": { "type": "string", - "description": "The text to appear in the email subject line.", + "description": "The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", "nullable": true }, "header": { "type": "string", - "description": "The text to appear in the header line of the email body.", + "description": "The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", "nullable": true } }, @@ -29903,7 +30625,12 @@ } }, "x-looker-status": "stable", - "required": ["dashboard_id", "name", "title", "type"] + "required": [ + "dashboard_id", + "name", + "title", + "type" + ] }, "DashboardLayoutComponent": { "properties": { @@ -30245,6 +30972,11 @@ "description": "Number of times favorited", "nullable": true }, + "filters_bar_collapsed": { + "type": "boolean", + "description": "Sets the default state of the filters bar to collapsed or open", + "nullable": false + }, "last_accessed_at": { "type": "string", "format": "date-time", @@ -31275,7 +32007,9 @@ } }, "x-looker-status": "stable", - "required": ["target_url"] + "required": [ + "target_url" + ] }, "EmbedUrlResponse": { "properties": { @@ -31393,7 +32127,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "CreateFolder": { "properties": { @@ -31409,7 +32145,10 @@ } }, "x-looker-status": "stable", - "required": ["name", "parent_id"] + "required": [ + "name", + "parent_id" + ] }, "UpdateFolder": { "properties": { @@ -31549,7 +32288,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "GitBranch": { "properties": { @@ -32035,7 +32776,11 @@ "type": "string" }, "readOnly": true, - "enum": ["cell", "query", "dashboard"], + "enum": [ + "cell", + "query", + "dashboard" + ], "description": "A list of action types the integration supports. Valid values are: \"cell\", \"query\", \"dashboard\".", "nullable": false }, @@ -32045,7 +32790,10 @@ "type": "string" }, "readOnly": true, - "enum": ["formatted", "unformatted"], + "enum": [ + "formatted", + "unformatted" + ], "description": "A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"formatted\", \"unformatted\".", "nullable": false }, @@ -32055,7 +32803,10 @@ "type": "string" }, "readOnly": true, - "enum": ["apply", "noapply"], + "enum": [ + "apply", + "noapply" + ], "description": "A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"apply\", \"noapply\".", "nullable": false }, @@ -32065,7 +32816,10 @@ "type": "string" }, "readOnly": true, - "enum": ["push", "url"], + "enum": [ + "push", + "url" + ], "description": "A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: \"push\", \"url\".", "nullable": false }, @@ -34122,7 +34876,10 @@ "align": { "type": "string", "readOnly": true, - "enum": ["left", "right"], + "enum": [ + "left", + "right" + ], "description": "The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: \"left\", \"right\".", "nullable": false }, @@ -34135,7 +34892,12 @@ "category": { "type": "string", "readOnly": true, - "enum": ["parameter", "filter", "measure", "dimension"], + "enum": [ + "parameter", + "filter", + "measure", + "dimension" + ], "description": "Field category Valid values are: \"parameter\", \"filter\", \"measure\", \"dimension\".", "nullable": true }, @@ -34187,7 +34949,10 @@ "fill_style": { "type": "string", "readOnly": true, - "enum": ["enumeration", "range"], + "enum": [ + "enumeration", + "range" + ], "description": "The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: \"enumeration\", \"range\".", "nullable": true }, @@ -34602,7 +35367,10 @@ "format": { "type": "string", "readOnly": true, - "enum": ["topojson", "vector_tile_region"], + "enum": [ + "topojson", + "vector_tile_region" + ], "description": "Specifies the data format of the region information. Valid values are: \"topojson\", \"vector_tile_region\".", "nullable": false }, @@ -35723,7 +36491,12 @@ }, "pull_request_mode": { "type": "string", - "enum": ["off", "links", "recommended", "required"], + "enum": [ + "off", + "links", + "recommended", + "required" + ], "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", "nullable": false }, @@ -36164,7 +36937,10 @@ } }, "x-looker-status": "stable", - "required": ["model", "view"] + "required": [ + "model", + "view" + ] }, "CreateQueryTask": { "properties": { @@ -36223,7 +36999,10 @@ } }, "x-looker-status": "stable", - "required": ["query_id", "result_format"] + "required": [ + "query_id", + "result_format" + ] }, "QueryTask": { "properties": { @@ -38872,4 +39651,4 @@ } } } -} +} \ No newline at end of file diff --git a/spec/Looker.4.0.json b/spec/Looker.4.0.json index f82257aed..d1af922f6 100644 --- a/spec/Looker.4.0.json +++ b/spec/Looker.4.0.json @@ -1,10 +1,10 @@ { "swagger": "2.0", "info": { - "version": "4.0.21.14", - "x-looker-release-version": "21.14.0", + "version": "4.0.21.16", + "x-looker-release-version": "21.16.0", "title": "Looker API 4.0 (Beta) Reference", - "description": "\nWelcome to the future! API 4.0 co-exists with APIs 3.1 and 3.0. (3.0 should no longer be used.)\nThe \"beta\" tag means updates for API 4.0 may include breaking changes, but as always we will work to minimize them.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 version was introduced so we can make adjustments to API functions, parameters, and response types to\nfix bugs and inconsistencies. These changes fall outside the bounds of non-breaking additive changes we can\nmake to our stable API 3.1.\n\nOne benefit of these type adjustments in API 4.0 is dramatically better support for strongly\ntyped languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nWhile API 3.1 is still the de-facto Looker API (\"current\", \"stable\", \"default\", etc), the bulk\nof our development activity has shifted to API 4.0, where all new features are added.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n", + "description": "\nWelcome to the future! API 4.0 co-exists with APIs 3.1 and 3.0. (3.0 should no longer be used.)\nThe \"beta\" tag means updates for API 4.0 may include breaking changes, but as always we will work to minimize them.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 version was introduced so we can make adjustments to API functions, parameters, and response types to\nfix bugs and inconsistencies. These changes fall outside the bounds of non-breaking additive changes we can\nmake to our stable API 3.1.\n\nOne benefit of these type adjustments in API 4.0 is dramatically better support for strongly\ntyped languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nWhile API 3.1 is still the de-facto Looker API (\"current\", \"stable\", \"default\", etc), the bulk\nof our development activity has shifted to API 4.0, where all new features are added.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://looker.com/docs/r/api/support-policy) for more information.\n\n\n", "contact": { "name": "Looker Team", "url": "https://help.looker.com" @@ -15,10 +15,16 @@ } }, "basePath": "/api/4.0", - "consumes": ["application/json"], - "produces": ["application/json"], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], "host": "localhost:20000", - "schemes": ["https"], + "schemes": [ + "https" + ], "tags": [ { "name": "Alert", @@ -140,7 +146,9 @@ "paths": { "/query_tasks": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query_task", "summary": "Run Query Async", "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n", @@ -293,7 +301,9 @@ }, "/query_tasks/multi_results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_multi_results", "summary": "Get Multiple Async Query Results", "description": "### Fetch results of multiple async queries\n\nReturns the results of multiple async queries in one request.\n\nFor Query Tasks that are not completed, the response will include the execution status of the Query Task but will not include query results.\nQuery Tasks whose results have expired will have a status of 'expired'.\nIf the user making the API request does not have sufficient privileges to view a Query Task result, the result will have a status of 'missing'\n", @@ -340,7 +350,9 @@ }, "/query_tasks/{query_task_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task", "summary": "Get Async Query Info", "description": "### Get Query Task details\n\nUse this function to check the status of an async query task. After the status\nreaches \"Complete\", you can call [query_task_results(query_task_id)](#!/Query/query_task_results) to\nretrieve the results of the query.\n\nUse [create_query_task()](#!/Query/create_query_task) to create an async query task.\n", @@ -386,11 +398,16 @@ }, "/query_tasks/{query_task_id}/results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_results", "summary": "Get Async Query Results", "description": "### Get Async Query Results\n\nReturns the results of an async query task if the query has completed.\n\nIf the query task is still running or waiting to run, this function returns 204 No Content.\n\nIf the query task ID is invalid or the cached results of the query task have expired, this function returns 404 Not Found.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task\nCall query_task_results only after the query task status reaches \"Complete\".\n\nYou can also use [query_task_multi_results()](#!/Query/query_task_multi_results) retrieve the\nresults of multiple async query tasks at the same time.\n\n#### SQL Error Handling:\nIf the query fails due to a SQL db error, how this is communicated depends on the result_format you requested in `create_query_task()`.\n\nFor `json_detail` result_format: `query_task_results()` will respond with HTTP status '200 OK' and db SQL error info\nwill be in the `errors` property of the response object. The 'data' property will be empty.\n\nFor all other result formats: `query_task_results()` will respond with HTTP status `400 Bad Request` and some db SQL error info\nwill be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`.\nThese data formats can only carry row data, and error info is not row data.\n", - "produces": ["text", "application/json"], + "produces": [ + "text", + "application/json" + ], "parameters": [ { "name": "query_task_id", @@ -432,7 +449,9 @@ }, "/queries/{query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query", "summary": "Get Query", "description": "### Get a previously created query by id.\n\nA Looker query object includes the various parameters that define a database query that has been run or\ncould be run in the future. These parameters include: model, view, fields, filters, pivots, etc.\nQuery *results* are not part of the query object.\n\nQuery objects are unique and immutable. Query objects are created automatically in Looker as users explore data.\nLooker does not delete them; they become part of the query history. When asked to create a query for\nany given set of parameters, Looker will first try to find an existing query object with matching\nparameters and will only create a new object when an appropriate object can not be found.\n\nThis 'get' method is used to get the details about a query for a given id. See the other methods here\nto 'create' and 'run' queries.\n\nNote that some fields like 'filter_config' and 'vis_config' etc are specific to how the Looker UI\nbuilds queries and visualizations and are not generally useful for API use. They are not required when\ncreating new queries and can usually just be ignored.\n\n", @@ -479,7 +498,9 @@ }, "/queries/slug/{slug}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_for_slug", "summary": "Get Query for Slug", "description": "### Get the query for a given query slug.\n\nThis returns the query for the 'slug' in a query share URL.\n\nThe 'slug' is a randomly chosen short string that is used as an alternative to the query's id value\nfor use in URLs etc. This method exists as a convenience to help you use the API to 'find' queries that\nhave been created using the Looker UI.\n\nYou can use the Looker explore page to build a query and then choose the 'Share' option to\nshow the share url for the query. Share urls generally look something like 'https://looker.yourcompany/x/vwGSbfc'.\nThe trailing 'vwGSbfc' is the share slug. You can pass that string to this api method to get details about the query.\nThose details include the 'id' that you can use to run the query. Or, you can copy the query body\n(perhaps with your own modification) and use that as the basis to make/run new queries.\n\nThis will also work with slugs from Looker explore urls like\n'https://looker.yourcompany/explore/ecommerce/orders?qid=aogBgL6o3cKK1jN3RoZl5s'. In this case\n'aogBgL6o3cKK1jN3RoZl5s' is the slug.\n", @@ -525,7 +546,9 @@ }, "/queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query", "summary": "Create Query", "description": "### Create a query.\n\nThis allows you to create a new query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", @@ -591,11 +614,18 @@ }, "/queries/{query_id}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_query", "summary": "Run Query", "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "query_id", @@ -738,11 +768,18 @@ }, "/queries/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_inline_query", "summary": "Run Inline Query", "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "result_format", @@ -886,11 +923,18 @@ }, "/queries/models/{model_name}/views/{view_name}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_url_encoded_query", "summary": "Run Url Encoded Query", "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/3.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n :fields => \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n :sorts => \"products.count desc 0\",\n :limit => \"500\",\n :query_timezone => \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "model_name", @@ -952,11 +996,15 @@ }, "/login": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login", "summary": "Login", "description": "### Present client credentials to obtain an authorization token\n\nLooker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://looker.com/docs/r/api/outh2_resource_owner_pc) pattern.\nThe client credentials required for this login must be obtained by creating an API3 key on a user account\nin the Looker Admin console. The API3 key consists of a public `client_id` and a private `client_secret`.\n\nThe access token returned by `login` must be used in the HTTP Authorization header of subsequent\nAPI requests, like this:\n```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```\nReplace \"4QDkCy...\" with the `access_token` value returned by `login`.\nThe word `token` is a string literal and must be included exactly as shown.\n\nThis function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params.\n\nExample of passing credentials in the HTTP request body:\n````\nPOST HTTP /login\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv\n````\n\n### Best Practice:\nAlways pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations.\n\nFor more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API3](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md).\n", - "consumes": ["application/x-www-form-urlencoded"], + "consumes": [ + "application/x-www-form-urlencoded" + ], "parameters": [ { "name": "client_id", @@ -999,7 +1047,9 @@ }, "/login/{user_id}": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login_user", "summary": "Login user", "description": "### Create an access token that runs as a given user.\n\nThis can only be called by an authenticated admin user. It allows that admin to generate a new\nauthentication token for the user with the given user id. That token can then be used for subsequent\nAPI calls - which are then performed *as* that target user.\n\nThe target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such\ncredentials are created by this call.\n\nThis allows for building systems where api user authentication for an arbitrary number of users is done\noutside of Looker and funneled through a single 'service account' with admin permissions. Note that a\nnew access token is generated on each call. If target users are going to be making numerous API\ncalls in a short period then it is wise to cache this authentication token rather than call this before\neach of those API calls.\n\nSee 'login' for more detail on the access token and how to use it.\n", @@ -1046,7 +1096,9 @@ }, "/logout": { "delete": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "logout", "summary": "Logout", "description": "### Logout of the API and invalidate the current access token.\n", @@ -1076,7 +1128,9 @@ }, "/alerts/search": { "get": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "search_alerts", "summary": "Search Alerts", "description": "### Search Alerts\n", @@ -1097,6 +1151,13 @@ "type": "integer", "format": "int64" }, + { + "name": "group_by", + "in": "query", + "description": "(Optional) Dimension by which to order the results(`dashboard` | `owner`)", + "required": false, + "type": "string" + }, { "name": "fields", "in": "query", @@ -1182,7 +1243,9 @@ }, "/alerts/{alert_id}": { "get": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "get_alert", "summary": "Get an alert", "description": "### Get an alert by a given alert ID\n", @@ -1220,7 +1283,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "update_alert_field", "summary": "Update select fields on an alert", "description": "### Update select alert fields\n# Available fields: `owner_id`, `is_disabled`, `is_public`, `threshold`\n#\n", @@ -1285,7 +1350,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "update_alert", "summary": "Update an alert", "description": "### Update an alert\n# Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n#\n", @@ -1344,7 +1411,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "delete_alert", "summary": "Delete an alert", "description": "### Delete an alert by a given alert ID\n", @@ -1393,7 +1462,9 @@ }, "/alerts": { "post": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "create_alert", "summary": "Create an alert", "description": "### Create a new alert and return details of the newly created object\n\nRequired fields: `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n\nExample Request:\nRun alert on dashboard element '103' at 5am every day. Send an email to 'test@test.com' if inventory for Los Angeles (using dashboard filter `Warehouse Name`) is lower than 1,000\n```\n{\n \"cron\": \"0 5 * * *\",\n \"custom_title\": \"Alert when LA inventory is low\",\n \"dashboard_element_id\": 103,\n \"applied_dashboard_filters\": [\n {\n \"filter_title\": \"Warehouse Name\",\n \"field_name\": \"distribution_centers.name\",\n \"filter_value\": \"Los Angeles CA\",\n \"filter_description\": \"is Los Angeles CA\"\n }\n ],\n \"comparison_type\": \"LESS_THAN\",\n \"destinations\": [\n {\n \"destination_type\": \"EMAIL\",\n \"email_address\": \"test@test.com\"\n }\n ],\n \"field\": {\n \"title\": \"Number on Hand\",\n \"name\": \"inventory_items.number_on_hand\"\n },\n \"is_disabled\": false,\n \"is_public\": true,\n \"threshold\": 1000\n}\n```\n", @@ -1456,9 +1527,63 @@ "x-looker-activity-type": "non_query" } }, + "/alerts/{alert_id}/enqueue": { + "post": { + "tags": [ + "Alert" + ], + "operationId": "enqueue_alert", + "summary": "Enqueue an alert", + "description": "### Enqueue an Alert by ID\n", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "force", + "in": "query", + "description": "Whether to enqueue an alert again if its already running.", + "required": false, + "type": "boolean" + } + ], + "responses": { + "204": { + "description": "Alert successfully added to the queue. Does not indicate it has been run" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, "/cloud_storage": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "cloud_storage_configuration", "summary": "Get Cloud Storage", "description": "Get the current Cloud Storage Configuration.\n", @@ -1486,7 +1611,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_cloud_storage_configuration", "summary": "Update Cloud Storage", "description": "Update the current Cloud Storage Configuration.\n", @@ -1533,7 +1660,9 @@ }, "/color_collections": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "all_color_collections", "summary": "Get all Color Collections", "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1573,7 +1702,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "create_color_collection", "summary": "Create ColorCollection", "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1638,7 +1769,9 @@ }, "/color_collections/custom": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_custom", "summary": "Get all Custom Color Collections", "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1680,7 +1813,9 @@ }, "/color_collections/standard": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_standard", "summary": "Get all Standard Color Collections", "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1722,7 +1857,9 @@ }, "/color_collections/default": { "put": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "set_default_color_collection", "summary": "Set Default Color Collection", "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1771,7 +1908,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "default_color_collection", "summary": "Get Default Color Collection", "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", @@ -1801,7 +1940,9 @@ }, "/color_collections/{collection_id}": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collection", "summary": "Get Color Collection by ID", "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1845,7 +1986,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "update_color_collection", "summary": "Update Custom Color collection", "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1909,7 +2052,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "delete_color_collection", "summary": "Delete ColorCollection", "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1963,7 +2108,9 @@ }, "/commands": { "post": { - "tags": ["Command"], + "tags": [ + "Command" + ], "operationId": "create_command", "summary": "Create a custom command", "description": "### Create a new command.\n# Required fields: [:name, :linked_content_id, :linked_content_type]\n# `linked_content_type` must be one of [\"dashboard\", \"lookml_dashboard\"]\n#\n", @@ -2020,7 +2167,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Command"], + "tags": [ + "Command" + ], "operationId": "get_all_commands", "summary": "Get All Commands", "description": "### Get All Commands.\n", @@ -2083,7 +2232,9 @@ }, "/commands/{command_id}": { "patch": { - "tags": ["Command"], + "tags": [ + "Command" + ], "operationId": "update_command", "summary": "Update a custom command", "description": "### Update an existing custom command.\n# Optional fields: ['name', 'description']\n#\n", @@ -2142,7 +2293,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Command"], + "tags": [ + "Command" + ], "operationId": "delete_command", "summary": "Delete a custom command", "description": "### Delete an existing custom command.\n", @@ -2191,7 +2344,9 @@ }, "/content_favorite/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_favorites", "summary": "Search Favorite Contents", "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -2306,7 +2461,9 @@ }, "/content_favorite/{content_favorite_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_favorite", "summary": "Get Favorite Content", "description": "### Get favorite content by its id", @@ -2351,7 +2508,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_favorite", "summary": "Delete Favorite Content", "description": "### Delete favorite content", @@ -2397,7 +2556,9 @@ }, "/content_favorite": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_favorite", "summary": "Create Favorite Content", "description": "### Create favorite content", @@ -2456,7 +2617,9 @@ }, "/content_metadata": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadatas", "summary": "Get All Content Metadatas", "description": "### Get information about all content metadata in a space.\n", @@ -2506,7 +2669,9 @@ }, "/content_metadata/{content_metadata_id}": { "patch": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata", "summary": "Update Content Metadata", "description": "### Move a piece of content.\n", @@ -2565,7 +2730,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_metadata", "summary": "Get Content Metadata", "description": "### Get information about an individual content metadata record.\n", @@ -2612,7 +2779,9 @@ }, "/content_metadata_access": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_metadata_access", "summary": "Create Content Metadata Access", "description": "### Create content metadata access.\n", @@ -2677,7 +2846,9 @@ "x-looker-rate-limited": true }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadata_accesses", "summary": "Get All Content Metadata Accesses", "description": "### All content metadata access records for a content metadata item.\n", @@ -2727,7 +2898,9 @@ }, "/content_metadata_access/{content_metadata_access_id}": { "put": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata_access", "summary": "Update Content Metadata Access", "description": "### Update type of access for content metadata.\n", @@ -2785,7 +2958,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_metadata_access", "summary": "Delete Content Metadata Access", "description": "### Remove content metadata access.\n", @@ -2831,11 +3006,16 @@ }, "/content_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_thumbnail", "summary": "Get Content Thumbnail", "description": "### Get an image representing the contents of a dashboard or look.\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", - "produces": ["image/svg+xml", "image/png"], + "produces": [ + "image/svg+xml", + "image/png" + ], "parameters": [ { "name": "type", @@ -2908,7 +3088,9 @@ }, "/content_validation": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_validation", "summary": "Validate Content", "description": "### Validate All Content\n\nPerforms validation of all looks and dashboards\nReturns a list of errors found as well as metadata about the content validation run.\n", @@ -2959,7 +3141,9 @@ }, "/content_view/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_views", "summary": "Search Content Views", "description": "### Search Content Views\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -3087,7 +3271,9 @@ }, "/credentials_email/search": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_credentials_email", "summary": "Search CredentialsEmail", "description": "### Search email credentials\n\nReturns all credentials_email records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -3181,7 +3367,9 @@ }, "/custom_welcome_email": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "custom_welcome_email", "summary": "Get Custom Welcome Email", "description": "### Get the current status and content of custom welcome emails\n", @@ -3205,11 +3393,14 @@ } } }, - "x-looker-status": "beta", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email", "summary": "Update Custom Welcome Email Content", "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", @@ -3263,13 +3454,16 @@ } } }, - "x-looker-status": "beta", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query" } }, "/custom_welcome_email_test": { "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email_test", "summary": "Send a test welcome email to the currently logged in user with the supplied content ", "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", @@ -3322,7 +3516,9 @@ }, "/dashboards": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "all_dashboards", "summary": "Get All Dashboards", "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -3362,7 +3558,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard", "summary": "Create Dashboard", "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title`, `user_id`, and `space_id` are all required fields.\n`Space_id` and `user_id` must contain the id of an existing space or user, respectively.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", @@ -3421,7 +3619,9 @@ }, "/dashboards/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboards", "summary": "Search Dashboards", "description": "### Search Dashboards\n\nReturns an **array of dashboard objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", @@ -3593,7 +3793,9 @@ }, "/dashboards/{lookml_dashboard_id}/import/{space_id}": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "import_lookml_dashboard", "summary": "Import LookML Dashboard", "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -3679,7 +3881,9 @@ }, "/dashboards/{lookml_dashboard_id}/sync": { "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "sync_lookml_dashboard", "summary": "Sync LookML Dashboard", "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -3750,7 +3954,9 @@ }, "/dashboards/{dashboard_id}": { "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard", "summary": "Delete Dashboard", "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", @@ -3799,7 +4005,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard", "summary": "Update Dashboard", "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", @@ -3863,7 +4071,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard", "summary": "Get Dashboard", "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -3909,7 +4119,9 @@ }, "/dashboards/aggregate_table_lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_aggregate_table_lookml", "summary": "Get Aggregate Table LookML for a dashboard", "description": "### Get Aggregate Table LookML for Each Query on a Dahboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", @@ -3948,7 +4160,9 @@ }, "/dashboards/lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_lookml", "summary": "Get lookml of a UDD", "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", @@ -3985,25 +4199,27 @@ "x-looker-activity-type": "non_query" } }, - "/dashboards/{dashboard_id}/copy": { - "post": { - "tags": ["Dashboard"], - "operationId": "copy_dashboard", - "summary": "Copy Dashboard", - "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", + "/dashboards/{dashboard_id}/move": { + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "move_dashboard", + "summary": "Move Dashboard", + "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", "parameters": [ { "name": "dashboard_id", "in": "path", - "description": "Dashboard id to copy.", + "description": "Dashboard id to move.", "required": true, "type": "string" }, { "name": "folder_id", "in": "query", - "description": "Folder id to copy to.", - "required": false, + "description": "Folder id to move to.", + "required": true, "type": "string" } ], @@ -4032,12 +4248,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -4055,25 +4265,27 @@ "x-looker-activity-type": "non_query" } }, - "/dashboards/{dashboard_id}/move": { - "patch": { - "tags": ["Dashboard"], - "operationId": "move_dashboard", - "summary": "Move Dashboard", - "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", + "/dashboards/{dashboard_id}/copy": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "copy_dashboard", + "summary": "Copy Dashboard", + "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", "parameters": [ { "name": "dashboard_id", "in": "path", - "description": "Dashboard id to move.", + "description": "Dashboard id to copy.", "required": true, "type": "string" }, { "name": "folder_id", "in": "query", - "description": "Folder id to move to.", - "required": true, + "description": "Folder id to copy to.", + "required": false, "type": "string" } ], @@ -4102,6 +4314,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -4121,7 +4339,9 @@ }, "/dashboard_elements/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboard_elements", "summary": "Search Dashboard Elements", "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -4207,7 +4427,9 @@ }, "/dashboard_elements/{dashboard_element_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_element", "summary": "Get DashboardElement", "description": "### Get information about the dashboard element with a specific id.", @@ -4251,7 +4473,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_element", "summary": "Delete DashboardElement", "description": "### Delete a dashboard element with a specific id.", @@ -4294,7 +4518,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_element", "summary": "Update DashboardElement", "description": "### Update the dashboard element with a specific id.", @@ -4361,7 +4587,9 @@ }, "/dashboards/{dashboard_id}/dashboard_elements": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_elements", "summary": "Get All DashboardElements", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -4410,7 +4638,9 @@ }, "/dashboard_elements": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_element", "summary": "Create DashboardElement", "description": "### Create a dashboard element on the dashboard with a specific id.", @@ -4476,7 +4706,9 @@ }, "/dashboard_filters/{dashboard_filter_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_filter", "summary": "Get Dashboard Filter", "description": "### Get information about the dashboard filters with a specific id.", @@ -4520,7 +4752,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_filter", "summary": "Delete Dashboard Filter", "description": "### Delete a dashboard filter with a specific id.", @@ -4563,7 +4797,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_filter", "summary": "Update Dashboard Filter", "description": "### Update the dashboard filter with a specific id.", @@ -4630,7 +4866,9 @@ }, "/dashboards/{dashboard_id}/dashboard_filters": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_filters", "summary": "Get All Dashboard Filters", "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", @@ -4679,7 +4917,9 @@ }, "/dashboard_filters": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_filter", "summary": "Create Dashboard Filter", "description": "### Create a dashboard filter on the dashboard with a specific id.", @@ -4745,7 +4985,9 @@ }, "/dashboard_layout_components/{dashboard_layout_component_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_component", "summary": "Get DashboardLayoutComponent", "description": "### Get information about the dashboard elements with a specific id.", @@ -4789,7 +5031,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout_component", "summary": "Update DashboardLayoutComponent", "description": "### Update the dashboard element with a specific id.", @@ -4856,7 +5100,9 @@ }, "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_dashboard_layout_components", "summary": "Get All DashboardLayoutComponents", "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", @@ -4905,7 +5151,9 @@ }, "/dashboard_layouts/{dashboard_layout_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout", "summary": "Get DashboardLayout", "description": "### Get information about the dashboard layouts with a specific id.", @@ -4949,7 +5197,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_layout", "summary": "Delete DashboardLayout", "description": "### Delete a dashboard layout with a specific id.", @@ -4998,7 +5248,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout", "summary": "Update DashboardLayout", "description": "### Update the dashboard layout with a specific id.", @@ -5065,7 +5317,9 @@ }, "/dashboards/{dashboard_id}/dashboard_layouts": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_layouts", "summary": "Get All DashboardLayouts", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -5114,7 +5368,9 @@ }, "/dashboard_layouts": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_layout", "summary": "Create DashboardLayout", "description": "### Create a dashboard layout on the dashboard with a specific id.", @@ -5180,7 +5436,9 @@ }, "/data_actions": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "perform_data_action", "summary": "Send a Data Action", "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", @@ -5221,7 +5479,9 @@ }, "/data_actions/form": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "fetch_remote_data_action_form", "summary": "Fetch Remote Data Action Form", "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", @@ -5271,7 +5531,9 @@ }, "/datagroups": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "all_datagroups", "summary": "Get All Datagroups", "description": "### Get information about all datagroups.\n", @@ -5304,7 +5566,9 @@ }, "/datagroups/{datagroup_id}": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "datagroup", "summary": "Get Datagroup", "description": "### Get information about a datagroup.\n", @@ -5342,7 +5606,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "update_datagroup", "summary": "Update Datagroup", "description": "### Update a datagroup using the specified params.\n", @@ -5409,7 +5675,9 @@ }, "/connections": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_connections", "summary": "Get All Connections", "description": "### Get information about all connections.\n", @@ -5449,7 +5717,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_connection", "summary": "Create Connection", "description": "### Create a connection using the specified configuration.\n", @@ -5508,7 +5778,9 @@ }, "/connections/{connection_name}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "connection", "summary": "Get Connection", "description": "### Get information about a connection.\n", @@ -5552,7 +5824,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_connection", "summary": "Update Connection", "description": "### Update a connection using the specified configuration.\n", @@ -5610,7 +5884,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection", "summary": "Delete Connection", "description": "### Delete a connection.\n", @@ -5655,7 +5931,9 @@ }, "/connections/{connection_name}/connection_override/{override_context}": { "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection_override", "summary": "Delete Connection Override", "description": "### Delete a connection override.\n", @@ -5713,7 +5991,9 @@ }, "/connections/{connection_name}/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection", "summary": "Test Connection", "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -5779,7 +6059,9 @@ }, "/connections/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection_config", "summary": "Test Connection Configuration", "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -5841,7 +6123,9 @@ }, "/projects/{project_id}/manifest/lock_all": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "lock_all", "summary": "Lock All", "description": " ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n", @@ -5902,7 +6186,9 @@ }, "/derived_table/graph/model/{model}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "graph_derived_tables_for_model", "summary": "Get Derived Table", "description": "### Discover information about derived tables\n", @@ -5955,7 +6241,9 @@ }, "/dialect_info": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_dialect_infos", "summary": "Get All Dialect Infos", "description": "### Get information about all dialects.\n", @@ -5997,7 +6285,9 @@ }, "/digest_emails_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "digest_emails_enabled", "summary": "Get Digest_emails", "description": "### Retrieve the value for whether or not digest emails is enabled\n", @@ -6025,7 +6315,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_digest_emails_enabled", "summary": "Update Digest_emails", "description": "### Update the setting for enabling/disabling digest emails\n", @@ -6078,7 +6370,9 @@ }, "/digest_email_send": { "post": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "create_digest_email_send", "summary": "Deliver digest email contents", "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", @@ -6115,7 +6409,9 @@ }, "/embed/sso_url": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_sso_embed_url", "summary": "Create SSO Embed Url", "description": "### Create SSO Embed URL\n\nCreates an SSO embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to this URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed SSO embed URL can only be used once. After it has been used to request a page from the\nLooker server, the URL is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (group_ids property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the group_ids property, or both the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the group_ids, models, and permissions properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nSSO embed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nTo diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the newest active secret defined in the Looker instance.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", @@ -6174,7 +6470,9 @@ }, "/embed/token_url/me": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_embed_url_as_me", "summary": "Create Embed URL", "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.looker.com/r/admin/embed/private-embed). Instead of\nof logging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this embed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", @@ -6233,7 +6531,9 @@ }, "/external_oauth_applications": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_external_oauth_applications", "summary": "Get All External OAuth Applications", "description": "### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", @@ -6280,7 +6580,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_external_oauth_application", "summary": "Create External OAuth Application", "description": "### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", @@ -6339,7 +6641,9 @@ }, "/external_oauth_applications/user_state": { "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_oauth_application_user_state", "summary": "Create Create OAuth user state.", "description": "### Create OAuth User state.\n", @@ -6398,7 +6702,9 @@ }, "/projects/{project_id}/git_branches": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_branches", "summary": "Get All Git Branches", "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", @@ -6440,7 +6746,9 @@ }, "/projects/{project_id}/git_branch": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_branch", "summary": "Get Active Git Branch", "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", @@ -6477,7 +6785,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_branch", "summary": "Checkout New Git Branch", "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", @@ -6541,7 +6851,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_git_branch", "summary": "Update Project Git Branch", "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", @@ -6601,7 +6913,9 @@ }, "/projects/{project_id}/git_branch/{branch_name}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "find_git_branch", "summary": "Find a Git Branch", "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", @@ -6645,7 +6959,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_git_branch", "summary": "Delete a Git Branch", "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", @@ -6697,7 +7013,9 @@ }, "/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_groups", "summary": "Get All Groups", "description": "### Get information about all groups.\n", @@ -6787,7 +7105,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "create_group", "summary": "Create Group", "description": "### Creates a new group (admin only).\n", @@ -6853,7 +7173,9 @@ }, "/groups/search": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups", "summary": "Search Groups", "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -6961,7 +7283,9 @@ }, "/groups/search/with_roles": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups_with_roles", "summary": "Search Groups with Roles", "description": "### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -7069,7 +7393,9 @@ }, "/groups/search/with_hierarchy": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups_with_hierarchy", "summary": "Search Groups with Hierarchy", "description": "### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -7177,7 +7503,9 @@ }, "/groups/{group_id}": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "group", "summary": "Get Group", "description": "### Get information about a group.\n", @@ -7222,7 +7550,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_group", "summary": "Update Group", "description": "### Updates the a group (admin only).", @@ -7288,7 +7618,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group", "summary": "Delete Group", "description": "### Deletes a group (admin only).\n", @@ -7340,7 +7672,9 @@ }, "/groups/{group_id}/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_groups", "summary": "Get All Groups in Group", "description": "### Get information about all the groups in a group\n", @@ -7388,7 +7722,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_group", "summary": "Add a Group to Group", "description": "### Adds a new group to a group.\n", @@ -7443,7 +7779,9 @@ }, "/groups/{group_id}/users": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_users", "summary": "Get All Users in Group", "description": "### Get information about all the users directly included in a group.\n", @@ -7514,7 +7852,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_user", "summary": "Add a User to Group", "description": "### Adds a new user to a group.\n", @@ -7569,7 +7909,9 @@ }, "/groups/{group_id}/users/{user_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_user", "summary": "Remove a User from Group", "description": "### Removes a user from a group.\n", @@ -7620,7 +7962,9 @@ }, "/groups/{group_id}/groups/{deleting_group_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_from_group", "summary": "Deletes a Group from Group", "description": "### Removes a group from a group.\n", @@ -7671,7 +8015,9 @@ }, "/groups/{group_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_user_attribute_group_value", "summary": "Set User Attribute Group Value", "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", @@ -7732,7 +8078,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_user_attribute_group_value", "summary": "Delete User Attribute Group Value", "description": "### Remove a user attribute value from a group.\n", @@ -7777,7 +8125,9 @@ }, "/boards": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "all_boards", "summary": "Get All Boards", "description": "### Get information about all boards.\n", @@ -7817,7 +8167,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "create_board", "summary": "Create Board", "description": "### Create a new board.\n", @@ -7883,7 +8235,9 @@ }, "/boards/search": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "search_boards", "summary": "Search Boards", "description": "### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -8013,7 +8367,9 @@ }, "/boards/{board_id}": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "board", "summary": "Get Board", "description": "### Get information about a board.\n", @@ -8058,7 +8414,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "update_board", "summary": "Update Board", "description": "### Update a board definition.\n", @@ -8124,7 +8482,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "delete_board", "summary": "Delete Board", "description": "### Delete a board.\n", @@ -8170,7 +8530,9 @@ }, "/board_items": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "all_board_items", "summary": "Get All Board Items", "description": "### Get information about all board items.\n", @@ -8224,7 +8586,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "create_board_item", "summary": "Create Board Item", "description": "### Create a new board item.\n", @@ -8290,7 +8654,9 @@ }, "/board_items/{board_item_id}": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "board_item", "summary": "Get Board Item", "description": "### Get information about a board item.\n", @@ -8335,7 +8701,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "update_board_item", "summary": "Update Board Item", "description": "### Update a board item definition.\n", @@ -8401,7 +8769,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "delete_board_item", "summary": "Delete Board Item", "description": "### Delete a board item.\n", @@ -8447,7 +8817,9 @@ }, "/primary_homepage_sections": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_primary_homepage_sections", "summary": "Get All Primary homepage sections", "description": "### Get information about the primary homepage's sections.\n", @@ -8489,7 +8861,9 @@ }, "/board_sections": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "all_board_sections", "summary": "Get All Board sections", "description": "### Get information about all board sections.\n", @@ -8536,7 +8910,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "create_board_section", "summary": "Create Board section", "description": "### Create a new board section.\n", @@ -8602,7 +8978,9 @@ }, "/board_sections/{board_section_id}": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "board_section", "summary": "Get Board section", "description": "### Get information about a board section.\n", @@ -8647,7 +9025,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "update_board_section", "summary": "Update Board section", "description": "### Update a board section definition.\n", @@ -8713,7 +9093,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "delete_board_section", "summary": "Delete Board section", "description": "### Delete a board section.\n", @@ -8759,7 +9141,9 @@ }, "/integration_hubs": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integration_hubs", "summary": "Get All Integration Hubs", "description": "### Get information about all Integration Hubs.\n", @@ -8799,7 +9183,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "create_integration_hub", "summary": "Create Integration Hub", "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -8866,7 +9252,9 @@ }, "/integration_hubs/{integration_hub_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration_hub", "summary": "Get Integration Hub", "description": "### Get information about a Integration Hub.\n", @@ -8911,7 +9299,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration_hub", "summary": "Update Integration Hub", "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -8978,7 +9368,9 @@ "x-looker-rate-limited": true }, "delete": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "delete_integration_hub", "summary": "Delete Integration Hub", "description": "### Delete a Integration Hub.\n", @@ -9024,7 +9416,9 @@ }, "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "accept_integration_hub_legal_agreement", "summary": "Accept Integration Hub Legal Agreement", "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", @@ -9070,7 +9464,9 @@ }, "/integrations": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integrations", "summary": "Get All Integrations", "description": "### Get information about all Integrations.\n", @@ -9119,7 +9515,9 @@ }, "/integrations/{integration_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration", "summary": "Get Integration", "description": "### Get information about a Integration.\n", @@ -9163,7 +9561,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration", "summary": "Update Integration", "description": "### Update parameters on a Integration.\n", @@ -9230,7 +9630,9 @@ }, "/integrations/{integration_id}/form": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "fetch_integration_form", "summary": "Fetch Remote Integration Form", "description": "Returns the Integration form for presentation to the user.", @@ -9287,7 +9689,9 @@ }, "/integrations/{integration_id}/test": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "test_integration", "summary": "Test integration", "description": "Tests the integration to make sure all the settings are working.", @@ -9332,7 +9736,9 @@ }, "/internal_help_resources_content": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources_content", "summary": "Get Internal Help Resources Content", "description": "### Set the menu item name and content for internal help resources\n", @@ -9360,7 +9766,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources_content", "summary": "Update internal help resources content", "description": "Update internal help resources content\n", @@ -9413,7 +9821,9 @@ }, "/internal_help_resources_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources", "summary": "Get Internal Help Resources", "description": "### Get and set the options for internal help resources\n", @@ -9443,7 +9853,9 @@ }, "/internal_help_resources": { "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources", "summary": "Update internal help resources configuration", "description": "Update internal help resources settings\n", @@ -9496,7 +9908,9 @@ }, "/ldap_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "ldap_config", "summary": "Get LDAP Configuration", "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", @@ -9518,7 +9932,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_ldap_config", "summary": "Update LDAP Configuration", "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", @@ -9565,7 +9981,9 @@ }, "/ldap_config/test_connection": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_connection", "summary": "Test LDAP Connection", "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n", @@ -9612,7 +10030,9 @@ }, "/ldap_config/test_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_auth", "summary": "Test LDAP Auth", "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\n", @@ -9659,7 +10079,9 @@ }, "/ldap_config/test_user_info": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_info", "summary": "Test LDAP User Info", "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user without needing to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full info for the user from the LDAP server without actually authenticating the user. So, user password is not required.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\n", @@ -9706,7 +10128,9 @@ }, "/ldap_config/test_user_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_auth", "summary": "Test LDAP User Auth", "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\n", @@ -9753,7 +10177,9 @@ }, "/legacy_features": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_legacy_features", "summary": "Get All Legacy Features", "description": "### Get all legacy features.\n", @@ -9786,7 +10212,9 @@ }, "/legacy_features/{legacy_feature_id}": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "legacy_feature", "summary": "Get Legacy Feature", "description": "### Get information about the legacy feature with a specific id.\n", @@ -9823,7 +10251,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_legacy_feature", "summary": "Update Legacy Feature", "description": "### Update information about the legacy feature with a specific id.\n", @@ -9883,7 +10313,9 @@ }, "/locales": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_locales", "summary": "Get All Locales", "description": "### Get a list of locales that Looker supports.\n", @@ -9916,7 +10348,9 @@ }, "/looks": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "all_looks", "summary": "Get All Looks", "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", @@ -9956,7 +10390,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "create_look", "summary": "Create Look", "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", @@ -10022,7 +10458,9 @@ }, "/looks/search": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "search_looks", "summary": "Search Looks", "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", @@ -10188,7 +10626,9 @@ }, "/looks/{look_id}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "look", "summary": "Get Look", "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", @@ -10233,7 +10673,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "update_look", "summary": "Update Look", "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nIn API 3.1 and later, you can pass `deleted: true` as a parameter to [search_looks()](#!/3.1/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", @@ -10299,7 +10741,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "delete_look", "summary": "Delete Look", "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", @@ -10345,11 +10789,18 @@ }, "/looks/{look_id}/run/{result_format}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "run_look", "summary": "Run Look", "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "look_id", @@ -10492,7 +10943,9 @@ }, "/looks/{look_id}/copy": { "post": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "copy_look", "summary": "Copy Look", "description": "### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", @@ -10563,7 +11016,9 @@ }, "/looks/{look_id}/move": { "patch": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "move_look", "summary": "Move Look", "description": "### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", @@ -10628,7 +11083,9 @@ }, "/lookml_models": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "all_lookml_models", "summary": "Get All LookML Models", "description": "### Get information about all lookml models.\n", @@ -10684,7 +11141,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "create_lookml_model", "summary": "Create LookML Model", "description": "### Create a lookml model using the specified configuration.\n", @@ -10743,7 +11202,9 @@ }, "/lookml_models/{lookml_model_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model", "summary": "Get LookML Model", "description": "### Get information about a lookml model.\n", @@ -10787,7 +11248,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "update_lookml_model", "summary": "Update LookML Model", "description": "### Update a lookml model using the specified configuration.\n", @@ -10845,7 +11308,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "delete_lookml_model", "summary": "Delete LookML Model", "description": "### Delete a lookml model.\n", @@ -10890,7 +11355,9 @@ }, "/lookml_models/{lookml_model_name}/explores/{explore_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model_explore", "summary": "Get LookML Model Explore", "description": "### Get information about a lookml model explore.\n", @@ -10943,7 +11410,9 @@ }, "/merge_queries/{merge_query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "merge_query", "summary": "Get Merge Query", "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", @@ -10989,7 +11458,9 @@ }, "/merge_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_merge_query", "summary": "Create Merge Query", "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n", @@ -11055,7 +11526,9 @@ }, "/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "model_fieldname_suggestions", "summary": "Model field name suggestions", "description": "### Field name suggestions for a model and view\n\n", @@ -11122,7 +11595,9 @@ }, "/models/{model_name}": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "get_model", "summary": "Get a single model", "description": "### Get a single model\n\n", @@ -11161,7 +11636,9 @@ }, "/connections/{connection_name}/databases": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_databases", "summary": "List accessible databases to this connection", "description": "### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n", @@ -11209,7 +11686,9 @@ }, "/connections/{connection_name}/features": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_features", "summary": "Metadata features supported by this connection", "description": "### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n", @@ -11268,7 +11747,9 @@ }, "/connections/{connection_name}/schemas": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_schemas", "summary": "Get schemas for a connection", "description": "### Get the list of schemas and tables for a connection\n\n", @@ -11343,7 +11824,9 @@ }, "/connections/{connection_name}/tables": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_tables", "summary": "Get tables for a connection", "description": "### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n", @@ -11425,7 +11908,9 @@ }, "/connections/{connection_name}/columns": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_columns", "summary": "Get columns for a connection", "description": "### Get the columns (and therefore also the tables) in a specific schema\n\n", @@ -11522,7 +12007,9 @@ }, "/connections/{connection_name}/search_columns": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_search_columns", "summary": "Search a connection for columns", "description": "### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n", @@ -11591,7 +12078,9 @@ }, "/connections/{connection_name}/cost_estimate": { "post": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_cost_estimate", "summary": "Estimate costs for a connection", "description": "### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n", @@ -11659,7 +12148,9 @@ }, "/mobile/settings": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "mobile_settings", "summary": "Get Mobile_Settings", "description": "### Get all mobile settings.\n", @@ -11689,7 +12180,9 @@ }, "/model_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_model_sets", "summary": "Search Model Sets", "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -11790,7 +12283,9 @@ }, "/model_sets/{model_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "model_set", "summary": "Get Model Set", "description": "### Get information about the model set with a specific id.\n", @@ -11835,7 +12330,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_model_set", "summary": "Delete Model Set", "description": "### Delete the model set with a specific id.\n", @@ -11879,7 +12376,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_model_set", "summary": "Update Model Set", "description": "### Update information about the model set with a specific id.\n", @@ -11940,7 +12439,9 @@ }, "/model_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_model_sets", "summary": "Get All Model Sets", "description": "### Get information about all model sets.\n", @@ -11974,7 +12475,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_model_set", "summary": "Create Model Set", "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", @@ -12027,7 +12530,9 @@ }, "/oauth_client_apps": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "all_oauth_client_apps", "summary": "Get All OAuth Client Apps", "description": "### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\n", @@ -12069,7 +12574,9 @@ }, "/oauth_client_apps/{client_guid}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oauth_client_app", "summary": "Get OAuth Client App", "description": "### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n", @@ -12113,7 +12620,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_oauth_client_app", "summary": "Delete OAuth Client App", "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\n### Note: this deletion cannot be undone.\n", @@ -12156,7 +12665,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "register_oauth_client_app", "summary": "Register OAuth App", "description": "### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n", @@ -12227,7 +12738,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_oauth_client_app", "summary": "Update OAuth App", "description": "### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n", @@ -12294,7 +12807,9 @@ }, "/oauth_client_apps/{client_guid}/tokens": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "invalidate_tokens", "summary": "Invalidate Tokens", "description": "### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n", @@ -12339,7 +12854,9 @@ }, "/oauth_client_apps/{client_guid}/users/{user_id}": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "activate_app_user", "summary": "Activate OAuth App User", "description": "### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n", @@ -12406,7 +12923,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "deactivate_app_user", "summary": "Deactivate OAuth App User", "description": "### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n", @@ -12466,7 +12985,9 @@ }, "/oidc_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_config", "summary": "Get OIDC Configuration", "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n", @@ -12488,7 +13009,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_oidc_config", "summary": "Update OIDC Configuration", "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n", @@ -12535,7 +13058,9 @@ }, "/oidc_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_test_config", "summary": "Get OIDC Test Configuration", "description": "### Get a OIDC test configuration by test_slug.\n", @@ -12566,7 +13091,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_oidc_test_config", "summary": "Delete OIDC Test Configuration", "description": "### Delete a OIDC test configuration.\n", @@ -12605,7 +13132,9 @@ }, "/oidc_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_oidc_test_config", "summary": "Create OIDC Test Configuration", "description": "### Create a OIDC test configuration.\n", @@ -12652,7 +13181,9 @@ }, "/password_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "password_config", "summary": "Get Password Config", "description": "### Get password config.\n", @@ -12680,7 +13211,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_password_config", "summary": "Update Password Config", "description": "### Update password config.\n", @@ -12733,7 +13266,9 @@ }, "/password_config/force_password_reset_at_next_login_for_all_users": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "force_password_reset_at_next_login_for_all_users", "summary": "Force password reset", "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n", @@ -12775,7 +13310,9 @@ }, "/permissions": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permissions", "summary": "Get All Permissions", "description": "### Get all supported permissions.\n", @@ -12808,7 +13345,9 @@ }, "/permission_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_permission_sets", "summary": "Search Permission Sets", "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -12909,7 +13448,9 @@ }, "/permission_sets/{permission_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "permission_set", "summary": "Get Permission Set", "description": "### Get information about the permission set with a specific id.\n", @@ -12954,7 +13495,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_permission_set", "summary": "Delete Permission Set", "description": "### Delete the permission set with a specific id.\n", @@ -13004,7 +13547,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_permission_set", "summary": "Update Permission Set", "description": "### Update information about the permission set with a specific id.\n", @@ -13071,7 +13616,9 @@ }, "/permission_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permission_sets", "summary": "Get All Permission Sets", "description": "### Get information about all permission sets.\n", @@ -13111,7 +13658,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_permission_set", "summary": "Create Permission Set", "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\n", @@ -13170,7 +13719,9 @@ }, "/projects/{project_id}/deploy_ref_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_ref_to_production", "summary": "Deploy Remote Branch or Ref to Production", "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", @@ -13238,7 +13789,9 @@ }, "/projects/{project_id}/deploy_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_to_production", "summary": "Deploy To Production", "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", @@ -13292,7 +13845,9 @@ }, "/projects/{project_id}/reset_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_production", "summary": "Reset To Production", "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -13346,7 +13901,9 @@ }, "/projects/{project_id}/reset_to_remote": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_remote", "summary": "Reset To Remote", "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -13400,7 +13957,9 @@ }, "/projects": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_projects", "summary": "Get All Projects", "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", @@ -13440,7 +13999,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_project", "summary": "Create Project", "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", @@ -13499,7 +14060,9 @@ }, "/projects/{project_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project", "summary": "Get Project", "description": "### Get A Project\n\nReturns the project with the given project id\n", @@ -13543,7 +14106,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_project", "summary": "Update Project", "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", @@ -13622,7 +14187,9 @@ }, "/projects/{project_id}/manifest": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "manifest", "summary": "Get Manifest", "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", @@ -13661,11 +14228,15 @@ }, "/projects/{project_id}/git/deploy_key": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_deploy_key", "summary": "Create Deploy Key", "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", - "produces": ["text/plain"], + "produces": [ + "text/plain" + ], "parameters": [ { "name": "project_id", @@ -13717,11 +14288,15 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_deploy_key", "summary": "Git Deploy Key", "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", - "produces": ["text/plain"], + "produces": [ + "text/plain" + ], "parameters": [ { "name": "project_id", @@ -13757,7 +14332,9 @@ }, "/projects/{project_id}/validate": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "validate_project", "summary": "Validate Project", "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", @@ -13813,7 +14390,9 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_validation_results", "summary": "Cached Project Validation Results", "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", @@ -13862,7 +14441,9 @@ }, "/projects/{project_id}/current_workspace": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_workspace", "summary": "Get Project Workspace", "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", @@ -13908,7 +14489,9 @@ }, "/projects/{project_id}/files": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_project_files", "summary": "Get All Project Files", "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", @@ -13957,7 +14540,9 @@ }, "/projects/{project_id}/files/file": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_file", "summary": "Get Project File", "description": "### Get Project File Info\n\nReturns information about a file in the project\n", @@ -14010,7 +14595,9 @@ }, "/projects/{project_id}/git_connection_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_connection_tests", "summary": "Get All Git Connection Tests", "description": "### Get All Git Connection Tests\n\ndev mode required.\n - Call `update_session` to select the 'dev' workspace.\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", @@ -14059,7 +14646,9 @@ }, "/projects/{project_id}/git_connection_tests/{test_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_git_connection_test", "summary": "Run Git Connection Test", "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", @@ -14131,7 +14720,9 @@ }, "/projects/{project_id}/lookml_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_lookml_tests", "summary": "Get All LookML Tests", "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", @@ -14180,7 +14771,9 @@ }, "/projects/{project_id}/lookml_tests/run": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_lookml_test", "summary": "Run LookML Test", "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", @@ -14255,7 +14848,9 @@ }, "/projects/{project_id}/tag": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "tag_ref", "summary": "Tag Ref", "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n\nThis is an internal-only, undocumented route.\n", @@ -14345,7 +14940,9 @@ }, "/render_tasks/looks/{look_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_look_render_task", "summary": "Create Look Render Task", "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14433,7 +15030,9 @@ }, "/render_tasks/queries/{query_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_query_render_task", "summary": "Create Query Render Task", "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14521,7 +15120,9 @@ }, "/render_tasks/dashboards/{dashboard_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_dashboard_render_task", "summary": "Create Dashboard Render Task", "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14638,7 +15239,9 @@ }, "/render_tasks/{render_task_id}": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task", "summary": "Get Render Task", "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14684,11 +15287,17 @@ }, "/render_tasks/{render_task_id}/results": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task_results", "summary": "Render Task Results", "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", - "produces": ["image/jpeg", "image/png", "application/pdf"], + "produces": [ + "image/jpeg", + "image/png", + "application/pdf" + ], "parameters": [ { "name": "render_task_id", @@ -14727,7 +15336,9 @@ }, "/projects/{root_project_id}/credential/{credential_id}": { "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_repository_credential", "summary": "Create Repository Credential", "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", @@ -14798,7 +15409,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_repository_credential", "summary": "Delete Repository Credential", "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", @@ -14850,7 +15463,9 @@ }, "/projects/{root_project_id}/credentials": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "get_all_repository_credentials", "summary": "Get All Repository Credentials", "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", @@ -14892,7 +15507,9 @@ }, "/roles": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_roles", "summary": "Get All Roles", "description": "### Get information about all roles.\n", @@ -14944,7 +15561,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_role", "summary": "Create Role", "description": "### Create a role with the specified information.\n", @@ -15003,7 +15622,9 @@ }, "/roles/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_roles", "summary": "Search Roles", "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -15097,7 +15718,9 @@ }, "/roles/search/with_user_count": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_roles_with_user_count", "summary": "Search Roles with User Count", "description": "### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -15191,7 +15814,9 @@ }, "/roles/{role_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role", "summary": "Get Role", "description": "### Get information about the role with a specific id.\n", @@ -15229,7 +15854,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_role", "summary": "Delete Role", "description": "### Delete the role with a specific id.\n", @@ -15279,7 +15906,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_role", "summary": "Update Role", "description": "### Update information about the role with a specific id.\n", @@ -15346,7 +15975,9 @@ }, "/roles/{role_id}/groups": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_groups", "summary": "Get Role Groups", "description": "### Get information about all the groups with the role that has a specific id.\n", @@ -15394,7 +16025,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_groups", "summary": "Update Role Groups", "description": "### Set all groups for a role, removing all existing group associations from that role.\n", @@ -15462,7 +16095,9 @@ }, "/roles/{role_id}/users": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_users", "summary": "Get Role Users", "description": "### Get information about all the users with the role that has a specific id.\n", @@ -15517,7 +16152,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_users", "summary": "Update Role Users", "description": "### Set all the users of the role with a specific id.\n", @@ -15597,7 +16234,9 @@ }, "/running_queries": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "all_running_queries", "summary": "Get All Running Queries", "description": "Get information about all running queries.\n", @@ -15624,7 +16263,9 @@ }, "/running_queries/{query_task_id}": { "delete": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "kill_query", "summary": "Kill Running Query", "description": "Kill a query with a specific query_task_id.\n", @@ -15669,7 +16310,9 @@ }, "/saml_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_config", "summary": "Get SAML Configuration", "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n", @@ -15691,7 +16334,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_saml_config", "summary": "Update SAML Configuration", "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n", @@ -15738,7 +16383,9 @@ }, "/saml_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_test_config", "summary": "Get SAML Test Configuration", "description": "### Get a SAML test configuration by test_slug.\n", @@ -15769,7 +16416,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_saml_test_config", "summary": "Delete SAML Test Configuration", "description": "### Delete a SAML test configuration.\n", @@ -15808,7 +16457,9 @@ }, "/saml_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_saml_test_config", "summary": "Create SAML Test Configuration", "description": "### Create a SAML test configuration.\n", @@ -15855,11 +16506,15 @@ }, "/parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "parse_saml_idp_metadata", "summary": "Parse SAML IdP XML", "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n", - "consumes": ["text/plain"], + "consumes": [ + "text/plain" + ], "parameters": [ { "name": "body", @@ -15897,11 +16552,15 @@ }, "/fetch_and_parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "fetch_and_parse_saml_idp_metadata", "summary": "Parse SAML IdP Url", "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n", - "consumes": ["text/plain"], + "consumes": [ + "text/plain" + ], "parameters": [ { "name": "body", @@ -15939,7 +16598,9 @@ }, "/scheduled_plans/space/{space_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_space", "summary": "Scheduled Plans for Space", "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", @@ -15989,7 +16650,9 @@ }, "/scheduled_plans/{scheduled_plan_id}": { "delete": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "delete_scheduled_plan", "summary": "Delete Scheduled Plan", "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", @@ -16033,7 +16696,9 @@ "x-looker-activity-type": "db_query" }, "patch": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "update_scheduled_plan", "summary": "Update Scheduled Plan", "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -16092,7 +16757,9 @@ "x-looker-activity-type": "db_query" }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan", "summary": "Get Scheduled Plan", "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", @@ -16139,7 +16806,9 @@ }, "/scheduled_plans": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "create_scheduled_plan", "summary": "Create Scheduled Plan", "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://looker.com/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -16196,7 +16865,9 @@ "x-looker-activity-type": "db_query" }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "all_scheduled_plans", "summary": "Get All Scheduled Plans", "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16259,7 +16930,9 @@ }, "/scheduled_plans/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once", "summary": "Run Scheduled Plan Once", "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", @@ -16319,7 +16992,9 @@ }, "/scheduled_plans/look/{look_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_look", "summary": "Scheduled Plans for Look", "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16384,7 +17059,9 @@ }, "/scheduled_plans/dashboard/{dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_dashboard", "summary": "Scheduled Plans for Dashboard", "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16449,7 +17126,9 @@ }, "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_lookml_dashboard", "summary": "Scheduled Plans for LookML Dashboard", "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16513,7 +17192,9 @@ }, "/scheduled_plans/{scheduled_plan_id}/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once_by_id", "summary": "Run Scheduled Plan Once by Id", "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", @@ -16581,7 +17262,9 @@ }, "/session_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "session_config", "summary": "Get Session Config", "description": "### Get session config.\n", @@ -16609,7 +17292,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_session_config", "summary": "Update Session Config", "description": "### Update session config.\n", @@ -16662,7 +17347,9 @@ }, "/session": { "get": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "session", "summary": "Get Session", "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", @@ -16690,7 +17377,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "update_session", "summary": "Update Session", "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", @@ -16743,10 +17432,12 @@ }, "/setting": { "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "set_setting", "summary": "Set Setting", - "description": "### Configure Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n\nSee the `Setting` type for more information on the specific values that can be configured.\n", + "description": "### Configure Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n - custom_welcome_email\n\nSee the `Setting` type for more information on the specific values that can be configured.\n", "parameters": [ { "name": "body", @@ -16807,10 +17498,12 @@ "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "get_setting", "summary": "Get Setting", - "description": "### Get Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n\n", + "description": "### Get Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n - custom_welcome_email\n\n", "parameters": [ { "name": "fields", @@ -16858,7 +17551,9 @@ }, "/folders/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "search_folders", "summary": "Search Folders", "description": "Search for folders by creator id, parent id, name, etc", @@ -16982,7 +17677,9 @@ }, "/folders/{folder_id}": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder", "summary": "Get Folder", "description": "### Get information about the folder with a specific id.", @@ -17026,7 +17723,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "delete_folder", "summary": "Delete Folder", "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", @@ -17069,7 +17768,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "update_folder", "summary": "Update Folder", "description": "### Update the folder with a specific id.", @@ -17129,7 +17830,9 @@ }, "/folders": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "all_folders", "summary": "Get All Folders", "description": "### Get information about all folders.\n\nIn API 3.x, this will not return empty personal folders, unless they belong to the calling user.\nIn API 4.0+, all personal folders will be returned.\n\n", @@ -17169,7 +17872,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "create_folder", "summary": "Create Folder", "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", @@ -17228,7 +17933,9 @@ }, "/folders/{folder_id}/children": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children", "summary": "Get Folder Children", "description": "### Get the children of a folder.", @@ -17300,7 +18007,9 @@ }, "/folders/{folder_id}/children/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children_search", "summary": "Search Folder Children", "description": "### Search the children of a folder", @@ -17363,7 +18072,9 @@ }, "/folders/{folder_id}/parent": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_parent", "summary": "Get Folder Parent", "description": "### Get the parent of a folder", @@ -17409,7 +18120,9 @@ }, "/folders/{folder_id}/ancestors": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_ancestors", "summary": "Get Folder Ancestors", "description": "### Get the ancestors of a folder", @@ -17458,7 +18171,9 @@ }, "/folders/{folder_id}/looks": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_looks", "summary": "Get Folder Looks", "description": "### Get all looks in a folder.\nIn API 3.x, this will return all looks in a folder, including looks in the trash.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", @@ -17507,7 +18222,9 @@ }, "/folders/{folder_id}/dashboards": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_dashboards", "summary": "Get Folder Dashboards", "description": "### Get the dashboards in a folder", @@ -17556,7 +18273,9 @@ }, "/sql_queries/{slug}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "sql_query", "summary": "Get SQL Runner Query", "description": "Get a SQL Runner query.", @@ -17595,7 +18314,9 @@ }, "/sql_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_sql_query", "summary": "Create SQL Runner Query", "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", @@ -17654,11 +18375,18 @@ }, "/sql_queries/{slug}/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_sql_query", "summary": "Run SQL Runner Query", "description": "Execute a SQL Runner query in a given result_format.", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "slug", @@ -17720,7 +18448,9 @@ }, "/themes": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "all_themes", "summary": "Get All Themes", "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -17760,7 +18490,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "create_theme", "summary": "Create Theme", "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://looker.com/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -17819,7 +18551,9 @@ }, "/themes/search": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "search_themes", "summary": "Search Themes", "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -17922,7 +18656,9 @@ }, "/themes/default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "default_theme", "summary": "Get Default Theme", "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", @@ -17960,7 +18696,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "set_default_theme", "summary": "Set Default Theme", "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -18011,7 +18749,9 @@ }, "/themes/active": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "active_themes", "summary": "Get Active Themes", "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n\n", @@ -18068,7 +18808,9 @@ }, "/themes/theme_or_default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme_or_default", "summary": "Get Theme or Default", "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -18115,7 +18857,9 @@ }, "/themes/validate": { "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "validate_theme", "summary": "Validate Theme", "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -18180,7 +18924,9 @@ }, "/themes/{theme_id}": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme", "summary": "Get Theme", "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -18225,7 +18971,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "update_theme", "summary": "Update Theme", "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -18284,7 +19032,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "delete_theme", "summary": "Delete Theme", "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", @@ -18329,7 +19079,9 @@ }, "/timezones": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_timezones", "summary": "Get All Timezones", "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", @@ -18362,7 +19114,9 @@ }, "/ssh_servers": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_ssh_servers", "summary": "Get All SSH Servers", "description": "### Get information about all SSH Servers.\n", @@ -18402,7 +19156,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_ssh_server", "summary": "Create SSH Server", "description": "### Create an SSH Server.\n", @@ -18461,7 +19217,9 @@ }, "/ssh_server/{ssh_server_id}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "ssh_server", "summary": "Get SSH Server", "description": "### Get information about an SSH Server.\n", @@ -18498,7 +19256,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_ssh_server", "summary": "Update SSH Server", "description": "### Update an SSH Server.\n", @@ -18556,7 +19316,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_ssh_server", "summary": "Delete SSH Server", "description": "### Delete an SSH Server.\n", @@ -18601,7 +19363,9 @@ }, "/ssh_server/{ssh_server_id}/test": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_ssh_server", "summary": "Test SSH Server", "description": "### Test the SSH Server\n", @@ -18640,7 +19404,9 @@ }, "/ssh_tunnels": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_ssh_tunnels", "summary": "Get All SSH Tunnels", "description": "### Get information about all SSH Tunnels.\n", @@ -18680,7 +19446,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_ssh_tunnel", "summary": "Create SSH Tunnel", "description": "### Create an SSH Tunnel\n", @@ -18739,7 +19507,9 @@ }, "/ssh_tunnel/{ssh_tunnel_id}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "ssh_tunnel", "summary": "Get SSH Tunnel", "description": "### Get information about an SSH Tunnel.\n", @@ -18776,7 +19546,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_ssh_tunnel", "summary": "Update SSH Tunnel", "description": "### Update an SSH Tunnel\n", @@ -18834,7 +19606,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_ssh_tunnel", "summary": "Delete SSH Tunnel", "description": "### Delete an SSH Tunnel\n", @@ -18879,7 +19653,9 @@ }, "/ssh_tunnel/{ssh_tunnel_id}/test": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_ssh_tunnel", "summary": "Test SSH Tunnel", "description": "### Test the SSH Tunnel\n", @@ -18918,7 +19694,9 @@ }, "/ssh_public_key": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "ssh_public_key", "summary": "Get SSH Public Key", "description": "### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n", @@ -18948,7 +19726,9 @@ }, "/user_attributes": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attributes", "summary": "Get All User Attributes", "description": "### Get information about all user attributes.\n", @@ -18995,7 +19775,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "create_user_attribute", "summary": "Create User Attribute", "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", @@ -19061,7 +19843,9 @@ }, "/user_attributes/{user_attribute_id}": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "user_attribute", "summary": "Get User Attribute", "description": "### Get information about a user attribute.\n", @@ -19106,7 +19890,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "update_user_attribute", "summary": "Update User Attribute", "description": "### Update a user attribute definition.\n", @@ -19172,7 +19958,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "delete_user_attribute", "summary": "Delete User Attribute", "description": "### Delete a user attribute (admin only).\n", @@ -19218,7 +20006,9 @@ }, "/user_attributes/{user_attribute_id}/group_values": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attribute_group_values", "summary": "Get User Attribute Group Values", "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", @@ -19266,7 +20056,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "set_user_attribute_group_values", "summary": "Set User Attribute Group Values", "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", @@ -19339,7 +20131,9 @@ }, "/user_login_lockouts": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "all_user_login_lockouts", "summary": "Get All User Login Lockouts", "description": "### Get currently locked-out users.\n", @@ -19381,7 +20175,9 @@ }, "/user_login_lockouts/search": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "search_user_login_lockouts", "summary": "Search User Login Lockouts", "description": "### Search currently locked-out users.\n", @@ -19481,7 +20277,9 @@ }, "/user_login_lockout/{key}": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_user_login_lockout", "summary": "Delete User Login Lockout", "description": "### Removes login lockout for the associated user.\n", @@ -19526,7 +20324,9 @@ }, "/user": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "me", "summary": "Get Current User", "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", @@ -19559,7 +20359,9 @@ }, "/users": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_users", "summary": "Get All Users", "description": "### Get information about all users.\n", @@ -19650,7 +20452,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user", "summary": "Create User", "description": "### Create a user with the specified information.\n", @@ -19710,7 +20514,9 @@ }, "/users/search": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users", "summary": "Search Users", "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", @@ -19861,7 +20667,9 @@ }, "/users/search/names/{pattern}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users_names", "summary": "Search User Names", "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", @@ -19992,7 +20800,9 @@ }, "/users/{user_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user", "summary": "Get User by Id", "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", @@ -20037,7 +20847,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user", "summary": "Update User", "description": "### Update information about the user with a specific id.\n", @@ -20097,7 +20909,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user", "summary": "Delete User", "description": "### Delete the user with a specific id.\n\n**DANGER** this will delete the user and all looks and other information owned by the user.\n", @@ -20143,7 +20957,9 @@ }, "/users/credential/{credential_type}/{credential_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_for_credential", "summary": "Get User by Credential Id", "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\n", @@ -20196,7 +21012,9 @@ }, "/users/{user_id}/credentials_email": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_email", "summary": "Get Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -20241,7 +21059,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email", "summary": "Create Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -20313,7 +21133,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user_credentials_email", "summary": "Update Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -20379,7 +21201,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_email", "summary": "Delete Email/Password Credential", "description": "### Email/password login information for the specified user.", @@ -20425,7 +21249,9 @@ }, "/users/{user_id}/credentials_totp": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_totp", "summary": "Get Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -20470,7 +21296,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_totp", "summary": "Create Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -20542,7 +21370,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_totp", "summary": "Delete Two-Factor Credential", "description": "### Two-factor login information for the specified user.", @@ -20588,7 +21418,9 @@ }, "/users/{user_id}/credentials_ldap": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_ldap", "summary": "Get LDAP Credential", "description": "### LDAP login information for the specified user.", @@ -20633,7 +21465,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_ldap", "summary": "Delete LDAP Credential", "description": "### LDAP login information for the specified user.", @@ -20679,7 +21513,9 @@ }, "/users/{user_id}/credentials_google": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_google", "summary": "Get Google Auth Credential", "description": "### Google authentication login information for the specified user.", @@ -20724,7 +21560,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_google", "summary": "Delete Google Auth Credential", "description": "### Google authentication login information for the specified user.", @@ -20770,7 +21608,9 @@ }, "/users/{user_id}/credentials_saml": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_saml", "summary": "Get Saml Auth Credential", "description": "### Saml authentication login information for the specified user.", @@ -20815,7 +21655,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_saml", "summary": "Delete Saml Auth Credential", "description": "### Saml authentication login information for the specified user.", @@ -20861,7 +21703,9 @@ }, "/users/{user_id}/credentials_oidc": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_oidc", "summary": "Get OIDC Auth Credential", "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", @@ -20906,7 +21750,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_oidc", "summary": "Delete OIDC Auth Credential", "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", @@ -20952,7 +21798,9 @@ }, "/users/{user_id}/credentials_api3/{credentials_api3_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_api3", "summary": "Get API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -21005,7 +21853,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_api3", "summary": "Delete API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -21059,7 +21909,9 @@ }, "/users/{user_id}/credentials_api3": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_api3s", "summary": "Get All API 3 Credentials", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -21107,7 +21959,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_api3", "summary": "Create API 3 Credential", "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", @@ -21181,7 +22035,9 @@ }, "/users/{user_id}/credentials_embed/{credentials_embed_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_embed", "summary": "Get Embedding Credential", "description": "### Embed login information for the specified user.", @@ -21234,7 +22090,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_embed", "summary": "Delete Embedding Credential", "description": "### Embed login information for the specified user.", @@ -21288,7 +22146,9 @@ }, "/users/{user_id}/credentials_embed": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_embeds", "summary": "Get All Embedding Credentials", "description": "### Embed login information for the specified user.", @@ -21338,7 +22198,9 @@ }, "/users/{user_id}/credentials_looker_openid": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_looker_openid", "summary": "Get Looker OpenId Credential", "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", @@ -21383,7 +22245,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_looker_openid", "summary": "Delete Looker OpenId Credential", "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", @@ -21429,7 +22293,9 @@ }, "/users/{user_id}/sessions/{session_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_session", "summary": "Get Web Login Session", "description": "### Web login session for the specified user.", @@ -21482,7 +22348,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_session", "summary": "Delete Web Login Session", "description": "### Web login session for the specified user.", @@ -21536,7 +22404,9 @@ }, "/users/{user_id}/sessions": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_sessions", "summary": "Get All Web Login Sessions", "description": "### Web login session for the specified user.", @@ -21586,7 +22456,9 @@ }, "/users/{user_id}/credentials_email/password_reset": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email_password_reset", "summary": "Create Password Reset Token", "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n", @@ -21640,7 +22512,9 @@ }, "/users/{user_id}/roles": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_roles", "summary": "Get User Roles", "description": "### Get information about roles of a given user\n", @@ -21695,7 +22569,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_roles", "summary": "Set User Roles", "description": "### Set roles of the user with a specific id.\n", @@ -21758,7 +22634,9 @@ }, "/users/{user_id}/attribute_values": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_attribute_user_values", "summary": "Get User Attribute Values", "description": "### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n", @@ -21828,7 +22706,9 @@ }, "/users/{user_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_attribute_user_value", "summary": "Set User Attribute User Value", "description": "### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n", @@ -21889,7 +22769,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_attribute_user_value", "summary": "Delete User Attribute User Value", "description": "### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n", @@ -21934,7 +22816,9 @@ }, "/users/{user_id}/credentials_email/send_password_reset": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "send_user_credentials_email_password_reset", "summary": "Send Password Reset Token", "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n", @@ -21979,9 +22863,87 @@ "x-looker-activity-type": "non_query" } }, + "/users/{user_id}/update_emails": { + "post": { + "tags": [ + "User" + ], + "operationId": "wipeout_user_emails", + "summary": "Wipeout User Emails", + "description": "### Change a disabled user's email addresses\n\nAllows the admin to change the email addresses for all the user's\nassociated credentials. Will overwrite all associated email addresses with\nthe value supplied in the 'email' body param.\nThe user's 'is_disabled' status must be true.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "body", + "in": "body", + "description": null, + "required": true, + "schema": { + "$ref": "#/definitions/UserEmailOnly" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "New state for specified user.", + "schema": { + "$ref": "#/definitions/User" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, "/users/embed_user": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_embed_user", "summary": "Create an embed user from an external user ID", "description": "Create an embed user from an external user ID\n", @@ -22022,11 +22984,15 @@ }, "/vector_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "vector_thumbnail", "summary": "Get Vector Thumbnail", "description": "### Get a vector image representing the contents of a dashboard or look.\n\n# DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail)\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", - "produces": ["image/svg+xml"], + "produces": [ + "image/svg+xml" + ], "parameters": [ { "name": "type", @@ -22077,7 +23043,9 @@ }, "/versions": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "versions", "summary": "Get ApiVersion", "description": "### Get information about all API versions supported by this Looker instance.\n", @@ -22116,7 +23084,9 @@ }, "/api_spec/{api_version}/{specification}": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "api_spec", "summary": "Get an API specification", "description": "### Get an API specification for this Looker instance.\n\nThe specification is returned as a JSON document in Swagger 2.x format\n", @@ -22163,7 +23133,9 @@ }, "/whitelabel_configuration": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "whitelabel_configuration", "summary": "Get Whitelabel configuration", "description": "### This feature is enabled only by special license.\n### Gets the whitelabel configuration, which includes hiding documentation links, custom favicon uploading, etc.\n", @@ -22201,7 +23173,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_whitelabel_configuration", "summary": "Update Whitelabel configuration", "description": "### Update the whitelabel configuration\n", @@ -22255,7 +23229,9 @@ }, "/workspaces": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "all_workspaces", "summary": "Get All Workspaces", "description": "### Get All Workspaces\n\nReturns all workspaces available to the calling user.\n", @@ -22288,7 +23264,9 @@ }, "/workspaces/{workspace_id}": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "workspace", "summary": "Get Workspace", "description": "### Get A Workspace\n\nReturns information about a workspace such as the git status and selected branches\nof all projects available to the caller's user account.\n\nA workspace defines which versions of project files will be used to evaluate expressions\nand operations that use model definitions - operations such as running queries or rendering dashboards.\nEach project has its own git repository, and each project in a workspace may be configured to reference\nparticular branch or revision within their respective repositories.\n\nThere are two predefined workspaces available: \"production\" and \"dev\".\n\nThe production workspace is shared across all Looker users. Models in the production workspace are read-only.\nChanging files in production is accomplished by modifying files in a git branch and using Pull Requests\nto merge the changes from the dev branch into the production branch, and then telling\nLooker to sync with production.\n\nThe dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect\nthat user, and only when the dev workspace is selected as the active workspace for the API session.\n(See set_session_workspace()).\n\nThe dev workspace is NOT unique to an API session. Two applications accessing the Looker API using\nthe same user account will see the same files in the dev workspace. To avoid collisions between\nAPI clients it's best to have each client login with API3 credentials for a different user account.\n\nChanges made to files in a dev workspace are persistent across API sessions. It's a good\nidea to commit any changes you've made to the git repository, but not strictly required. Your modified files\nreside in a special user-specific directory on the Looker server and will still be there when you login in again\nlater and use update_session(workspace_id: \"dev\") to select the dev workspace for the new API session.\n", @@ -22344,7 +23322,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "DashboardBase": { "properties": { @@ -22751,7 +23732,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "ValidationErrorDetail": { "properties": { @@ -22782,7 +23766,9 @@ } }, "x-looker-status": "stable", - "required": ["documentation_url"] + "required": [ + "documentation_url" + ] }, "AccessToken": { "properties": { @@ -22942,6 +23928,11 @@ "description": "ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement)", "x-looker-nullable": true }, + "description": { + "type": "string", + "description": "An optional description for the alert. This supplements the title", + "x-looker-nullable": true + }, "destinations": { "type": "array", "items": { @@ -22955,6 +23946,18 @@ "description": "The field the alert threshold is compared against when determining when to send notifications", "x-looker-nullable": false }, + "followed": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the user follows this alert.", + "x-looker-nullable": true + }, + "followable": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the alert is followable", + "x-looker-nullable": true + }, "id": { "type": "integer", "format": "int64", @@ -22972,6 +23975,25 @@ "description": "Whether or not the alert is public", "x-looker-nullable": false }, + "investigative_content_type": { + "type": "string", + "x-looker-values": [ + "dashboard" + ], + "description": "The type of the investigative content Valid values are: \"dashboard\".", + "x-looker-nullable": true + }, + "investigative_content_id": { + "type": "string", + "description": "The ID of the investigative content. For dashboards, this will be the dashboard ID", + "x-looker-nullable": true + }, + "investigative_content_title": { + "type": "string", + "readOnly": true, + "description": "The title of the investigative content.", + "x-looker-nullable": true + }, "lookml_dashboard_id": { "type": "string", "description": "ID of the LookML dashboard associated with the alert", @@ -22988,6 +24010,12 @@ "description": "User id of alert owner", "x-looker-nullable": false }, + "owner_display_name": { + "type": "string", + "readOnly": true, + "description": "Alert owner's display name", + "x-looker-nullable": true + }, "threshold": { "type": "number", "format": "double", @@ -23007,7 +24035,10 @@ "properties": { "destination_type": { "type": "string", - "x-looker-values": ["EMAIL", "ACTION_HUB"], + "x-looker-values": [ + "EMAIL", + "ACTION_HUB" + ], "description": "Type of destination that the alert will be sent to Valid values are: \"EMAIL\", \"ACTION_HUB\".", "x-looker-nullable": false }, @@ -23028,7 +24059,9 @@ } }, "x-looker-status": "beta", - "required": ["destination_type"] + "required": [ + "destination_type" + ] }, "ApiSession": { "properties": { @@ -23141,16 +24174,9 @@ "description": "Last time the content that this item is based on was updated", "x-looker-nullable": true }, - "custom_image_data_base64": { - "type": "string", - "x-looker-write-only": true, - "description": "(Write-Only) base64 encoded image data", - "x-looker-nullable": true - }, - "custom_image_url": { + "custom_description": { "type": "string", - "readOnly": true, - "description": "Custom image_url entered by the user, if present", + "description": "Custom description entered by the user, if present", "x-looker-nullable": true }, "custom_title": { @@ -23567,7 +24593,10 @@ }, "linked_content_type": { "type": "string", - "x-looker-values": ["dashboard", "lookml_dashboard"], + "x-looker-values": [ + "dashboard", + "lookml_dashboard" + ], "description": "Name of the command Valid values are: \"dashboard\", \"lookml_dashboard\".", "x-looker-nullable": false } @@ -23672,7 +24701,10 @@ "permission_type": { "type": "string", "readOnly": true, - "x-looker-values": ["view", "edit"], + "x-looker-values": [ + "view", + "edit" + ], "description": "Type of permission: \"view\" or \"edit\" Valid values are: \"view\", \"edit\".", "x-looker-nullable": true }, @@ -23908,7 +24940,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "ContentValidationLook": { "properties": { @@ -24322,7 +25356,9 @@ } }, "x-looker-status": "stable", - "required": ["external_user_id"] + "required": [ + "external_user_id" + ] }, "CreateOAuthApplicationUserStateRequest": { "properties": { @@ -24379,7 +25415,10 @@ } }, "x-looker-status": "beta", - "required": ["user_id", "oauth_application_id"] + "required": [ + "user_id", + "oauth_application_id" + ] }, "CredentialsApi3": { "properties": { @@ -24984,15 +26023,6 @@ }, "CustomWelcomeEmail": { "properties": { - "can": { - "type": "object", - "additionalProperties": { - "type": "boolean" - }, - "readOnly": true, - "description": "Operations the current user is able to perform on this object", - "x-looker-nullable": false - }, "enabled": { "type": "boolean", "description": "If true, custom email content will replace the default body of welcome emails", @@ -25005,12 +26035,12 @@ }, "subject": { "type": "string", - "description": "The text to appear in the email subject line.", + "description": "The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", "x-looker-nullable": true }, "header": { "type": "string", - "description": "The text to appear in the header line of the email body.", + "description": "The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", "x-looker-nullable": true } }, @@ -25437,7 +26467,12 @@ } }, "x-looker-status": "stable", - "required": ["dashboard_id", "name", "title", "type"] + "required": [ + "dashboard_id", + "name", + "title", + "type" + ] }, "DashboardLayoutComponent": { "properties": { @@ -25782,6 +26817,11 @@ "description": "Number of times favorited", "x-looker-nullable": true }, + "filters_bar_collapsed": { + "type": "boolean", + "description": "Sets the default state of the filters bar to collapsed or open", + "x-looker-nullable": false + }, "last_accessed_at": { "type": "string", "format": "date-time", @@ -26383,6 +27423,11 @@ "format": "int64", "description": "An External OAuth Application to use for authenticating to the database", "x-looker-nullable": true + }, + "always_retry_failed_builds": { + "type": "boolean", + "description": "When true, error PDTs will be retried every regenerator cycle", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -26783,7 +27828,9 @@ } }, "x-looker-status": "beta", - "required": ["target_url"] + "required": [ + "target_url" + ] }, "EmbedSsoParams": { "properties": { @@ -26871,7 +27918,9 @@ } }, "x-looker-status": "stable", - "required": ["target_url"] + "required": [ + "target_url" + ] }, "EmbedUrlResponse": { "properties": { @@ -27038,7 +28087,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "CreateFolder": { "properties": { @@ -27054,7 +28105,10 @@ } }, "x-looker-status": "stable", - "required": ["name", "parent_id"] + "required": [ + "name", + "parent_id" + ] }, "UpdateFolder": { "properties": { @@ -27194,7 +28248,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "GitBranch": { "properties": { @@ -27815,7 +28871,11 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["cell", "query", "dashboard"], + "x-looker-values": [ + "cell", + "query", + "dashboard" + ], "description": "A list of action types the integration supports. Valid values are: \"cell\", \"query\", \"dashboard\".", "x-looker-nullable": false }, @@ -27825,7 +28885,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["formatted", "unformatted"], + "x-looker-values": [ + "formatted", + "unformatted" + ], "description": "A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"formatted\", \"unformatted\".", "x-looker-nullable": false }, @@ -27835,7 +28898,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["apply", "noapply"], + "x-looker-values": [ + "apply", + "noapply" + ], "description": "A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"apply\", \"noapply\".", "x-looker-nullable": false }, @@ -27845,7 +28911,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["push", "url"], + "x-looker-values": [ + "push", + "url" + ], "description": "A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: \"push\", \"url\".", "x-looker-nullable": false }, @@ -29894,7 +30963,10 @@ "align": { "type": "string", "readOnly": true, - "x-looker-values": ["left", "right"], + "x-looker-values": [ + "left", + "right" + ], "description": "The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: \"left\", \"right\".", "x-looker-nullable": false }, @@ -29907,7 +30979,12 @@ "category": { "type": "string", "readOnly": true, - "x-looker-values": ["parameter", "filter", "measure", "dimension"], + "x-looker-values": [ + "parameter", + "filter", + "measure", + "dimension" + ], "description": "Field category Valid values are: \"parameter\", \"filter\", \"measure\", \"dimension\".", "x-looker-nullable": true }, @@ -29959,7 +31036,10 @@ "fill_style": { "type": "string", "readOnly": true, - "x-looker-values": ["enumeration", "range"], + "x-looker-values": [ + "enumeration", + "range" + ], "description": "The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: \"enumeration\", \"range\".", "x-looker-nullable": true }, @@ -30393,7 +31473,10 @@ "format": { "type": "string", "readOnly": true, - "x-looker-values": ["topojson", "vector_tile_region"], + "x-looker-values": [ + "topojson", + "vector_tile_region" + ], "description": "Specifies the data format of the region information. Valid values are: \"topojson\", \"vector_tile_region\".", "x-looker-nullable": false }, @@ -31581,7 +32664,12 @@ }, "pull_request_mode": { "type": "string", - "x-looker-values": ["off", "links", "recommended", "required"], + "x-looker-values": [ + "off", + "links", + "recommended", + "required" + ], "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", "x-looker-nullable": false }, @@ -32024,7 +33112,10 @@ } }, "x-looker-status": "stable", - "required": ["model", "view"] + "required": [ + "model", + "view" + ] }, "CreateQueryTask": { "properties": { @@ -32083,7 +33174,10 @@ } }, "x-looker-status": "stable", - "required": ["query_id", "result_format"] + "required": [ + "query_id", + "result_format" + ] }, "QueryTask": { "properties": { @@ -34206,7 +35300,13 @@ "whitelabel_configuration": { "$ref": "#/definitions/WhitelabelConfiguration", "readOnly": true, - "description": "Whitelabel config", + "description": "Whitelabel configuration", + "x-looker-nullable": false + }, + "custom_welcome_email": { + "$ref": "#/definitions/CustomWelcomeEmail", + "readOnly": true, + "description": "Custom welcome email configuration", "x-looker-nullable": false } }, @@ -34734,7 +35834,11 @@ } }, "x-looker-status": "stable", - "required": ["name", "label", "type"] + "required": [ + "name", + "label", + "type" + ] }, "UserAttributeGroupValue": { "properties": { @@ -34866,6 +35970,19 @@ }, "x-looker-status": "stable" }, + "UserEmailOnly": { + "properties": { + "email": { + "type": "string", + "description": "Email Address", + "x-looker-nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "email" + ] + }, "UserLoginLockout": { "properties": { "can": { @@ -35437,4 +36554,4 @@ "x-looker-status": "stable" } } -} +} \ No newline at end of file diff --git a/spec/Looker.4.0.oas.json b/spec/Looker.4.0.oas.json index 89e91f4e3..5d1cf14c0 100644 --- a/spec/Looker.4.0.oas.json +++ b/spec/Looker.4.0.oas.json @@ -1 +1,44911 @@ -{"openapi":"3.0.0","info":{"version":"4.0.21.14","x-looker-release-version":"21.14.0","title":"Looker API 4.0 (Beta) Reference","description":"\nWelcome to the future! API 4.0 co-exists with APIs 3.1 and 3.0. (3.0 should no longer be used.)\nThe \"beta\" tag means updates for API 4.0 may include breaking changes, but as always we will work to minimize them.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 version was introduced so we can make adjustments to API functions, parameters, and response types to\nfix bugs and inconsistencies. These changes fall outside the bounds of non-breaking additive changes we can\nmake to our stable API 3.1.\n\nOne benefit of these type adjustments in API 4.0 is dramatically better support for strongly\ntyped languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nWhile API 3.1 is still the de-facto Looker API (\"current\", \"stable\", \"default\", etc), the bulk\nof our development activity has shifted to API 4.0, where all new features are added.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n","contact":{"name":"Looker Team","url":"https://help.looker.com"},"license":{"name":"EULA","url":"https://localhost:10000/eula"}},"tags":[{"name":"Alert","description":"Alert"},{"name":"ApiAuth","description":"API Authentication"},{"name":"Auth","description":"Manage User Authentication Configuration"},{"name":"Board","description":"Manage Boards"},{"name":"ColorCollection","description":"Manage Color Collections"},{"name":"Command","description":"Manage Commands"},{"name":"Config","description":"Manage General Configuration"},{"name":"Connection","description":"Manage Database Connections"},{"name":"Content","description":"Manage Content"},{"name":"Dashboard","description":"Manage Dashboards"},{"name":"DataAction","description":"Run Data Actions"},{"name":"Datagroup","description":"Manage Datagroups"},{"name":"Folder","description":"Manage Folders"},{"name":"Group","description":"Manage Groups"},{"name":"Homepage","description":"Manage Homepage"},{"name":"Integration","description":"Manage Integrations"},{"name":"Look","description":"Run and Manage Looks"},{"name":"LookmlModel","description":"Manage LookML Models"},{"name":"Metadata","description":"Connection Metadata Features"},{"name":"Project","description":"Manage Projects"},{"name":"Query","description":"Run and Manage Queries"},{"name":"RenderTask","description":"Manage Render Tasks"},{"name":"Role","description":"Manage Roles"},{"name":"ScheduledPlan","description":"Manage Scheduled Plans"},{"name":"Session","description":"Session Information"},{"name":"Theme","description":"Manage Themes"},{"name":"User","description":"Manage Users"},{"name":"UserAttribute","description":"Manage User Attributes"},{"name":"Workspace","description":"Manage Workspaces"}],"paths":{"/query_tasks":{"post":{"tags":["Query"],"operationId":"create_query_task","summary":"Run Query Async","description":"### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n","parameters":[{"name":"limit","in":"query","description":"Row limit (may override the limit in the saved query).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"apply_formatting","in":"query","description":"Apply model-specified formatting to each result.","required":false,"schema":{"type":"boolean"}},{"name":"apply_vis","in":"query","description":"Apply visualization options to results.","required":false,"schema":{"type":"boolean"}},{"name":"cache","in":"query","description":"Get results from cache if available.","required":false,"schema":{"type":"boolean"}},{"name":"image_width","in":"query","description":"Render width for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"image_height","in":"query","description":"Render height for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"generate_drill_links","in":"query","description":"Generate drill links (only applicable to 'json_detail' format.","required":false,"schema":{"type":"boolean"}},{"name":"force_production","in":"query","description":"Force use of production models even if the user is in development mode.","required":false,"schema":{"type":"boolean"}},{"name":"cache_only","in":"query","description":"Retrieve any results from cache even if the results have expired.","required":false,"schema":{"type":"boolean"}},{"name":"path_prefix","in":"query","description":"Prefix to use for drill links (url encoded).","required":false,"schema":{"type":"string"}},{"name":"rebuild_pdts","in":"query","description":"Rebuild PDTS used in query.","required":false,"schema":{"type":"boolean"}},{"name":"server_table_calcs","in":"query","description":"Perform table calculations on query results","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQueryTask"}}},"description":"Query parameters","required":true},"responses":{"200":{"description":"query_task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryTask"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/query_tasks/multi_results":{"get":{"tags":["Query"],"operationId":"query_task_multi_results","summary":"Get Multiple Async Query Results","description":"### Fetch results of multiple async queries\n\nReturns the results of multiple async queries in one request.\n\nFor Query Tasks that are not completed, the response will include the execution status of the Query Task but will not include query results.\nQuery Tasks whose results have expired will have a status of 'expired'.\nIf the user making the API request does not have sufficient privileges to view a Query Task result, the result will have a status of 'missing'\n","parameters":[{"name":"query_task_ids","in":"query","description":"List of Query Task IDs","required":true,"style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Multiple query results","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"any","format":"any"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/query_tasks/{query_task_id}":{"get":{"tags":["Query"],"operationId":"query_task","summary":"Get Async Query Info","description":"### Get Query Task details\n\nUse this function to check the status of an async query task. After the status\nreaches \"Complete\", you can call [query_task_results(query_task_id)](#!/Query/query_task_results) to\nretrieve the results of the query.\n\nUse [create_query_task()](#!/Query/create_query_task) to create an async query task.\n","parameters":[{"name":"query_task_id","in":"path","description":"ID of the Query Task","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"query_task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryTask"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/query_tasks/{query_task_id}/results":{"get":{"tags":["Query"],"operationId":"query_task_results","summary":"Get Async Query Results","description":"### Get Async Query Results\n\nReturns the results of an async query task if the query has completed.\n\nIf the query task is still running or waiting to run, this function returns 204 No Content.\n\nIf the query task ID is invalid or the cached results of the query task have expired, this function returns 404 Not Found.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task\nCall query_task_results only after the query task status reaches \"Complete\".\n\nYou can also use [query_task_multi_results()](#!/Query/query_task_multi_results) retrieve the\nresults of multiple async query tasks at the same time.\n\n#### SQL Error Handling:\nIf the query fails due to a SQL db error, how this is communicated depends on the result_format you requested in `create_query_task()`.\n\nFor `json_detail` result_format: `query_task_results()` will respond with HTTP status '200 OK' and db SQL error info\nwill be in the `errors` property of the response object. The 'data' property will be empty.\n\nFor all other result formats: `query_task_results()` will respond with HTTP status `400 Bad Request` and some db SQL error info\nwill be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`.\nThese data formats can only carry row data, and error info is not row data.\n","parameters":[{"name":"query_task_id","in":"path","description":"ID of the Query Task","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The query results.","content":{"text":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}}}},"204":{"description":"The query is not finished","content":{"text":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The Query Task Id was not found or the results have expired.","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/queries/{query_id}":{"get":{"tags":["Query"],"operationId":"query","summary":"Get Query","description":"### Get a previously created query by id.\n\nA Looker query object includes the various parameters that define a database query that has been run or\ncould be run in the future. These parameters include: model, view, fields, filters, pivots, etc.\nQuery *results* are not part of the query object.\n\nQuery objects are unique and immutable. Query objects are created automatically in Looker as users explore data.\nLooker does not delete them; they become part of the query history. When asked to create a query for\nany given set of parameters, Looker will first try to find an existing query object with matching\nparameters and will only create a new object when an appropriate object can not be found.\n\nThis 'get' method is used to get the details about a query for a given id. See the other methods here\nto 'create' and 'run' queries.\n\nNote that some fields like 'filter_config' and 'vis_config' etc are specific to how the Looker UI\nbuilds queries and visualizations and are not generally useful for API use. They are not required when\ncreating new queries and can usually just be ignored.\n\n","parameters":[{"name":"query_id","in":"path","description":"Id of query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/queries/slug/{slug}":{"get":{"tags":["Query"],"operationId":"query_for_slug","summary":"Get Query for Slug","description":"### Get the query for a given query slug.\n\nThis returns the query for the 'slug' in a query share URL.\n\nThe 'slug' is a randomly chosen short string that is used as an alternative to the query's id value\nfor use in URLs etc. This method exists as a convenience to help you use the API to 'find' queries that\nhave been created using the Looker UI.\n\nYou can use the Looker explore page to build a query and then choose the 'Share' option to\nshow the share url for the query. Share urls generally look something like 'https://looker.yourcompany/x/vwGSbfc'.\nThe trailing 'vwGSbfc' is the share slug. You can pass that string to this api method to get details about the query.\nThose details include the 'id' that you can use to run the query. Or, you can copy the query body\n(perhaps with your own modification) and use that as the basis to make/run new queries.\n\nThis will also work with slugs from Looker explore urls like\n'https://looker.yourcompany/explore/ecommerce/orders?qid=aogBgL6o3cKK1jN3RoZl5s'. In this case\n'aogBgL6o3cKK1jN3RoZl5s' is the slug.\n","parameters":[{"name":"slug","in":"path","description":"Slug of query","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/queries":{"post":{"tags":["Query"],"operationId":"create_query","summary":"Create Query","description":"### Create a query.\n\nThis allows you to create a new query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}},"description":"Query","required":true},"responses":{"200":{"description":"Query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/queries/{query_id}/run/{result_format}":{"get":{"tags":["Query"],"operationId":"run_query","summary":"Run Query","description":"### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n","parameters":[{"name":"query_id","in":"path","description":"Id of query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"result_format","in":"path","description":"Format of result","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Row limit (may override the limit in the saved query).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"apply_formatting","in":"query","description":"Apply model-specified formatting to each result.","required":false,"schema":{"type":"boolean"}},{"name":"apply_vis","in":"query","description":"Apply visualization options to results.","required":false,"schema":{"type":"boolean"}},{"name":"cache","in":"query","description":"Get results from cache if available.","required":false,"schema":{"type":"boolean"}},{"name":"image_width","in":"query","description":"Render width for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"image_height","in":"query","description":"Render height for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"generate_drill_links","in":"query","description":"Generate drill links (only applicable to 'json_detail' format.","required":false,"schema":{"type":"boolean"}},{"name":"force_production","in":"query","description":"Force use of production models even if the user is in development mode.","required":false,"schema":{"type":"boolean"}},{"name":"cache_only","in":"query","description":"Retrieve any results from cache even if the results have expired.","required":false,"schema":{"type":"boolean"}},{"name":"path_prefix","in":"query","description":"Prefix to use for drill links (url encoded).","required":false,"schema":{"type":"string"}},{"name":"rebuild_pdts","in":"query","description":"Rebuild PDTS used in query.","required":false,"schema":{"type":"boolean"}},{"name":"server_table_calcs","in":"query","description":"Perform table calculations on query results","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Query","content":{"text":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}},"image/png":{"schema":{"type":"string"}},"image/jpeg":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"text":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/png":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/queries/run/{result_format}":{"post":{"tags":["Query"],"operationId":"run_inline_query","summary":"Run Inline Query","description":"### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n","parameters":[{"name":"result_format","in":"path","description":"Format of result","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Row limit (may override the limit in the saved query).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"apply_formatting","in":"query","description":"Apply model-specified formatting to each result.","required":false,"schema":{"type":"boolean"}},{"name":"apply_vis","in":"query","description":"Apply visualization options to results.","required":false,"schema":{"type":"boolean"}},{"name":"cache","in":"query","description":"Get results from cache if available.","required":false,"schema":{"type":"boolean"}},{"name":"image_width","in":"query","description":"Render width for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"image_height","in":"query","description":"Render height for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"generate_drill_links","in":"query","description":"Generate drill links (only applicable to 'json_detail' format.","required":false,"schema":{"type":"boolean"}},{"name":"force_production","in":"query","description":"Force use of production models even if the user is in development mode.","required":false,"schema":{"type":"boolean"}},{"name":"cache_only","in":"query","description":"Retrieve any results from cache even if the results have expired.","required":false,"schema":{"type":"boolean"}},{"name":"path_prefix","in":"query","description":"Prefix to use for drill links (url encoded).","required":false,"schema":{"type":"string"}},{"name":"rebuild_pdts","in":"query","description":"Rebuild PDTS used in query.","required":false,"schema":{"type":"boolean"}},{"name":"server_table_calcs","in":"query","description":"Perform table calculations on query results","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}},"description":"inline query","required":true},"responses":{"200":{"description":"Query Result","content":{"text":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}},"image/png":{"schema":{"type":"string"}},"image/jpeg":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"text":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/png":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/queries/models/{model_name}/views/{view_name}/run/{result_format}":{"get":{"tags":["Query"],"operationId":"run_url_encoded_query","summary":"Run Url Encoded Query","description":"### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/3.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n :fields => \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n :sorts => \"products.count desc 0\",\n :limit => \"500\",\n :query_timezone => \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n","parameters":[{"name":"model_name","in":"path","description":"Model name","required":true,"schema":{"type":"string"}},{"name":"view_name","in":"path","description":"View name","required":true,"schema":{"type":"string"}},{"name":"result_format","in":"path","description":"Format of result","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Query","content":{"text":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}},"image/png":{"schema":{"type":"string"}},"image/jpeg":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"text":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/png":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/login":{"post":{"tags":["ApiAuth"],"operationId":"login","summary":"Login","description":"### Present client credentials to obtain an authorization token\n\nLooker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://looker.com/docs/r/api/outh2_resource_owner_pc) pattern.\nThe client credentials required for this login must be obtained by creating an API3 key on a user account\nin the Looker Admin console. The API3 key consists of a public `client_id` and a private `client_secret`.\n\nThe access token returned by `login` must be used in the HTTP Authorization header of subsequent\nAPI requests, like this:\n```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```\nReplace \"4QDkCy...\" with the `access_token` value returned by `login`.\nThe word `token` is a string literal and must be included exactly as shown.\n\nThis function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params.\n\nExample of passing credentials in the HTTP request body:\n````\nPOST HTTP /login\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv\n````\n\n### Best Practice:\nAlways pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations.\n\nFor more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API3](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md).\n","parameters":[{"name":"client_id","in":"query","description":"client_id part of API3 Key.","required":false,"schema":{"type":"string"}},{"name":"client_secret","in":"query","description":"client_secret part of API3 Key.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Access token with metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessToken"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"none"}},"/login/{user_id}":{"post":{"tags":["ApiAuth"],"operationId":"login_user","summary":"Login user","description":"### Create an access token that runs as a given user.\n\nThis can only be called by an authenticated admin user. It allows that admin to generate a new\nauthentication token for the user with the given user id. That token can then be used for subsequent\nAPI calls - which are then performed *as* that target user.\n\nThe target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such\ncredentials are created by this call.\n\nThis allows for building systems where api user authentication for an arbitrary number of users is done\noutside of Looker and funneled through a single 'service account' with admin permissions. Note that a\nnew access token is generated on each call. If target users are going to be making numerous API\ncalls in a short period then it is wise to cache this authentication token rather than call this before\neach of those API calls.\n\nSee 'login' for more detail on the access token and how to use it.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"associative","in":"query","description":"When true (default), API calls using the returned access_token are attributed to the admin user who created the access_token. When false, API activity is attributed to the user the access_token runs as. False requires a looker license.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Access token with metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessToken"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"none"}},"/logout":{"delete":{"tags":["ApiAuth"],"operationId":"logout","summary":"Logout","description":"### Logout of the API and invalidate the current access token.\n","responses":{"204":{"description":"Logged out successfully.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"none"}},"/alerts/search":{"get":{"tags":["Alert"],"operationId":"search_alerts","summary":"Search Alerts","description":"### Search Alerts\n","parameters":[{"name":"limit","in":"query","description":"(Optional) Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"(Optional) Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"(Optional) Requested fields.","required":false,"schema":{"type":"string"}},{"name":"disabled","in":"query","description":"(Optional) Filter on returning only enabled or disabled alerts.","required":false,"schema":{"type":"boolean"}},{"name":"frequency","in":"query","description":"(Optional) Filter on alert frequency, such as: monthly, weekly, daily, hourly, minutes","required":false,"schema":{"type":"string"}},{"name":"condition_met","in":"query","description":"(Optional) Filter on whether the alert has met its condition when it last executed","required":false,"schema":{"type":"boolean"}},{"name":"last_run_start","in":"query","description":"(Optional) Filter on the start range of the last time the alerts were run. Example: 2021-01-01T01:01:01-08:00.","required":false,"schema":{"type":"string"}},{"name":"last_run_end","in":"query","description":"(Optional) Filter on the start range of the last time the alerts were run. Example: 2021-01-01T01:01:01-08:00.","required":false,"schema":{"type":"string"}},{"name":"all_owners","in":"query","description":"(Admin only) (Optional) Filter for all owners.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Alert.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/alerts/{alert_id}":{"get":{"tags":["Alert"],"operationId":"get_alert","summary":"Get an alert","description":"### Get an alert by a given alert ID\n","parameters":[{"name":"alert_id","in":"path","description":"ID of an alert","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Alert","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alert"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Alert"],"operationId":"update_alert_field","summary":"Update select fields on an alert","description":"### Update select alert fields\n# Available fields: `owner_id`, `is_disabled`, `is_public`, `threshold`\n#\n","parameters":[{"name":"alert_id","in":"path","description":"ID of an alert","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"$ref":"#/components/requestBodies/Alert"},"responses":{"200":{"description":"The alert is saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alert"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"put":{"tags":["Alert"],"operationId":"update_alert","summary":"Update an alert","description":"### Update an alert\n# Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n#\n","parameters":[{"name":"alert_id","in":"path","description":"ID of an alert","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"$ref":"#/components/requestBodies/Alert"},"responses":{"200":{"description":"The alert is saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alert"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Alert"],"operationId":"delete_alert","summary":"Delete an alert","description":"### Delete an alert by a given alert ID\n","parameters":[{"name":"alert_id","in":"path","description":"ID of an alert","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Alert successfully deleted."},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/alerts":{"post":{"tags":["Alert"],"operationId":"create_alert","summary":"Create an alert","description":"### Create a new alert and return details of the newly created object\n\nRequired fields: `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n\nExample Request:\nRun alert on dashboard element '103' at 5am every day. Send an email to 'test@test.com' if inventory for Los Angeles (using dashboard filter `Warehouse Name`) is lower than 1,000\n```\n{\n \"cron\": \"0 5 * * *\",\n \"custom_title\": \"Alert when LA inventory is low\",\n \"dashboard_element_id\": 103,\n \"applied_dashboard_filters\": [\n {\n \"filter_title\": \"Warehouse Name\",\n \"field_name\": \"distribution_centers.name\",\n \"filter_value\": \"Los Angeles CA\",\n \"filter_description\": \"is Los Angeles CA\"\n }\n ],\n \"comparison_type\": \"LESS_THAN\",\n \"destinations\": [\n {\n \"destination_type\": \"EMAIL\",\n \"email_address\": \"test@test.com\"\n }\n ],\n \"field\": {\n \"title\": \"Number on Hand\",\n \"name\": \"inventory_items.number_on_hand\"\n },\n \"is_disabled\": false,\n \"is_public\": true,\n \"threshold\": 1000\n}\n```\n","requestBody":{"$ref":"#/components/requestBodies/Alert"},"responses":{"200":{"description":"The alert is saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alert"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/cloud_storage":{"get":{"tags":["Config"],"operationId":"cloud_storage_configuration","summary":"Get Cloud Storage","description":"Get the current Cloud Storage Configuration.\n","responses":{"200":{"description":"Current Cloud Storage Configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupConfiguration"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Config"],"operationId":"update_cloud_storage_configuration","summary":"Update Cloud Storage","description":"Update the current Cloud Storage Configuration.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupConfiguration"}}},"description":"Options for Cloud Storage Configuration","required":true},"responses":{"200":{"description":"New state for specified model set.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupConfiguration"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/color_collections":{"get":{"tags":["ColorCollection"],"operationId":"all_color_collections","summary":"Get all Color Collections","description":"### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"ColorCollections","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ColorCollection"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["ColorCollection"],"operationId":"create_color_collection","summary":"Create ColorCollection","description":"### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","requestBody":{"$ref":"#/components/requestBodies/ColorCollection"},"responses":{"200":{"description":"ColorCollection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorCollection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/color_collections/custom":{"get":{"tags":["ColorCollection"],"operationId":"color_collections_custom","summary":"Get all Custom Color Collections","description":"### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"ColorCollections","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ColorCollection"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/color_collections/standard":{"get":{"tags":["ColorCollection"],"operationId":"color_collections_standard","summary":"Get all Standard Color Collections","description":"### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"ColorCollections","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ColorCollection"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/color_collections/default":{"put":{"tags":["ColorCollection"],"operationId":"set_default_color_collection","summary":"Set Default Color Collection","description":"### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","parameters":[{"name":"collection_id","in":"query","description":"ID of color collection to set as default","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ColorCollection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorCollection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"get":{"tags":["ColorCollection"],"operationId":"default_color_collection","summary":"Get Default Color Collection","description":"### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n","responses":{"200":{"description":"ColorCollection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorCollection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/color_collections/{collection_id}":{"get":{"tags":["ColorCollection"],"operationId":"color_collection","summary":"Get Color Collection by ID","description":"### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","parameters":[{"name":"collection_id","in":"path","description":"Id of Color Collection","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"ColorCollection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorCollection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["ColorCollection"],"operationId":"update_color_collection","summary":"Update Custom Color collection","description":"### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","parameters":[{"name":"collection_id","in":"path","description":"Id of Custom Color Collection","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/ColorCollection"},"responses":{"200":{"description":"ColorCollection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorCollection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["ColorCollection"],"operationId":"delete_color_collection","summary":"Delete ColorCollection","description":"### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n","parameters":[{"name":"collection_id","in":"path","description":"Id of Color Collection","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/commands":{"post":{"tags":["Command"],"operationId":"create_command","summary":"Create a custom command","description":"### Create a new command.\n# Required fields: [:name, :linked_content_id, :linked_content_type]\n# `linked_content_type` must be one of [\"dashboard\", \"lookml_dashboard\"]\n#\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}},"description":"Writable command parameters","required":true},"responses":{"200":{"description":"The command is saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"get":{"tags":["Command"],"operationId":"get_all_commands","summary":"Get All Commands","description":"### Get All Commands.\n","parameters":[{"name":"content_id","in":"query","description":"Id of the associated content. This must be accompanied with content_type.","required":false,"schema":{"type":"string"}},{"name":"content_type","in":"query","description":"Type of the associated content. This must be accompanied with content_id.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return.","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Commands","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Command"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/commands/{command_id}":{"patch":{"tags":["Command"],"operationId":"update_command","summary":"Update a custom command","description":"### Update an existing custom command.\n# Optional fields: ['name', 'description']\n#\n","parameters":[{"name":"command_id","in":"path","description":"ID of a command","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommand"}}},"description":"Re-writable command parameters","required":true},"responses":{"200":{"description":"The command is updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Command"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Command"],"operationId":"delete_command","summary":"Delete a custom command","description":"### Delete an existing custom command.\n","parameters":[{"name":"command_id","in":"path","description":"ID of a command","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"The command is deleted."},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_favorite/search":{"get":{"tags":["Content"],"operationId":"search_content_favorites","summary":"Search Favorite Contents","description":"### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"id","in":"query","description":"Match content favorite id(s)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"user_id","in":"query","description":"Match user id(s).To create a list of multiple ids, use commas as separators","required":false,"schema":{"type":"string"}},{"name":"content_metadata_id","in":"query","description":"Match content metadata id(s).To create a list of multiple ids, use commas as separators","required":false,"schema":{"type":"string"}},{"name":"dashboard_id","in":"query","description":"Match dashboard id(s).To create a list of multiple ids, use commas as separators","required":false,"schema":{"type":"string"}},{"name":"look_id","in":"query","description":"Match look id(s).To create a list of multiple ids, use commas as separators","required":false,"schema":{"type":"string"}},{"name":"board_id","in":"query","description":"Match board id(s).To create a list of multiple ids, use commas as separators","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return. (used with offset)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (used with limit)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Favorite Content","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentFavorite"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_favorite/{content_favorite_id}":{"get":{"tags":["Content"],"operationId":"content_favorite","summary":"Get Favorite Content","description":"### Get favorite content by its id","parameters":[{"name":"content_favorite_id","in":"path","description":"Id of favorite content","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Favorite Content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentFavorite"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Content"],"operationId":"delete_content_favorite","summary":"Delete Favorite Content","description":"### Delete favorite content","parameters":[{"name":"content_favorite_id","in":"path","description":"Id of favorite content","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_favorite":{"post":{"tags":["Content"],"operationId":"create_content_favorite","summary":"Create Favorite Content","description":"### Create favorite content","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentFavorite"}}},"description":"Favorite Content","required":true},"responses":{"200":{"description":"Favorite Content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentFavorite"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_metadata":{"get":{"tags":["Content"],"operationId":"all_content_metadatas","summary":"Get All Content Metadatas","description":"### Get information about all content metadata in a space.\n","parameters":[{"name":"parent_id","in":"query","description":"Parent space of content.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content Metadata","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentMeta"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_metadata/{content_metadata_id}":{"patch":{"tags":["Content"],"operationId":"update_content_metadata","summary":"Update Content Metadata","description":"### Move a piece of content.\n","parameters":[{"name":"content_metadata_id","in":"path","description":"Id of content metadata","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentMeta"}}},"description":"Content Metadata","required":true},"responses":{"200":{"description":"Content Metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentMeta"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"get":{"tags":["Content"],"operationId":"content_metadata","summary":"Get Content Metadata","description":"### Get information about an individual content metadata record.\n","parameters":[{"name":"content_metadata_id","in":"path","description":"Id of content metadata","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content Metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentMeta"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_metadata_access":{"post":{"tags":["Content"],"operationId":"create_content_metadata_access","summary":"Create Content Metadata Access","description":"### Create content metadata access.\n","parameters":[{"name":"send_boards_notification_email","in":"query","description":"Optionally sends notification email when granting access to a board.","required":false,"schema":{"type":"boolean"}}],"requestBody":{"$ref":"#/components/requestBodies/ContentMetaGroupUser"},"responses":{"200":{"description":"Content Metadata Access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentMetaGroupUser"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query","x-looker-rate-limited":true},"get":{"tags":["Content"],"operationId":"all_content_metadata_accesses","summary":"Get All Content Metadata Accesses","description":"### All content metadata access records for a content metadata item.\n","parameters":[{"name":"content_metadata_id","in":"query","description":"Id of content metadata","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content Metadata Access","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentMetaGroupUser"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_metadata_access/{content_metadata_access_id}":{"put":{"tags":["Content"],"operationId":"update_content_metadata_access","summary":"Update Content Metadata Access","description":"### Update type of access for content metadata.\n","parameters":[{"name":"content_metadata_access_id","in":"path","description":"Id of content metadata access","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/ContentMetaGroupUser"},"responses":{"200":{"description":"Content Metadata Access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentMetaGroupUser"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Content"],"operationId":"delete_content_metadata_access","summary":"Delete Content Metadata Access","description":"### Remove content metadata access.\n","parameters":[{"name":"content_metadata_access_id","in":"path","description":"Id of content metadata access","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_thumbnail/{type}/{resource_id}":{"get":{"tags":["Content"],"operationId":"content_thumbnail","summary":"Get Content Thumbnail","description":"### Get an image representing the contents of a dashboard or look.\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n","parameters":[{"name":"type","in":"path","description":"Either dashboard or look","required":true,"schema":{"type":"string"}},{"name":"resource_id","in":"path","description":"ID of the dashboard or look to render","required":true,"schema":{"type":"string"}},{"name":"reload","in":"query","description":"Whether or not to refresh the rendered image with the latest content","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","description":"A value of png produces a thumbnail in PNG format instead of SVG (default)","required":false,"schema":{"type":"string"}},{"name":"width","in":"query","description":"The width of the image if format is supplied","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"height","in":"query","description":"The height of the image if format is supplied","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Content thumbnail","content":{"image/svg+xml":{"schema":{"type":"string"}},"image/png":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"image/svg+xml":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"image/svg+xml":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/content_validation":{"get":{"tags":["Content"],"operationId":"content_validation","summary":"Validate Content","description":"### Validate All Content\n\nPerforms validation of all looks and dashboards\nReturns a list of errors found as well as metadata about the content validation run.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content validation results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentValidation"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/content_view/search":{"get":{"tags":["Content"],"operationId":"search_content_views","summary":"Search Content Views","description":"### Search Content Views\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"view_count","in":"query","description":"Match view count","required":false,"schema":{"type":"string"}},{"name":"group_id","in":"query","description":"Match Group Id","required":false,"schema":{"type":"string"}},{"name":"look_id","in":"query","description":"Match look_id","required":false,"schema":{"type":"string"}},{"name":"dashboard_id","in":"query","description":"Match dashboard_id","required":false,"schema":{"type":"string"}},{"name":"content_metadata_id","in":"query","description":"Match content metadata id","required":false,"schema":{"type":"string"}},{"name":"start_of_week_date","in":"query","description":"Match start of week date (format is \"YYYY-MM-DD\")","required":false,"schema":{"type":"string"}},{"name":"all_time","in":"query","description":"True if only all time view records should be returned","required":false,"schema":{"type":"boolean"}},{"name":"user_id","in":"query","description":"Match user id","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return. Use with `offset` to manage pagination of results","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning data","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Content View","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentView"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/credentials_email/search":{"get":{"tags":["User"],"operationId":"search_credentials_email","summary":"Search CredentialsEmail","description":"### Search email credentials\n\nReturns all credentials_email records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match credentials_email id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"email","in":"query","description":"Match credentials_email email.","required":false,"schema":{"type":"string"}},{"name":"emails","in":"query","description":"Find credentials_email that match given emails.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Credentials Email","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CredentialsEmailSearch"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/custom_welcome_email":{"get":{"tags":["Config"],"operationId":"custom_welcome_email","summary":"Get Custom Welcome Email","description":"### Get the current status and content of custom welcome emails\n","responses":{"200":{"description":"Custom Welcome Email","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomWelcomeEmail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Config"],"operationId":"update_custom_welcome_email","summary":"Update Custom Welcome Email Content","description":"Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n","parameters":[{"name":"send_test_welcome_email","in":"query","description":"If true a test email with the content from the request will be sent to the current user after saving","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomWelcomeEmail"}}},"description":"Custom Welcome Email setting and value to save","required":true},"responses":{"200":{"description":"Custom Welcome Email","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomWelcomeEmail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/custom_welcome_email_test":{"put":{"tags":["Config"],"operationId":"update_custom_welcome_email_test","summary":"Send a test welcome email to the currently logged in user with the supplied content ","description":"Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WelcomeEmailTest"}}},"description":"Subject, header, and Body of the email to be sent.","required":true},"responses":{"200":{"description":"Send Test Welcome Email","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WelcomeEmailTest"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards":{"get":{"tags":["Dashboard"],"operationId":"all_dashboards","summary":"Get All Dashboards","description":"### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"dashboards","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardBase"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Dashboard"],"operationId":"create_dashboard","summary":"Create Dashboard","description":"### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title`, `user_id`, and `space_id` are all required fields.\n`Space_id` and `user_id` must contain the id of an existing space or user, respectively.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n","requestBody":{"$ref":"#/components/requestBodies/Dashboard"},"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/search":{"get":{"tags":["Dashboard"],"operationId":"search_dashboards","summary":"Search Dashboards","description":"### Search Dashboards\n\nReturns an **array of dashboard objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n","parameters":[{"name":"id","in":"query","description":"Match dashboard id.","required":false,"schema":{"type":"string"}},{"name":"slug","in":"query","description":"Match dashboard slug.","required":false,"schema":{"type":"string"}},{"name":"title","in":"query","description":"Match Dashboard title.","required":false,"schema":{"type":"string"}},{"name":"description","in":"query","description":"Match Dashboard description.","required":false,"schema":{"type":"string"}},{"name":"content_favorite_id","in":"query","description":"Filter on a content favorite id.","required":false,"schema":{"type":"string"}},{"name":"folder_id","in":"query","description":"Filter on a particular space.","required":false,"schema":{"type":"string"}},{"name":"deleted","in":"query","description":"Filter on dashboards deleted status.","required":false,"schema":{"type":"string"}},{"name":"user_id","in":"query","description":"Filter on dashboards created by a particular user.","required":false,"schema":{"type":"string"}},{"name":"view_count","in":"query","description":"Filter on a particular value of view_count","required":false,"schema":{"type":"string"}},{"name":"content_metadata_id","in":"query","description":"Filter on a content favorite id.","required":false,"schema":{"type":"string"}},{"name":"curate","in":"query","description":"Exclude items that exist only in personal spaces other than the users","required":false,"schema":{"type":"boolean"}},{"name":"last_viewed_at","in":"query","description":"Select dashboards based on when they were last viewed","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Requested page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Results per page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Number of results to return. (used with offset and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (used with limit and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"One or more fields to sort by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :view_count, :favorite_count, :slug, :content_favorite_id, :content_metadata_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at]","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"dashboards","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Dashboard"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{lookml_dashboard_id}/import/{space_id}":{"post":{"tags":["Dashboard"],"operationId":"import_lookml_dashboard","summary":"Import LookML Dashboard","description":"### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n","parameters":[{"name":"lookml_dashboard_id","in":"path","description":"Id of LookML dashboard","required":true,"schema":{"type":"string"}},{"name":"space_id","in":"path","description":"Id of space to import the dashboard to","required":true,"schema":{"type":"string"}},{"name":"raw_locale","in":"query","description":"If true, and this dashboard is localized, export it with the raw keys, not localized.","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}},"description":"Dashboard"},"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"201":{"description":"dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{lookml_dashboard_id}/sync":{"patch":{"tags":["Dashboard"],"operationId":"sync_lookml_dashboard","summary":"Sync LookML Dashboard","description":"### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n","parameters":[{"name":"lookml_dashboard_id","in":"path","description":"Id of LookML dashboard, in the form 'model::dashboardname'","required":true,"schema":{"type":"string"}},{"name":"raw_locale","in":"query","description":"If true, and this dashboard is localized, export it with the raw keys, not localized.","required":false,"schema":{"type":"boolean"}}],"requestBody":{"$ref":"#/components/requestBodies/Dashboard"},"responses":{"200":{"description":"Ids of all the dashboards that were updated by this operation","content":{"application/json":{"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{dashboard_id}":{"delete":{"tags":["Dashboard"],"operationId":"delete_dashboard","summary":"Delete Dashboard","description":"### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Dashboard"],"operationId":"update_dashboard","summary":"Update Dashboard","description":"### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/Dashboard"},"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"get":{"tags":["Dashboard"],"operationId":"dashboard","summary":"Get Dashboard","description":"### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/aggregate_table_lookml/{dashboard_id}":{"get":{"tags":["Dashboard"],"operationId":"dashboard_aggregate_table_lookml","summary":"Get Aggregate Table LookML for a dashboard","description":"### Get Aggregate Table LookML for Each Query on a Dahboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JSON for Aggregate Table LookML","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardAggregateTableLookml"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/lookml/{dashboard_id}":{"get":{"tags":["Dashboard"],"operationId":"dashboard_lookml","summary":"Get lookml of a UDD","description":"### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"json of dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLookml"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{dashboard_id}/copy":{"post":{"tags":["Dashboard"],"operationId":"copy_dashboard","summary":"Copy Dashboard","description":"### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n","parameters":[{"name":"dashboard_id","in":"path","description":"Dashboard id to copy.","required":true,"schema":{"type":"string"}},{"name":"folder_id","in":"query","description":"Folder id to copy to.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"201":{"description":"dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{dashboard_id}/move":{"patch":{"tags":["Dashboard"],"operationId":"move_dashboard","summary":"Move Dashboard","description":"### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n","parameters":[{"name":"dashboard_id","in":"path","description":"Dashboard id to move.","required":true,"schema":{"type":"string"}},{"name":"folder_id","in":"query","description":"Folder id to move to.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"201":{"description":"dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_elements/search":{"get":{"tags":["Dashboard"],"operationId":"search_dashboard_elements","summary":"Search Dashboard Elements","description":"### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"dashboard_id","in":"query","description":"Select elements that refer to a given dashboard id","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"look_id","in":"query","description":"Select elements that refer to a given look id","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"title","in":"query","description":"Match the title of element","required":false,"schema":{"type":"string"}},{"name":"deleted","in":"query","description":"Select soft-deleted dashboard elements","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}},{"name":"sorts","in":"query","description":"Fields to sort by. Sortable fields: [:look_id, :dashboard_id, :deleted, :title]","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard elements","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardElement"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_elements/{dashboard_element_id}":{"get":{"tags":["Dashboard"],"operationId":"dashboard_element","summary":"Get DashboardElement","description":"### Get information about the dashboard element with a specific id.","parameters":[{"name":"dashboard_element_id","in":"path","description":"Id of dashboard element","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"DashboardElement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardElement"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Dashboard"],"operationId":"delete_dashboard_element","summary":"Delete DashboardElement","description":"### Delete a dashboard element with a specific id.","parameters":[{"name":"dashboard_element_id","in":"path","description":"Id of dashboard element","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Dashboard"],"operationId":"update_dashboard_element","summary":"Update DashboardElement","description":"### Update the dashboard element with a specific id.","parameters":[{"name":"dashboard_element_id","in":"path","description":"Id of dashboard element","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/DashboardElement"},"responses":{"200":{"description":"DashboardElement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardElement"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{dashboard_id}/dashboard_elements":{"get":{"tags":["Dashboard"],"operationId":"dashboard_dashboard_elements","summary":"Get All DashboardElements","description":"### Get information about all the dashboard elements on a dashboard with a specific id.","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"DashboardElement","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardElement"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_elements":{"post":{"tags":["Dashboard"],"operationId":"create_dashboard_element","summary":"Create DashboardElement","description":"### Create a dashboard element on the dashboard with a specific id.","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/DashboardElement"},"responses":{"200":{"description":"DashboardElement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardElement"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_filters/{dashboard_filter_id}":{"get":{"tags":["Dashboard"],"operationId":"dashboard_filter","summary":"Get Dashboard Filter","description":"### Get information about the dashboard filters with a specific id.","parameters":[{"name":"dashboard_filter_id","in":"path","description":"Id of dashboard filters","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard Filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardFilter"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Dashboard"],"operationId":"delete_dashboard_filter","summary":"Delete Dashboard Filter","description":"### Delete a dashboard filter with a specific id.","parameters":[{"name":"dashboard_filter_id","in":"path","description":"Id of dashboard filter","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Dashboard"],"operationId":"update_dashboard_filter","summary":"Update Dashboard Filter","description":"### Update the dashboard filter with a specific id.","parameters":[{"name":"dashboard_filter_id","in":"path","description":"Id of dashboard filter","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardFilter"}}},"description":"Dashboard Filter","required":true},"responses":{"200":{"description":"Dashboard Filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardFilter"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{dashboard_id}/dashboard_filters":{"get":{"tags":["Dashboard"],"operationId":"dashboard_dashboard_filters","summary":"Get All Dashboard Filters","description":"### Get information about all the dashboard filters on a dashboard with a specific id.","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard Filter","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardFilter"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_filters":{"post":{"tags":["Dashboard"],"operationId":"create_dashboard_filter","summary":"Create Dashboard Filter","description":"### Create a dashboard filter on the dashboard with a specific id.","parameters":[{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDashboardFilter"}}},"description":"Dashboard Filter","required":true},"responses":{"200":{"description":"Dashboard Filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardFilter"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_layout_components/{dashboard_layout_component_id}":{"get":{"tags":["Dashboard"],"operationId":"dashboard_layout_component","summary":"Get DashboardLayoutComponent","description":"### Get information about the dashboard elements with a specific id.","parameters":[{"name":"dashboard_layout_component_id","in":"path","description":"Id of dashboard layout component","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"DashboardLayoutComponent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayoutComponent"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Dashboard"],"operationId":"update_dashboard_layout_component","summary":"Update DashboardLayoutComponent","description":"### Update the dashboard element with a specific id.","parameters":[{"name":"dashboard_layout_component_id","in":"path","description":"Id of dashboard layout component","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayoutComponent"}}},"description":"DashboardLayoutComponent","required":true},"responses":{"200":{"description":"DashboardLayoutComponent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayoutComponent"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components":{"get":{"tags":["Dashboard"],"operationId":"dashboard_layout_dashboard_layout_components","summary":"Get All DashboardLayoutComponents","description":"### Get information about all the dashboard layout components for a dashboard layout with a specific id.","parameters":[{"name":"dashboard_layout_id","in":"path","description":"Id of dashboard layout component","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"DashboardLayoutComponent","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardLayoutComponent"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_layouts/{dashboard_layout_id}":{"get":{"tags":["Dashboard"],"operationId":"dashboard_layout","summary":"Get DashboardLayout","description":"### Get information about the dashboard layouts with a specific id.","parameters":[{"name":"dashboard_layout_id","in":"path","description":"Id of dashboard layouts","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"DashboardLayout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Dashboard"],"operationId":"delete_dashboard_layout","summary":"Delete DashboardLayout","description":"### Delete a dashboard layout with a specific id.","parameters":[{"name":"dashboard_layout_id","in":"path","description":"Id of dashboard layout","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Dashboard"],"operationId":"update_dashboard_layout","summary":"Update DashboardLayout","description":"### Update the dashboard layout with a specific id.","parameters":[{"name":"dashboard_layout_id","in":"path","description":"Id of dashboard layout","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/DashboardLayout"},"responses":{"200":{"description":"DashboardLayout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboards/{dashboard_id}/dashboard_layouts":{"get":{"tags":["Dashboard"],"operationId":"dashboard_dashboard_layouts","summary":"Get All DashboardLayouts","description":"### Get information about all the dashboard elements on a dashboard with a specific id.","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"DashboardLayout","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DashboardLayout"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dashboard_layouts":{"post":{"tags":["Dashboard"],"operationId":"create_dashboard_layout","summary":"Create DashboardLayout","description":"### Create a dashboard layout on the dashboard with a specific id.","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/DashboardLayout"},"responses":{"200":{"description":"DashboardLayout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/data_actions":{"post":{"tags":["DataAction"],"operationId":"perform_data_action","summary":"Send a Data Action","description":"Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataActionRequest"}}},"description":"Data Action Request","required":true},"responses":{"200":{"description":"Data Action Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataActionResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/data_actions/form":{"post":{"tags":["DataAction"],"operationId":"fetch_remote_data_action_form","summary":"Fetch Remote Data Action Form","description":"For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}},"description":"Data Action Request","required":true},"responses":{"200":{"description":"Data Action Form","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataActionForm"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/datagroups":{"get":{"tags":["Datagroup"],"operationId":"all_datagroups","summary":"Get All Datagroups","description":"### Get information about all datagroups.\n","responses":{"200":{"description":"Datagroup","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Datagroup"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/datagroups/{datagroup_id}":{"get":{"tags":["Datagroup"],"operationId":"datagroup","summary":"Get Datagroup","description":"### Get information about a datagroup.\n","parameters":[{"name":"datagroup_id","in":"path","description":"ID of datagroup.","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Datagroup","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Datagroup"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Datagroup"],"operationId":"update_datagroup","summary":"Update Datagroup","description":"### Update a datagroup using the specified params.\n","parameters":[{"name":"datagroup_id","in":"path","description":"ID of datagroup.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Datagroup"}}},"description":"Datagroup","required":true},"responses":{"200":{"description":"Datagroup","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Datagroup"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/connections":{"get":{"tags":["Connection"],"operationId":"all_connections","summary":"Get All Connections","description":"### Get information about all connections.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Connection","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DBConnection"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["Connection"],"operationId":"create_connection","summary":"Create Connection","description":"### Create a connection using the specified configuration.\n","requestBody":{"$ref":"#/components/requestBodies/DBConnection"},"responses":{"200":{"description":"Connection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DBConnection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/connections/{connection_name}":{"get":{"tags":["Connection"],"operationId":"connection","summary":"Get Connection","description":"### Get information about a connection.\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Connection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DBConnection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Connection"],"operationId":"update_connection","summary":"Update Connection","description":"### Update a connection using the specified configuration.\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/DBConnection"},"responses":{"200":{"description":"Connection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DBConnection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["Connection"],"operationId":"delete_connection","summary":"Delete Connection","description":"### Delete a connection.\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/connections/{connection_name}/connection_override/{override_context}":{"delete":{"tags":["Connection"],"operationId":"delete_connection_override","summary":"Delete Connection Override","description":"### Delete a connection override.\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"override_context","in":"path","description":"Context of connection override","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/connections/{connection_name}/test":{"put":{"tags":["Connection"],"operationId":"test_connection","summary":"Test Connection","description":"### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"tests","in":"query","description":"Array of names of tests to run","required":false,"style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Test results","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DBConnectionTestResult"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query","x-looker-rate-limited":true}},"/connections/test":{"put":{"tags":["Connection"],"operationId":"test_connection_config","summary":"Test Connection Configuration","description":"### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n","parameters":[{"name":"tests","in":"query","description":"Array of names of tests to run","required":false,"style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"requestBody":{"$ref":"#/components/requestBodies/DBConnection"},"responses":{"200":{"description":"Test results","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DBConnectionTestResult"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query","x-looker-rate-limited":true}},"/projects/{project_id}/manifest/lock_all":{"post":{"tags":["Project"],"operationId":"lock_all","summary":"Lock All","description":" ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n","parameters":[{"name":"project_id","in":"path","description":"Id of project","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project Dependency Manager","content":{"application/json":{"schema":{"type":"string"}}}},"204":{"description":"Returns 204 if dependencies successfully installed, otherwise 400 with an error message"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/derived_table/graph/model/{model}":{"get":{"tags":["LookmlModel"],"operationId":"graph_derived_tables_for_model","summary":"Get Derived Table","description":"### Discover information about derived tables\n","parameters":[{"name":"model","in":"path","description":"The name of the Lookml model.","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","description":"The format of the graph. Valid values are [dot]. Default is `dot`","required":false,"schema":{"type":"string"}},{"name":"color","in":"query","description":"Color denoting the build status of the graph. Grey = not built, green = built, yellow = building, red = error.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Derived Table","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyGraph"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/dialect_info":{"get":{"tags":["Connection"],"operationId":"all_dialect_infos","summary":"Get All Dialect Infos","description":"### Get information about all dialects.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dialect Info","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DialectInfo"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/digest_emails_enabled":{"get":{"tags":["Config"],"operationId":"digest_emails_enabled","summary":"Get Digest_emails","description":"### Retrieve the value for whether or not digest emails is enabled\n","responses":{"200":{"description":"Digest_emails","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigestEmails"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Config"],"operationId":"update_digest_emails_enabled","summary":"Update Digest_emails","description":"### Update the setting for enabling/disabling digest emails\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigestEmails"}}},"description":"Digest_emails","required":true},"responses":{"200":{"description":"Digest_emails","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigestEmails"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/digest_email_send":{"post":{"tags":["Config"],"operationId":"create_digest_email_send","summary":"Deliver digest email contents","description":"### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.","responses":{"200":{"description":"Status of generating and sending the data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DigestEmailSend"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"none","x-looker-rate-limited":true}},"/embed/sso_url":{"post":{"tags":["Auth"],"operationId":"create_sso_embed_url","summary":"Create SSO Embed Url","description":"### Create SSO Embed URL\n\nCreates an SSO embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to this URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed SSO embed URL can only be used once. After it has been used to request a page from the\nLooker server, the URL is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (group_ids property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the group_ids property, or both the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the group_ids, models, and permissions properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nSSO embed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nTo diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the newest active secret defined in the Looker instance.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedSsoParams"}}},"description":"SSO parameters","required":true},"responses":{"200":{"description":"Signed SSO URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedUrlResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"none"}},"/embed/token_url/me":{"post":{"tags":["Auth"],"operationId":"create_embed_url_as_me","summary":"Create Embed URL","description":"### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.looker.com/r/admin/embed/private-embed). Instead of\nof logging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this embed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedParams"}}},"description":"Embed parameters","required":true},"responses":{"200":{"description":"Embed URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedUrlResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"none"}},"/external_oauth_applications":{"get":{"tags":["Connection"],"operationId":"all_external_oauth_applications","summary":"Get All External OAuth Applications","description":"### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n","parameters":[{"name":"name","in":"query","description":"Application name","required":false,"schema":{"type":"string"}},{"name":"client_id","in":"query","description":"Application Client ID","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"External OAuth Application","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExternalOauthApplication"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Connection"],"operationId":"create_external_oauth_application","summary":"Create External OAuth Application","description":"### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalOauthApplication"}}},"description":"External OAuth Application","required":true},"responses":{"200":{"description":"External OAuth Application","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalOauthApplication"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/external_oauth_applications/user_state":{"post":{"tags":["Connection"],"operationId":"create_oauth_application_user_state","summary":"Create Create OAuth user state.","description":"### Create OAuth User state.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOAuthApplicationUserStateRequest"}}},"description":"Create OAuth user state.","required":true},"responses":{"200":{"description":"Created user state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOAuthApplicationUserStateResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/git_branches":{"get":{"tags":["Project"],"operationId":"all_git_branches","summary":"Get All Git Branches","description":"### Get All Git Branches\n\nReturns a list of git branches in the project repository\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Git Branch","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitBranch"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/git_branch":{"get":{"tags":["Project"],"operationId":"git_branch","summary":"Get Active Git Branch","description":"### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Git Branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitBranch"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Project"],"operationId":"create_git_branch","summary":"Checkout New Git Branch","description":"### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/GitBranch"},"responses":{"200":{"description":"Git Branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitBranch"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"put":{"tags":["Project"],"operationId":"update_git_branch","summary":"Update Project Git Branch","description":"### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/GitBranch"},"responses":{"200":{"description":"Git Branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitBranch"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/git_branch/{branch_name}":{"get":{"tags":["Project"],"operationId":"find_git_branch","summary":"Find a Git Branch","description":"### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"branch_name","in":"path","description":"Branch Name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Git Branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitBranch"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Project"],"operationId":"delete_git_branch","summary":"Delete a Git Branch","description":"### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"branch_name","in":"path","description":"Branch Name","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/groups":{"get":{"tags":["Group"],"operationId":"all_groups","summary":"Get All Groups","description":"### Get information about all groups.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Requested page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Results per page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"ids","in":"query","description":"Optional of ids to get specific groups.","required":false,"style":"form","explode":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"content_metadata_id","in":"query","description":"Id of content metadata to which groups must have access.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"can_add_to_content_metadata","in":"query","description":"Select only groups that either can/cannot be given access to content.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Group","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Group"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["Group"],"operationId":"create_group","summary":"Create Group","description":"### Creates a new group (admin only).\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/Group"},"responses":{"200":{"description":"Group","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/groups/search":{"get":{"tags":["Group"],"operationId":"search_groups","summary":"Search Groups","description":"### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}},{"name":"id","in":"query","description":"Match group id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match group name.","required":false,"schema":{"type":"string"}},{"name":"external_group_id","in":"query","description":"Match group external_group_id.","required":false,"schema":{"type":"string"}},{"name":"externally_managed","in":"query","description":"Match group externally_managed.","required":false,"schema":{"type":"boolean"}},{"name":"externally_orphaned","in":"query","description":"Match group externally_orphaned.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Group","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Group"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/groups/search/with_roles":{"get":{"tags":["Group"],"operationId":"search_groups_with_roles","summary":"Search Groups with Roles","description":"### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}},{"name":"id","in":"query","description":"Match group id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match group name.","required":false,"schema":{"type":"string"}},{"name":"external_group_id","in":"query","description":"Match group external_group_id.","required":false,"schema":{"type":"string"}},{"name":"externally_managed","in":"query","description":"Match group externally_managed.","required":false,"schema":{"type":"boolean"}},{"name":"externally_orphaned","in":"query","description":"Match group externally_orphaned.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Group","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupSearch"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/groups/search/with_hierarchy":{"get":{"tags":["Group"],"operationId":"search_groups_with_hierarchy","summary":"Search Groups with Hierarchy","description":"### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}},{"name":"id","in":"query","description":"Match group id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match group name.","required":false,"schema":{"type":"string"}},{"name":"external_group_id","in":"query","description":"Match group external_group_id.","required":false,"schema":{"type":"string"}},{"name":"externally_managed","in":"query","description":"Match group externally_managed.","required":false,"schema":{"type":"boolean"}},{"name":"externally_orphaned","in":"query","description":"Match group externally_orphaned.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Group","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupHierarchy"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/groups/{group_id}":{"get":{"tags":["Group"],"operationId":"group","summary":"Get Group","description":"### Get information about a group.\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Group","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Group"],"operationId":"update_group","summary":"Update Group","description":"### Updates the a group (admin only).","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/Group"},"responses":{"200":{"description":"Group","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["Group"],"operationId":"delete_group","summary":"Delete Group","description":"### Deletes a group (admin only).\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/groups/{group_id}/groups":{"get":{"tags":["Group"],"operationId":"all_group_groups","summary":"Get All Groups in Group","description":"### Get information about all the groups in a group\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"All groups in group.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Group"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["Group"],"operationId":"add_group_group","summary":"Add a Group to Group","description":"### Adds a new group to a group.\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupIdForGroupInclusion"}}},"description":"Group id to add","required":true},"responses":{"200":{"description":"Added group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/groups/{group_id}/users":{"get":{"tags":["Group"],"operationId":"all_group_users","summary":"Get All Users in Group","description":"### Get information about all the users directly included in a group.\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Requested page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Results per page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"All users in group.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["Group"],"operationId":"add_group_user","summary":"Add a User to Group","description":"### Adds a new user to a group.\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupIdForGroupUserInclusion"}}},"description":"User id to add","required":true},"responses":{"200":{"description":"Added user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/groups/{group_id}/users/{user_id}":{"delete":{"tags":["Group"],"operationId":"delete_group_user","summary":"Remove a User from Group","description":"### Removes a user from a group.\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"user_id","in":"path","description":"Id of user to remove from group","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"User successfully removed from group"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/groups/{group_id}/groups/{deleting_group_id}":{"delete":{"tags":["Group"],"operationId":"delete_group_from_group","summary":"Deletes a Group from Group","description":"### Removes a group from a group.\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"deleting_group_id","in":"path","description":"Id of group to delete","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Group successfully deleted"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/groups/{group_id}/attribute_values/{user_attribute_id}":{"patch":{"tags":["Group"],"operationId":"update_user_attribute_group_value","summary":"Set User Attribute Group Value","description":"### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttributeGroupValue"}}},"description":"New value for group.","required":true},"responses":{"200":{"description":"Group value object.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttributeGroupValue"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["Group"],"operationId":"delete_user_attribute_group_value","summary":"Delete User Attribute Group Value","description":"### Remove a user attribute value from a group.\n","parameters":[{"name":"group_id","in":"path","description":"Id of group","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Value successfully unset"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/boards":{"get":{"tags":["Board"],"operationId":"all_boards","summary":"Get All Boards","description":"### Get information about all boards.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Board","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Board"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Board"],"operationId":"create_board","summary":"Create Board","description":"### Create a new board.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/Board"},"responses":{"200":{"description":"Board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/boards/search":{"get":{"tags":["Board"],"operationId":"search_boards","summary":"Search Boards","description":"### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"title","in":"query","description":"Matches board title.","required":false,"schema":{"type":"string"}},{"name":"created_at","in":"query","description":"Matches the timestamp for when the board was created.","required":false,"schema":{"type":"string"}},{"name":"first_name","in":"query","description":"The first name of the user who created this board.","required":false,"schema":{"type":"string"}},{"name":"last_name","in":"query","description":"The last name of the user who created this board.","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"favorited","in":"query","description":"Return favorited boards when true.","required":false,"schema":{"type":"boolean"}},{"name":"creator_id","in":"query","description":"Filter on boards created by a particular user.","required":false,"schema":{"type":"string"}},{"name":"sorts","in":"query","description":"The fields to sort the results by","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The page to return.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"The number of items in the returned page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"The number of items to skip before returning any. (used with limit and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"The maximum number of items to return. (used with offset and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"boards","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Board"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/boards/{board_id}":{"get":{"tags":["Board"],"operationId":"board","summary":"Get Board","description":"### Get information about a board.\n","parameters":[{"name":"board_id","in":"path","description":"Id of board","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Board"],"operationId":"update_board","summary":"Update Board","description":"### Update a board definition.\n","parameters":[{"name":"board_id","in":"path","description":"Id of board","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/Board"},"responses":{"200":{"description":"Board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Board"],"operationId":"delete_board","summary":"Delete Board","description":"### Delete a board.\n","parameters":[{"name":"board_id","in":"path","description":"Id of board","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/board_items":{"get":{"tags":["Board"],"operationId":"all_board_items","summary":"Get All Board Items","description":"### Get information about all board items.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"board_section_id","in":"query","description":"Filter to a specific board section","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Board Item","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BoardItem"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Board"],"operationId":"create_board_item","summary":"Create Board Item","description":"### Create a new board item.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/BoardItem"},"responses":{"200":{"description":"Board Item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardItem"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/board_items/{board_item_id}":{"get":{"tags":["Board"],"operationId":"board_item","summary":"Get Board Item","description":"### Get information about a board item.\n","parameters":[{"name":"board_item_id","in":"path","description":"Id of board item","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Board Item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardItem"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Board"],"operationId":"update_board_item","summary":"Update Board Item","description":"### Update a board item definition.\n","parameters":[{"name":"board_item_id","in":"path","description":"Id of board item","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/BoardItem"},"responses":{"200":{"description":"Board Item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardItem"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Board"],"operationId":"delete_board_item","summary":"Delete Board Item","description":"### Delete a board item.\n","parameters":[{"name":"board_item_id","in":"path","description":"Id of board_item","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/primary_homepage_sections":{"get":{"tags":["Homepage"],"operationId":"all_primary_homepage_sections","summary":"Get All Primary homepage sections","description":"### Get information about the primary homepage's sections.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Primary homepage section","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HomepageSection"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/board_sections":{"get":{"tags":["Board"],"operationId":"all_board_sections","summary":"Get All Board sections","description":"### Get information about all board sections.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Board section","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BoardSection"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Board"],"operationId":"create_board_section","summary":"Create Board section","description":"### Create a new board section.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/BoardSection"},"responses":{"200":{"description":"Board section","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardSection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/board_sections/{board_section_id}":{"get":{"tags":["Board"],"operationId":"board_section","summary":"Get Board section","description":"### Get information about a board section.\n","parameters":[{"name":"board_section_id","in":"path","description":"Id of board section","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Board section","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardSection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Board"],"operationId":"update_board_section","summary":"Update Board section","description":"### Update a board section definition.\n","parameters":[{"name":"board_section_id","in":"path","description":"Id of board section","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/BoardSection"},"responses":{"200":{"description":"Board section","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardSection"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Board"],"operationId":"delete_board_section","summary":"Delete Board section","description":"### Delete a board section.\n","parameters":[{"name":"board_section_id","in":"path","description":"Id of board section","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/integration_hubs":{"get":{"tags":["Integration"],"operationId":"all_integration_hubs","summary":"Get All Integration Hubs","description":"### Get information about all Integration Hubs.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Integration Hub","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationHub"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Integration"],"operationId":"create_integration_hub","summary":"Create Integration Hub","description":"### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/IntegrationHub"},"responses":{"200":{"description":"Integration Hub","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationHub"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query","x-looker-rate-limited":true}},"/integration_hubs/{integration_hub_id}":{"get":{"tags":["Integration"],"operationId":"integration_hub","summary":"Get Integration Hub","description":"### Get information about a Integration Hub.\n","parameters":[{"name":"integration_hub_id","in":"path","description":"Id of Integration Hub","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Integration Hub","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationHub"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Integration"],"operationId":"update_integration_hub","summary":"Update Integration Hub","description":"### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n","parameters":[{"name":"integration_hub_id","in":"path","description":"Id of Integration Hub","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/IntegrationHub"},"responses":{"200":{"description":"Integration Hub","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationHub"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query","x-looker-rate-limited":true},"delete":{"tags":["Integration"],"operationId":"delete_integration_hub","summary":"Delete Integration Hub","description":"### Delete a Integration Hub.\n","parameters":[{"name":"integration_hub_id","in":"path","description":"Id of integration_hub","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/integration_hubs/{integration_hub_id}/accept_legal_agreement":{"post":{"tags":["Integration"],"operationId":"accept_integration_hub_legal_agreement","summary":"Accept Integration Hub Legal Agreement","description":"Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.","parameters":[{"name":"integration_hub_id","in":"path","description":"Id of integration_hub","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Integration hub","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationHub"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/integrations":{"get":{"tags":["Integration"],"operationId":"all_integrations","summary":"Get All Integrations","description":"### Get information about all Integrations.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"integration_hub_id","in":"query","description":"Filter to a specific provider","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Integration","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Integration"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/integrations/{integration_id}":{"get":{"tags":["Integration"],"operationId":"integration","summary":"Get Integration","description":"### Get information about a Integration.\n","parameters":[{"name":"integration_id","in":"path","description":"Id of integration","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Integration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Integration"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Integration"],"operationId":"update_integration","summary":"Update Integration","description":"### Update parameters on a Integration.\n","parameters":[{"name":"integration_id","in":"path","description":"Id of integration","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Integration"}}},"description":"Integration","required":true},"responses":{"200":{"description":"Integration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Integration"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/integrations/{integration_id}/form":{"post":{"tags":["Integration"],"operationId":"fetch_integration_form","summary":"Fetch Remote Integration Form","description":"Returns the Integration form for presentation to the user.","parameters":[{"name":"integration_id","in":"path","description":"Id of integration","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}},"description":"Integration Form Request"},"responses":{"200":{"description":"Data Action Form","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataActionForm"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/integrations/{integration_id}/test":{"post":{"tags":["Integration"],"operationId":"test_integration","summary":"Test integration","description":"Tests the integration to make sure all the settings are working.","parameters":[{"name":"integration_id","in":"path","description":"Id of integration","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Test Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationTestResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/internal_help_resources_content":{"get":{"tags":["Config"],"operationId":"internal_help_resources_content","summary":"Get Internal Help Resources Content","description":"### Set the menu item name and content for internal help resources\n","responses":{"200":{"description":"Internal Help Resources Content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalHelpResourcesContent"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Config"],"operationId":"update_internal_help_resources_content","summary":"Update internal help resources content","description":"Update internal help resources content\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalHelpResourcesContent"}}},"description":"Internal Help Resources Content","required":true},"responses":{"200":{"description":"Internal Help Resources Content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalHelpResourcesContent"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/internal_help_resources_enabled":{"get":{"tags":["Config"],"operationId":"internal_help_resources","summary":"Get Internal Help Resources","description":"### Get and set the options for internal help resources\n","responses":{"200":{"description":"Internal Help Resources","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalHelpResources"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/internal_help_resources":{"patch":{"tags":["Config"],"operationId":"update_internal_help_resources","summary":"Update internal help resources configuration","description":"Update internal help resources settings\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalHelpResources"}}},"description":"Custom Welcome Email","required":true},"responses":{"200":{"description":"Custom Welcome Email","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalHelpResources"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/ldap_config":{"get":{"tags":["Auth"],"operationId":"ldap_config","summary":"Get LDAP Configuration","description":"### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n","responses":{"200":{"description":"LDAP Configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LDAPConfig"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Auth"],"operationId":"update_ldap_config","summary":"Update LDAP Configuration","description":"### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n","requestBody":{"$ref":"#/components/requestBodies/LDAPConfig"},"responses":{"200":{"description":"New state for LDAP Configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LDAPConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/ldap_config/test_connection":{"put":{"tags":["Auth"],"operationId":"test_ldap_config_connection","summary":"Test LDAP Connection","description":"### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n","requestBody":{"$ref":"#/components/requestBodies/LDAPConfig"},"responses":{"200":{"description":"Result info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LDAPConfigTestResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/ldap_config/test_auth":{"put":{"tags":["Auth"],"operationId":"test_ldap_config_auth","summary":"Test LDAP Auth","description":"### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\n","requestBody":{"$ref":"#/components/requestBodies/LDAPConfig"},"responses":{"200":{"description":"Result info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LDAPConfigTestResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/ldap_config/test_user_info":{"put":{"tags":["Auth"],"operationId":"test_ldap_config_user_info","summary":"Test LDAP User Info","description":"### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user without needing to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full info for the user from the LDAP server without actually authenticating the user. So, user password is not required.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\n","requestBody":{"$ref":"#/components/requestBodies/LDAPConfig"},"responses":{"200":{"description":"Result info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LDAPConfigTestResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/ldap_config/test_user_auth":{"put":{"tags":["Auth"],"operationId":"test_ldap_config_user_auth","summary":"Test LDAP User Auth","description":"### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\n","requestBody":{"$ref":"#/components/requestBodies/LDAPConfig"},"responses":{"200":{"description":"Result info.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LDAPConfigTestResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/legacy_features":{"get":{"tags":["Config"],"operationId":"all_legacy_features","summary":"Get All Legacy Features","description":"### Get all legacy features.\n","responses":{"200":{"description":"Legacy Feature","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LegacyFeature"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/legacy_features/{legacy_feature_id}":{"get":{"tags":["Config"],"operationId":"legacy_feature","summary":"Get Legacy Feature","description":"### Get information about the legacy feature with a specific id.\n","parameters":[{"name":"legacy_feature_id","in":"path","description":"id of legacy feature","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Legacy Feature","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyFeature"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Config"],"operationId":"update_legacy_feature","summary":"Update Legacy Feature","description":"### Update information about the legacy feature with a specific id.\n","parameters":[{"name":"legacy_feature_id","in":"path","description":"id of legacy feature","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyFeature"}}},"description":"Legacy Feature","required":true},"responses":{"200":{"description":"Legacy Feature","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyFeature"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/locales":{"get":{"tags":["Config"],"operationId":"all_locales","summary":"Get All Locales","description":"### Get a list of locales that Looker supports.\n","responses":{"200":{"description":"Locale","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Locale"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/looks":{"get":{"tags":["Look"],"operationId":"all_looks","summary":"Get All Looks","description":"### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Look","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Look"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Look"],"operationId":"create_look","summary":"Create Look","description":"### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/LookWithQuery"},"responses":{"200":{"description":"Look","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookWithQuery"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/looks/search":{"get":{"tags":["Look"],"operationId":"search_looks","summary":"Search Looks","description":"### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n","parameters":[{"name":"id","in":"query","description":"Match look id.","required":false,"schema":{"type":"string"}},{"name":"title","in":"query","description":"Match Look title.","required":false,"schema":{"type":"string"}},{"name":"description","in":"query","description":"Match Look description.","required":false,"schema":{"type":"string"}},{"name":"content_favorite_id","in":"query","description":"Select looks with a particular content favorite id","required":false,"schema":{"type":"string"}},{"name":"folder_id","in":"query","description":"Select looks in a particular folder.","required":false,"schema":{"type":"string"}},{"name":"user_id","in":"query","description":"Select looks created by a particular user.","required":false,"schema":{"type":"string"}},{"name":"view_count","in":"query","description":"Select looks with particular view_count value","required":false,"schema":{"type":"string"}},{"name":"deleted","in":"query","description":"Select soft-deleted looks","required":false,"schema":{"type":"boolean"}},{"name":"query_id","in":"query","description":"Select looks that reference a particular query by query_id","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"curate","in":"query","description":"Exclude items that exist only in personal spaces other than the users","required":false,"schema":{"type":"boolean"}},{"name":"last_viewed_at","in":"query","description":"Select looks based on when they were last viewed","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Requested page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Results per page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Number of results to return. (used with offset and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (used with limit and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"One or more fields to sort results by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :updated_at, :last_updater_id, :view_count, :favorite_count, :content_favorite_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :query_id]","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"looks","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Look"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/looks/{look_id}":{"get":{"tags":["Look"],"operationId":"look","summary":"Get Look","description":"### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n","parameters":[{"name":"look_id","in":"path","description":"Id of look","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Look","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookWithQuery"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Look"],"operationId":"update_look","summary":"Update Look","description":"### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nIn API 3.1 and later, you can pass `deleted: true` as a parameter to [search_looks()](#!/3.1/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n","parameters":[{"name":"look_id","in":"path","description":"Id of look","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/LookWithQuery"},"responses":{"200":{"description":"Look","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookWithQuery"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Look"],"operationId":"delete_look","summary":"Delete Look","description":"### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n","parameters":[{"name":"look_id","in":"path","description":"Id of look","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/looks/{look_id}/run/{result_format}":{"get":{"tags":["Look"],"operationId":"run_look","summary":"Run Look","description":"### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n","parameters":[{"name":"look_id","in":"path","description":"Id of look","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"result_format","in":"path","description":"Format of result","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Row limit (may override the limit in the saved query).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"apply_formatting","in":"query","description":"Apply model-specified formatting to each result.","required":false,"schema":{"type":"boolean"}},{"name":"apply_vis","in":"query","description":"Apply visualization options to results.","required":false,"schema":{"type":"boolean"}},{"name":"cache","in":"query","description":"Get results from cache if available.","required":false,"schema":{"type":"boolean"}},{"name":"image_width","in":"query","description":"Render width for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"image_height","in":"query","description":"Render height for image formats.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"generate_drill_links","in":"query","description":"Generate drill links (only applicable to 'json_detail' format.","required":false,"schema":{"type":"boolean"}},{"name":"force_production","in":"query","description":"Force use of production models even if the user is in development mode.","required":false,"schema":{"type":"boolean"}},{"name":"cache_only","in":"query","description":"Retrieve any results from cache even if the results have expired.","required":false,"schema":{"type":"boolean"}},{"name":"path_prefix","in":"query","description":"Prefix to use for drill links (url encoded).","required":false,"schema":{"type":"string"}},{"name":"rebuild_pdts","in":"query","description":"Rebuild PDTS used in query.","required":false,"schema":{"type":"boolean"}},{"name":"server_table_calcs","in":"query","description":"Perform table calculations on query results","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Look","content":{"text":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}},"image/png":{"schema":{"type":"string"}},"image/jpeg":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"text":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/png":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/looks/{look_id}/copy":{"post":{"tags":["Look"],"operationId":"copy_look","summary":"Copy Look","description":"### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n","parameters":[{"name":"look_id","in":"path","description":"Look id to copy.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"folder_id","in":"query","description":"Folder id to copy to.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Look","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookWithQuery"}}}},"201":{"description":"look","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Look"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/looks/{look_id}/move":{"patch":{"tags":["Look"],"operationId":"move_look","summary":"Move Look","description":"### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n","parameters":[{"name":"look_id","in":"path","description":"Look id to move.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"folder_id","in":"query","description":"Folder id to move to.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Look","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookWithQuery"}}}},"201":{"description":"look","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Look"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/lookml_models":{"get":{"tags":["LookmlModel"],"operationId":"all_lookml_models","summary":"Get All LookML Models","description":"### Get information about all lookml models.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return. (can be used with offset)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (Defaults to 0 if not set when limit is used)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"LookML Model","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModel"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["LookmlModel"],"operationId":"create_lookml_model","summary":"Create LookML Model","description":"### Create a lookml model using the specified configuration.\n","requestBody":{"$ref":"#/components/requestBodies/LookmlModel"},"responses":{"200":{"description":"LookML Model","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookmlModel"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/lookml_models/{lookml_model_name}":{"get":{"tags":["LookmlModel"],"operationId":"lookml_model","summary":"Get LookML Model","description":"### Get information about a lookml model.\n","parameters":[{"name":"lookml_model_name","in":"path","description":"Name of lookml model.","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"LookML Model","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookmlModel"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["LookmlModel"],"operationId":"update_lookml_model","summary":"Update LookML Model","description":"### Update a lookml model using the specified configuration.\n","parameters":[{"name":"lookml_model_name","in":"path","description":"Name of lookml model.","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/LookmlModel"},"responses":{"200":{"description":"LookML Model","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookmlModel"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["LookmlModel"],"operationId":"delete_lookml_model","summary":"Delete LookML Model","description":"### Delete a lookml model.\n","parameters":[{"name":"lookml_model_name","in":"path","description":"Name of lookml model.","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/lookml_models/{lookml_model_name}/explores/{explore_name}":{"get":{"tags":["LookmlModel"],"operationId":"lookml_model_explore","summary":"Get LookML Model Explore","description":"### Get information about a lookml model explore.\n","parameters":[{"name":"lookml_model_name","in":"path","description":"Name of lookml model.","required":true,"schema":{"type":"string"}},{"name":"explore_name","in":"path","description":"Name of explore.","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"LookML Model Explore","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookmlModelExplore"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/merge_queries/{merge_query_id}":{"get":{"tags":["Query"],"operationId":"merge_query","summary":"Get Merge Query","description":"### Get Merge Query\n\nReturns a merge query object given its id.\n","parameters":[{"name":"merge_query_id","in":"path","description":"Merge Query Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Merge Query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergeQuery"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/merge_queries":{"post":{"tags":["Query"],"operationId":"create_merge_query","summary":"Create Merge Query","description":"### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergeQuery"}}},"description":"Merge Query"},"responses":{"200":{"description":"Merge Query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergeQuery"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions":{"get":{"tags":["Metadata"],"operationId":"model_fieldname_suggestions","summary":"Model field name suggestions","description":"### Field name suggestions for a model and view\n\n","parameters":[{"name":"model_name","in":"path","description":"Name of model","required":true,"schema":{"type":"string"}},{"name":"view_name","in":"path","description":"Name of view","required":true,"schema":{"type":"string"}},{"name":"field_name","in":"path","description":"Name of field to use for suggestions","required":true,"schema":{"type":"string"}},{"name":"term","in":"query","description":"Search term","required":false,"schema":{"type":"string"}},{"name":"filters","in":"query","description":"Suggestion filters","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Model view field suggestions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelFieldSuggestions"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/models/{model_name}":{"get":{"tags":["Metadata"],"operationId":"get_model","summary":"Get a single model","description":"### Get a single model\n\n","parameters":[{"name":"model_name","in":"path","description":"Name of model","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"A Model","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Model"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/connections/{connection_name}/databases":{"get":{"tags":["Metadata"],"operationId":"connection_databases","summary":"List accessible databases to this connection","description":"### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Database names","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/connections/{connection_name}/features":{"get":{"tags":["Metadata"],"operationId":"connection_features","summary":"Metadata features supported by this connection","description":"### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Connection features","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionFeatures"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query","x-looker-rate-limited":true}},"/connections/{connection_name}/schemas":{"get":{"tags":["Metadata"],"operationId":"connection_schemas","summary":"Get schemas for a connection","description":"### Get the list of schemas and tables for a connection\n\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"database","in":"query","description":"For dialects that support multiple databases, optionally identify which to use","required":false,"schema":{"type":"string"}},{"name":"cache","in":"query","description":"True to use fetch from cache, false to load fresh","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Schemas for connection","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Schema"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/connections/{connection_name}/tables":{"get":{"tags":["Metadata"],"operationId":"connection_tables","summary":"Get tables for a connection","description":"### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Optional. Name of database to use for the query, only if applicable","required":false,"schema":{"type":"string"}},{"name":"schema_name","in":"query","description":"Optional. Return only tables for this schema","required":false,"schema":{"type":"string"}},{"name":"cache","in":"query","description":"True to fetch from cache, false to load fresh","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Schemas and tables for connection","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SchemaTables"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/connections/{connection_name}/columns":{"get":{"tags":["Metadata"],"operationId":"connection_columns","summary":"Get columns for a connection","description":"### Get the columns (and therefore also the tables) in a specific schema\n\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"database","in":"query","description":"For dialects that support multiple databases, optionally identify which to use","required":false,"schema":{"type":"string"}},{"name":"schema_name","in":"query","description":"Name of schema to use.","required":false,"schema":{"type":"string"}},{"name":"cache","in":"query","description":"True to fetch from cache, false to load fresh","required":false,"schema":{"type":"boolean"}},{"name":"table_limit","in":"query","description":"limits the tables per schema returned","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"table_names","in":"query","description":"only fetch columns for a given (comma-separated) list of tables","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Columns schema for connection","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SchemaColumns"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/connections/{connection_name}/search_columns":{"get":{"tags":["Metadata"],"operationId":"connection_search_columns","summary":"Search a connection for columns","description":"### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"column_name","in":"query","description":"Column name to find","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Column names matching search pattern","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ColumnSearch"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query","x-looker-rate-limited":true}},"/connections/{connection_name}/cost_estimate":{"post":{"tags":["Metadata"],"operationId":"connection_cost_estimate","summary":"Estimate costs for a connection","description":"### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n","parameters":[{"name":"connection_name","in":"path","description":"Name of connection","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCostEstimate"}}},"description":"SQL statement to estimate","required":true},"responses":{"200":{"description":"Connection cost estimates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostEstimate"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query","x-looker-rate-limited":true}},"/mobile/settings":{"get":{"tags":["Config"],"operationId":"mobile_settings","summary":"Get Mobile_Settings","description":"### Get all mobile settings.\n","responses":{"200":{"description":"Mobile_Settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MobileSettings"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/model_sets/search":{"get":{"tags":["Role"],"operationId":"search_model_sets","summary":"Search Model Sets","description":"### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match model set id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match model set name.","required":false,"schema":{"type":"string"}},{"name":"all_access","in":"query","description":"Match model sets by all_access status.","required":false,"schema":{"type":"boolean"}},{"name":"built_in","in":"query","description":"Match model sets by built_in status.","required":false,"schema":{"type":"boolean"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Model Set","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelSet"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/model_sets/{model_set_id}":{"get":{"tags":["Role"],"operationId":"model_set","summary":"Get Model Set","description":"### Get information about the model set with a specific id.\n","parameters":[{"name":"model_set_id","in":"path","description":"Id of model set","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Specified model set.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSet"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["Role"],"operationId":"delete_model_set","summary":"Delete Model Set","description":"### Delete the model set with a specific id.\n","parameters":[{"name":"model_set_id","in":"path","description":"id of model set","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Model set succssfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Role"],"operationId":"update_model_set","summary":"Update Model Set","description":"### Update information about the model set with a specific id.\n","parameters":[{"name":"model_set_id","in":"path","description":"id of model set","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"$ref":"#/components/requestBodies/ModelSet"},"responses":{"200":{"description":"New state for specified model set.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSet"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/model_sets":{"get":{"tags":["Role"],"operationId":"all_model_sets","summary":"Get All Model Sets","description":"### Get information about all model sets.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"All model sets.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelSet"}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["Role"],"operationId":"create_model_set","summary":"Create Model Set","description":"### Create a model set with the specified information. Model sets are used by Roles.\n","requestBody":{"$ref":"#/components/requestBodies/ModelSet"},"responses":{"200":{"description":"Newly created ModelSet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSet"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/oauth_client_apps":{"get":{"tags":["Auth"],"operationId":"all_oauth_client_apps","summary":"Get All OAuth Client Apps","description":"### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OAuth Client App","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OauthClientApp"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/oauth_client_apps/{client_guid}":{"get":{"tags":["Auth"],"operationId":"oauth_client_app","summary":"Get OAuth Client App","description":"### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n","parameters":[{"name":"client_guid","in":"path","description":"The unique id of this application","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OAuth Client App","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OauthClientApp"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Auth"],"operationId":"delete_oauth_client_app","summary":"Delete OAuth Client App","description":"### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\n### Note: this deletion cannot be undone.\n","parameters":[{"name":"client_guid","in":"path","description":"The unique id of this application","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Auth"],"operationId":"register_oauth_client_app","summary":"Register OAuth App","description":"### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n","parameters":[{"name":"client_guid","in":"path","description":"The unique id of this application","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/OauthClientApp"},"responses":{"200":{"description":"OAuth Client App","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OauthClientApp"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Auth"],"operationId":"update_oauth_client_app","summary":"Update OAuth App","description":"### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n","parameters":[{"name":"client_guid","in":"path","description":"The unique id of this application","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/OauthClientApp"},"responses":{"200":{"description":"OAuth Client App","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OauthClientApp"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/oauth_client_apps/{client_guid}/tokens":{"delete":{"tags":["Auth"],"operationId":"invalidate_tokens","summary":"Invalidate Tokens","description":"### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n","parameters":[{"name":"client_guid","in":"path","description":"The unique id of the application","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/oauth_client_apps/{client_guid}/users/{user_id}":{"post":{"tags":["Auth"],"operationId":"activate_app_user","summary":"Activate OAuth App User","description":"### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n","parameters":[{"name":"client_guid","in":"path","description":"The unique id of this application","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"path","description":"The id of the user to enable use of this app","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OAuth Client App","content":{"application/json":{"schema":{"type":"string"}}}},"204":{"description":"Deleted"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Auth"],"operationId":"deactivate_app_user","summary":"Deactivate OAuth App User","description":"### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n","parameters":[{"name":"client_guid","in":"path","description":"The unique id of this application","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"path","description":"The id of the user to enable use of this app","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/oidc_config":{"get":{"tags":["Auth"],"operationId":"oidc_config","summary":"Get OIDC Configuration","description":"### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n","responses":{"200":{"description":"OIDC Configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCConfig"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Auth"],"operationId":"update_oidc_config","summary":"Update OIDC Configuration","description":"### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCConfig"}}},"description":"OIDC Config","required":true},"responses":{"200":{"description":"New state for OIDC Configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/oidc_test_configs/{test_slug}":{"get":{"tags":["Auth"],"operationId":"oidc_test_config","summary":"Get OIDC Test Configuration","description":"### Get a OIDC test configuration by test_slug.\n","parameters":[{"name":"test_slug","in":"path","description":"Slug of test config","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OIDC test config.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCConfig"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Auth"],"operationId":"delete_oidc_test_config","summary":"Delete OIDC Test Configuration","description":"### Delete a OIDC test configuration.\n","parameters":[{"name":"test_slug","in":"path","description":"Slug of test config","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Test config succssfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/oidc_test_configs":{"post":{"tags":["Auth"],"operationId":"create_oidc_test_config","summary":"Create OIDC Test Configuration","description":"### Create a OIDC test configuration.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCConfig"}}},"description":"OIDC test config","required":true},"responses":{"200":{"description":"OIDC test config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/password_config":{"get":{"tags":["Auth"],"operationId":"password_config","summary":"Get Password Config","description":"### Get password config.\n","responses":{"200":{"description":"Password Config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Auth"],"operationId":"update_password_config","summary":"Update Password Config","description":"### Update password config.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordConfig"}}},"description":"Password Config","required":true},"responses":{"200":{"description":"Password Config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/password_config/force_password_reset_at_next_login_for_all_users":{"put":{"tags":["Auth"],"operationId":"force_password_reset_at_next_login_for_all_users","summary":"Force password reset","description":"### Force all credentials_email users to reset their login passwords upon their next login.\n","responses":{"200":{"description":"Password Config","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/permissions":{"get":{"tags":["Role"],"operationId":"all_permissions","summary":"Get All Permissions","description":"### Get all supported permissions.\n","responses":{"200":{"description":"Permission","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Permission"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/permission_sets/search":{"get":{"tags":["Role"],"operationId":"search_permission_sets","summary":"Search Permission Sets","description":"### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match permission set id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match permission set name.","required":false,"schema":{"type":"string"}},{"name":"all_access","in":"query","description":"Match permission sets by all_access status.","required":false,"schema":{"type":"boolean"}},{"name":"built_in","in":"query","description":"Match permission sets by built_in status.","required":false,"schema":{"type":"boolean"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Permission Set","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PermissionSet"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/permission_sets/{permission_set_id}":{"get":{"tags":["Role"],"operationId":"permission_set","summary":"Get Permission Set","description":"### Get information about the permission set with a specific id.\n","parameters":[{"name":"permission_set_id","in":"path","description":"Id of permission set","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Permission Set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionSet"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["Role"],"operationId":"delete_permission_set","summary":"Delete Permission Set","description":"### Delete the permission set with a specific id.\n","parameters":[{"name":"permission_set_id","in":"path","description":"Id of permission set","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Role"],"operationId":"update_permission_set","summary":"Update Permission Set","description":"### Update information about the permission set with a specific id.\n","parameters":[{"name":"permission_set_id","in":"path","description":"id of permission set","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"$ref":"#/components/requestBodies/PermissionSet"},"responses":{"200":{"description":"Permission Set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionSet"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/permission_sets":{"get":{"tags":["Role"],"operationId":"all_permission_sets","summary":"Get All Permission Sets","description":"### Get information about all permission sets.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Permission Set","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PermissionSet"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["Role"],"operationId":"create_permission_set","summary":"Create Permission Set","description":"### Create a permission set with the specified information. Permission sets are used by Roles.\n","requestBody":{"$ref":"#/components/requestBodies/PermissionSet"},"responses":{"200":{"description":"Permission Set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionSet"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/projects/{project_id}/deploy_ref_to_production":{"post":{"tags":["Project"],"operationId":"deploy_ref_to_production","summary":"Deploy Remote Branch or Ref to Production","description":"### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n","parameters":[{"name":"project_id","in":"path","description":"Id of project","required":true,"schema":{"type":"string"}},{"name":"branch","in":"query","description":"Branch to deploy to production","required":false,"schema":{"type":"string"}},{"name":"ref","in":"query","description":"Ref to deploy to production","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"type":"string"}}}},"204":{"description":"Returns 204 if project was successfully deployed to production, otherwise 400 with an error message"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/deploy_to_production":{"post":{"tags":["Project"],"operationId":"deploy_to_production","summary":"Deploy To Production","description":"### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n","parameters":[{"name":"project_id","in":"path","description":"Id of project","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"type":"string"}}}},"204":{"description":"Returns 204 if project was successfully deployed to production, otherwise 400 with an error message"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/reset_to_production":{"post":{"tags":["Project"],"operationId":"reset_project_to_production","summary":"Reset To Production","description":"### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n","parameters":[{"name":"project_id","in":"path","description":"Id of project","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"type":"string"}}}},"204":{"description":"Returns 204 if project was successfully reset, otherwise 400 with an error message"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/reset_to_remote":{"post":{"tags":["Project"],"operationId":"reset_project_to_remote","summary":"Reset To Remote","description":"### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n","parameters":[{"name":"project_id","in":"path","description":"Id of project","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"type":"string"}}}},"204":{"description":"Returns 204 if project was successfully reset, otherwise 400 with an error message"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects":{"get":{"tags":["Project"],"operationId":"all_projects","summary":"Get All Projects","description":"### Get All Projects\n\nReturns all projects visible to the current user\n","parameters":[{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Project"],"operationId":"create_project","summary":"Create Project","description":"### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n","requestBody":{"$ref":"#/components/requestBodies/Project"},"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}":{"get":{"tags":["Project"],"operationId":"project","summary":"Get Project","description":"### Get A Project\n\nReturns the project with the given project id\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Project"],"operationId":"update_project","summary":"Update Project","description":"### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/Project"},"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/manifest":{"get":{"tags":["Project"],"operationId":"manifest","summary":"Get Manifest","description":"### Get A Projects Manifest object\n\nReturns the project with the given project id\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Manifest","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manifest"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/git/deploy_key":{"post":{"tags":["Project"],"operationId":"create_git_deploy_key","summary":"Create Deploy Key","description":"### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"get":{"tags":["Project"],"operationId":"git_deploy_key","summary":"Git Deploy Key","description":"### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The text of the public key portion of the deploy_key","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/validate":{"post":{"tags":["Project"],"operationId":"validate_project","summary":"Validate Project","description":"### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project validation results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectValidation"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"get":{"tags":["Project"],"operationId":"project_validation_results","summary":"Cached Project Validation Results","description":"### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project validation results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectValidationCache"}}}},"204":{"description":"Deleted"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/current_workspace":{"get":{"tags":["Project"],"operationId":"project_workspace","summary":"Get Project Workspace","description":"### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project Workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectWorkspace"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/files":{"get":{"tags":["Project"],"operationId":"all_project_files","summary":"Get All Project Files","description":"### Get All Project Files\n\nReturns a list of the files in the project\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project File","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectFile"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/files/file":{"get":{"tags":["Project"],"operationId":"project_file","summary":"Get Project File","description":"### Get Project File Info\n\nReturns information about a file in the project\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"file_id","in":"query","description":"File Id","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project File","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectFile"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/git_connection_tests":{"get":{"tags":["Project"],"operationId":"all_git_connection_tests","summary":"Get All Git Connection Tests","description":"### Get All Git Connection Tests\n\ndev mode required.\n - Call `update_session` to select the 'dev' workspace.\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"remote_url","in":"query","description":"(Optional: leave blank for root project) The remote url for remote dependency to test.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Git Connection Test","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitConnectionTest"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/git_connection_tests/{test_id}":{"get":{"tags":["Project"],"operationId":"run_git_connection_test","summary":"Run Git Connection Test","description":"### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"test_id","in":"path","description":"Test Id","required":true,"schema":{"type":"string"}},{"name":"remote_url","in":"query","description":"(Optional: leave blank for root project) The remote url for remote dependency to test.","required":false,"schema":{"type":"string"}},{"name":"use_production","in":"query","description":"(Optional: leave blank for dev credentials) Whether to use git production credentials.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Git Connection Test Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitConnectionTestResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/lookml_tests":{"get":{"tags":["Project"],"operationId":"all_lookml_tests","summary":"Get All LookML Tests","description":"### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"file_id","in":"query","description":"File Id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"LookML Test","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LookmlTest"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/lookml_tests/run":{"get":{"tags":["Project"],"operationId":"run_lookml_test","summary":"Run LookML Test","description":"### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"file_id","in":"query","description":"File Name","required":false,"schema":{"type":"string"}},{"name":"test","in":"query","description":"Test Name","required":false,"schema":{"type":"string"}},{"name":"model","in":"query","description":"Model Name","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"LookML Test Results","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LookmlTestResult"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{project_id}/tag":{"post":{"tags":["Project"],"operationId":"tag_ref","summary":"Tag Ref","description":"### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n\nThis is an internal-only, undocumented route.\n","parameters":[{"name":"project_id","in":"path","description":"Project Id","required":true,"schema":{"type":"string"}},{"name":"commit_sha","in":"query","description":"(Optional): Commit Sha to Tag","required":false,"schema":{"type":"string"}},{"name":"tag_name","in":"query","description":"Tag Name","required":false,"schema":{"type":"string"}},{"name":"tag_message","in":"query","description":"(Optional): Tag Message","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/Project"},"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"204":{"description":"Returns 204 if tagging a ref was successful, otherwise 400 with an error message"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/render_tasks/looks/{look_id}/{result_format}":{"post":{"tags":["RenderTask"],"operationId":"create_look_render_task","summary":"Create Look Render Task","description":"### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n","parameters":[{"name":"look_id","in":"path","description":"Id of look to render","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"result_format","in":"path","description":"Output type: png, or jpg","required":true,"schema":{"type":"string"}},{"name":"width","in":"query","description":"Output width in pixels","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"height","in":"query","description":"Output height in pixels","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Render Task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderTask"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/render_tasks/queries/{query_id}/{result_format}":{"post":{"tags":["RenderTask"],"operationId":"create_query_render_task","summary":"Create Query Render Task","description":"### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n","parameters":[{"name":"query_id","in":"path","description":"Id of the query to render","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"result_format","in":"path","description":"Output type: png or jpg","required":true,"schema":{"type":"string"}},{"name":"width","in":"query","description":"Output width in pixels","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"height","in":"query","description":"Output height in pixels","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Render Task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderTask"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/render_tasks/dashboards/{dashboard_id}/{result_format}":{"post":{"tags":["RenderTask"],"operationId":"create_dashboard_render_task","summary":"Create Dashboard Render Task","description":"### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n","parameters":[{"name":"dashboard_id","in":"path","description":"Id of dashboard to render. The ID can be a LookML dashboard also.","required":true,"schema":{"type":"string"}},{"name":"result_format","in":"path","description":"Output type: pdf, png, or jpg","required":true,"schema":{"type":"string"}},{"name":"width","in":"query","description":"Output width in pixels","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"height","in":"query","description":"Output height in pixels","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"pdf_paper_size","in":"query","description":"Paper size for pdf. Value can be one of: [\"letter\",\"legal\",\"tabloid\",\"a0\",\"a1\",\"a2\",\"a3\",\"a4\",\"a5\"]","required":false,"schema":{"type":"string"}},{"name":"pdf_landscape","in":"query","description":"Whether to render pdf in landscape paper orientation","required":false,"schema":{"type":"boolean"}},{"name":"long_tables","in":"query","description":"Whether or not to expand table vis to full length","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDashboardRenderTask"}}},"description":"Dashboard render task parameters","required":true},"responses":{"200":{"description":"Render Task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderTask"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/render_tasks/{render_task_id}":{"get":{"tags":["RenderTask"],"operationId":"render_task","summary":"Get Render Task","description":"### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n","parameters":[{"name":"render_task_id","in":"path","description":"Id of render task","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Render Task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderTask"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/render_tasks/{render_task_id}/results":{"get":{"tags":["RenderTask"],"operationId":"render_task_results","summary":"Render Task Results","description":"### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n","parameters":[{"name":"render_task_id","in":"path","description":"Id of render task","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Document or image","content":{"image/jpeg":{"schema":{"type":"string"}},"image/png":{"schema":{"type":"string"}},"application/pdf":{"schema":{"type":"string"}}}},"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"application/pdf":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"application/pdf":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/projects/{root_project_id}/credential/{credential_id}":{"put":{"tags":["Project"],"operationId":"update_repository_credential","summary":"Create Repository Credential","description":"### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n","parameters":[{"name":"root_project_id","in":"path","description":"Root Project Id","required":true,"schema":{"type":"string"}},{"name":"credential_id","in":"path","description":"Credential Id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryCredential"}}},"description":"Remote Project Information","required":true},"responses":{"200":{"description":"Repository Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryCredential"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Project"],"operationId":"delete_repository_credential","summary":"Delete Repository Credential","description":"### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n","parameters":[{"name":"root_project_id","in":"path","description":"Root Project Id","required":true,"schema":{"type":"string"}},{"name":"credential_id","in":"path","description":"Credential Id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/projects/{root_project_id}/credentials":{"get":{"tags":["Project"],"operationId":"get_all_repository_credentials","summary":"Get All Repository Credentials","description":"### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n","parameters":[{"name":"root_project_id","in":"path","description":"Root Project Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Repository Credential","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RepositoryCredential"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/roles":{"get":{"tags":["Role"],"operationId":"all_roles","summary":"Get All Roles","description":"### Get information about all roles.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"ids","in":"query","description":"Optional list of ids to get specific roles.","required":false,"style":"form","explode":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"200":{"description":"Role","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Role"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["Role"],"operationId":"create_role","summary":"Create Role","description":"### Create a role with the specified information.\n","requestBody":{"$ref":"#/components/requestBodies/Role"},"responses":{"200":{"description":"Role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/roles/search":{"get":{"tags":["Role"],"operationId":"search_roles","summary":"Search Roles","description":"### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match role id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match role name.","required":false,"schema":{"type":"string"}},{"name":"built_in","in":"query","description":"Match roles by built_in status.","required":false,"schema":{"type":"boolean"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Role","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Role"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/roles/search/with_user_count":{"get":{"tags":["Role"],"operationId":"search_roles_with_user_count","summary":"Search Roles with User Count","description":"### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match role id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match role name.","required":false,"schema":{"type":"string"}},{"name":"built_in","in":"query","description":"Match roles by built_in status.","required":false,"schema":{"type":"boolean"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Role","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RoleSearch"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/roles/{role_id}":{"get":{"tags":["Role"],"operationId":"role","summary":"Get Role","description":"### Get information about the role with a specific id.\n","parameters":[{"name":"role_id","in":"path","description":"id of role","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["Role"],"operationId":"delete_role","summary":"Delete Role","description":"### Delete the role with a specific id.\n","parameters":[{"name":"role_id","in":"path","description":"id of role","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Role"],"operationId":"update_role","summary":"Update Role","description":"### Update information about the role with a specific id.\n","parameters":[{"name":"role_id","in":"path","description":"id of role","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"$ref":"#/components/requestBodies/Role"},"responses":{"200":{"description":"Role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/roles/{role_id}/groups":{"get":{"tags":["Role"],"operationId":"role_groups","summary":"Get Role Groups","description":"### Get information about all the groups with the role that has a specific id.\n","parameters":[{"name":"role_id","in":"path","description":"id of role","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Groups with role.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Group"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"put":{"tags":["Role"],"operationId":"set_role_groups","summary":"Update Role Groups","description":"### Set all groups for a role, removing all existing group associations from that role.\n","parameters":[{"name":"role_id","in":"path","description":"Id of Role","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}},"description":"Array of Group Ids","required":true},"responses":{"200":{"description":"Groups with role.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Group"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/roles/{role_id}/users":{"get":{"tags":["Role"],"operationId":"role_users","summary":"Get Role Users","description":"### Get information about all the users with the role that has a specific id.\n","parameters":[{"name":"role_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"direct_association_only","in":"query","description":"Get only users associated directly with the role: exclude those only associated through groups.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Users with role.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"put":{"tags":["Role"],"operationId":"set_role_users","summary":"Update Role Users","description":"### Set all the users of the role with a specific id.\n","parameters":[{"name":"role_id","in":"path","description":"id of role","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}},"description":"array of user ids for role","required":true},"responses":{"200":{"description":"Users with role.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Resource Can't Be Modified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/running_queries":{"get":{"tags":["Query"],"operationId":"all_running_queries","summary":"Get All Running Queries","description":"Get information about all running queries.\n","responses":{"200":{"description":"Running Queries.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RunningQueries"}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/running_queries/{query_task_id}":{"delete":{"tags":["Query"],"operationId":"kill_query","summary":"Kill Running Query","description":"Kill a query with a specific query_task_id.\n","parameters":[{"name":"query_task_id","in":"path","description":"Query task id.","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Query successfully killed.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"db_query"}},"/saml_config":{"get":{"tags":["Auth"],"operationId":"saml_config","summary":"Get SAML Configuration","description":"### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n","responses":{"200":{"description":"SAML Configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlConfig"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["Auth"],"operationId":"update_saml_config","summary":"Update SAML Configuration","description":"### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlConfig"}}},"description":"SAML Config","required":true},"responses":{"200":{"description":"New state for SAML Configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/saml_test_configs/{test_slug}":{"get":{"tags":["Auth"],"operationId":"saml_test_config","summary":"Get SAML Test Configuration","description":"### Get a SAML test configuration by test_slug.\n","parameters":[{"name":"test_slug","in":"path","description":"Slug of test config","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SAML test config.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlConfig"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["Auth"],"operationId":"delete_saml_test_config","summary":"Delete SAML Test Configuration","description":"### Delete a SAML test configuration.\n","parameters":[{"name":"test_slug","in":"path","description":"Slug of test config","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Test config succssfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/saml_test_configs":{"post":{"tags":["Auth"],"operationId":"create_saml_test_config","summary":"Create SAML Test Configuration","description":"### Create a SAML test configuration.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlConfig"}}},"description":"SAML test config","required":true},"responses":{"200":{"description":"SAML test config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/parse_saml_idp_metadata":{"post":{"tags":["Auth"],"operationId":"parse_saml_idp_metadata","summary":"Parse SAML IdP XML","description":"### Parse the given xml as a SAML IdP metadata document and return the result.\n","requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"SAML IdP metadata xml","required":true},"responses":{"200":{"description":"Parse result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlMetadataParseResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/fetch_and_parse_saml_idp_metadata":{"post":{"tags":["Auth"],"operationId":"fetch_and_parse_saml_idp_metadata","summary":"Parse SAML IdP Url","description":"### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n","requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"SAML IdP metadata public url","required":true},"responses":{"200":{"description":"Parse result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlMetadataParseResult"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/scheduled_plans/space/{space_id}":{"get":{"tags":["ScheduledPlan"],"operationId":"scheduled_plans_for_space","summary":"Scheduled Plans for Space","description":"### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n","parameters":[{"name":"space_id","in":"path","description":"Space Id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledPlan"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/scheduled_plans/{scheduled_plan_id}":{"delete":{"tags":["ScheduledPlan"],"operationId":"delete_scheduled_plan","summary":"Delete Scheduled Plan","description":"### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n","parameters":[{"name":"scheduled_plan_id","in":"path","description":"Scheduled Plan Id","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"},"patch":{"tags":["ScheduledPlan"],"operationId":"update_scheduled_plan","summary":"Update Scheduled Plan","description":"### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n","parameters":[{"name":"scheduled_plan_id","in":"path","description":"Scheduled Plan Id","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"$ref":"#/components/requestBodies/ScheduledPlan"},"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledPlan"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"},"get":{"tags":["ScheduledPlan"],"operationId":"scheduled_plan","summary":"Get Scheduled Plan","description":"### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n","parameters":[{"name":"scheduled_plan_id","in":"path","description":"Scheduled Plan Id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledPlan"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/scheduled_plans":{"post":{"tags":["ScheduledPlan"],"operationId":"create_scheduled_plan","summary":"Create Scheduled Plan","description":"### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://looker.com/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n","requestBody":{"$ref":"#/components/requestBodies/ScheduledPlan"},"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledPlan"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"},"get":{"tags":["ScheduledPlan"],"operationId":"all_scheduled_plans","summary":"Get All Scheduled Plans","description":"### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n","parameters":[{"name":"user_id","in":"query","description":"Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Comma delimited list of field names. If provided, only the fields specified will be included in the response","required":false,"schema":{"type":"string"}},{"name":"all_users","in":"query","description":"Return scheduled plans belonging to all users (caller needs see_schedules permission)","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledPlan"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/scheduled_plans/run_once":{"post":{"tags":["ScheduledPlan"],"operationId":"scheduled_plan_run_once","summary":"Run Scheduled Plan Once","description":"### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n","requestBody":{"$ref":"#/components/requestBodies/ScheduledPlan"},"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledPlan"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query","x-looker-rate-limited":true}},"/scheduled_plans/look/{look_id}":{"get":{"tags":["ScheduledPlan"],"operationId":"scheduled_plans_for_look","summary":"Scheduled Plans for Look","description":"### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n","parameters":[{"name":"look_id","in":"path","description":"Look Id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"user_id","in":"query","description":"User Id (default is requesting user if not specified)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"all_users","in":"query","description":"Return scheduled plans belonging to all users for the look","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledPlan"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/scheduled_plans/dashboard/{dashboard_id}":{"get":{"tags":["ScheduledPlan"],"operationId":"scheduled_plans_for_dashboard","summary":"Scheduled Plans for Dashboard","description":"### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n","parameters":[{"name":"dashboard_id","in":"path","description":"Dashboard Id","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"user_id","in":"query","description":"User Id (default is requesting user if not specified)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"all_users","in":"query","description":"Return scheduled plans belonging to all users for the dashboard","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledPlan"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}":{"get":{"tags":["ScheduledPlan"],"operationId":"scheduled_plans_for_lookml_dashboard","summary":"Scheduled Plans for LookML Dashboard","description":"### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n","parameters":[{"name":"lookml_dashboard_id","in":"path","description":"LookML Dashboard Id","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"query","description":"User Id (default is requesting user if not specified)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"all_users","in":"query","description":"Return scheduled plans belonging to all users for the dashboard","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledPlan"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/scheduled_plans/{scheduled_plan_id}/run_once":{"post":{"tags":["ScheduledPlan"],"operationId":"scheduled_plan_run_once_by_id","summary":"Run Scheduled Plan Once by Id","description":"### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n","parameters":[{"name":"scheduled_plan_id","in":"path","description":"Id of schedule plan to copy and run","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteScheduledPlan"}}},"description":"Property values to apply to the newly copied scheduled plan before running it"},"responses":{"200":{"description":"Scheduled Plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledPlan"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query","x-looker-rate-limited":true}},"/session_config":{"get":{"tags":["Auth"],"operationId":"session_config","summary":"Get Session Config","description":"### Get session config.\n","responses":{"200":{"description":"Session Config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Auth"],"operationId":"update_session_config","summary":"Update Session Config","description":"### Update session config.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionConfig"}}},"description":"Session Config","required":true},"responses":{"200":{"description":"Session Config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionConfig"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/session":{"get":{"tags":["Session"],"operationId":"session","summary":"Get Session","description":"### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n","responses":{"200":{"description":"Session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSession"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Session"],"operationId":"update_session","summary":"Update Session","description":"### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSession"}}},"description":"Session","required":true},"responses":{"200":{"description":"Session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSession"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/setting":{"patch":{"tags":["Config"],"operationId":"set_setting","summary":"Set Setting","description":"### Configure Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n\nSee the `Setting` type for more information on the specific values that can be configured.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}},"description":"Looker Setting Configuration","required":true},"responses":{"200":{"description":"Looker Settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"get":{"tags":["Config"],"operationId":"get_setting","summary":"Get Setting","description":"### Get Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Looker Settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setting"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/search":{"get":{"tags":["Folder"],"operationId":"search_folders","summary":"Search Folders","description":"Search for folders by creator id, parent id, name, etc","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Requested page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Results per page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Number of results to return. (used with offset and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (used with limit and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Match Space title.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match Space id","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"parent_id","in":"query","description":"Filter on a children of a particular folder.","required":false,"schema":{"type":"string"}},{"name":"creator_id","in":"query","description":"Filter on folder created by a particular user.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}},{"name":"is_shared_root","in":"query","description":"Match is shared root","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"folders","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/{folder_id}":{"get":{"tags":["Folder"],"operationId":"folder","summary":"Get Folder","description":"### Get information about the folder with a specific id.","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folder","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Folder"],"operationId":"delete_folder","summary":"Delete Folder","description":"### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Folder"],"operationId":"update_folder","summary":"Update Folder","description":"### Update the folder with a specific id.","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFolder"}}},"description":"Folder parameters","required":true},"responses":{"200":{"description":"Folder","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders":{"get":{"tags":["Folder"],"operationId":"all_folders","summary":"Get All Folders","description":"### Get information about all folders.\n\nIn API 3.x, this will not return empty personal folders, unless they belong to the calling user.\nIn API 4.0+, all personal folders will be returned.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folder","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Folder"],"operationId":"create_folder","summary":"Create Folder","description":"### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFolder"}}},"description":"Folder parameters","required":true},"responses":{"200":{"description":"Folder","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/{folder_id}/children":{"get":{"tags":["Folder"],"operationId":"folder_children","summary":"Get Folder Children","description":"### Get the children of a folder.","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Requested page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Results per page.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folders","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/{folder_id}/children/search":{"get":{"tags":["Folder"],"operationId":"folder_children_search","summary":"Search Folder Children","description":"### Search the children of a folder","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Match folder name.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folders","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/{folder_id}/parent":{"get":{"tags":["Folder"],"operationId":"folder_parent","summary":"Get Folder Parent","description":"### Get the parent of a folder","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folder","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/{folder_id}/ancestors":{"get":{"tags":["Folder"],"operationId":"folder_ancestors","summary":"Get Folder Ancestors","description":"### Get the ancestors of a folder","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Folders","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/{folder_id}/looks":{"get":{"tags":["Folder"],"operationId":"folder_looks","summary":"Get Folder Looks","description":"### Get all looks in a folder.\nIn API 3.x, this will return all looks in a folder, including looks in the trash.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Looks","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LookWithQuery"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/folders/{folder_id}/dashboards":{"get":{"tags":["Folder"],"operationId":"folder_dashboards","summary":"Get Folder Dashboards","description":"### Get the dashboards in a folder","parameters":[{"name":"folder_id","in":"path","description":"Id of folder","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Dashboard"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/sql_queries/{slug}":{"get":{"tags":["Query"],"operationId":"sql_query","summary":"Get SQL Runner Query","description":"Get a SQL Runner query.","parameters":[{"name":"slug","in":"path","description":"slug of query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SQL Runner Query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqlQuery"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/sql_queries":{"post":{"tags":["Query"],"operationId":"create_sql_query","summary":"Create SQL Runner Query","description":"### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqlQueryCreate"}}},"description":"SQL Runner Query","required":true},"responses":{"200":{"description":"SQL Runner Query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqlQuery"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/sql_queries/{slug}/run/{result_format}":{"post":{"tags":["Query"],"operationId":"run_sql_query","summary":"Run SQL Runner Query","description":"Execute a SQL Runner query in a given result_format.","parameters":[{"name":"slug","in":"path","description":"slug of query","required":true,"schema":{"type":"string"}},{"name":"result_format","in":"path","description":"Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"json_label\"]","required":true,"schema":{"type":"string"}},{"name":"download","in":"query","description":"Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"SQL Runner Query","content":{"text":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}},"image/png":{"schema":{"type":"string"}},"image/jpeg":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"text":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/png":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"text":{"schema":{"$ref":"#/components/schemas/Error"}},"application/json":{"schema":{"$ref":"#/components/schemas/Error"}},"image/png":{"schema":{"$ref":"#/components/schemas/Error"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"db_query"}},"/themes":{"get":{"tags":["Theme"],"operationId":"all_themes","summary":"Get All Themes","description":"### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Themes","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Theme"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Theme"],"operationId":"create_theme","summary":"Create Theme","description":"### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://looker.com/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","requestBody":{"$ref":"#/components/requestBodies/Theme"},"responses":{"200":{"description":"Theme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Theme"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/themes/search":{"get":{"tags":["Theme"],"operationId":"search_themes","summary":"Search Themes","description":"### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","parameters":[{"name":"id","in":"query","description":"Match theme id.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Match theme name.","required":false,"schema":{"type":"string"}},{"name":"begin_at","in":"query","description":"Timestamp for activation.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"end_at","in":"query","description":"Timestamp for expiration.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","description":"Number of results to return (used with `offset`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any (used with `limit`).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Themes","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Theme"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/themes/default":{"get":{"tags":["Theme"],"operationId":"default_theme","summary":"Get Default Theme","description":"### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n","parameters":[{"name":"ts","in":"query","description":"Timestamp representing the target datetime for the active period. Defaults to 'now'","required":false,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Theme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Theme"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"put":{"tags":["Theme"],"operationId":"set_default_theme","summary":"Set Default Theme","description":"### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","parameters":[{"name":"name","in":"query","description":"Name of theme to set as default","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Theme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Theme"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/themes/active":{"get":{"tags":["Theme"],"operationId":"active_themes","summary":"Get Active Themes","description":"### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n\n","parameters":[{"name":"name","in":"query","description":"Name of theme","required":false,"schema":{"type":"string"}},{"name":"ts","in":"query","description":"Timestamp representing the target datetime for the active period. Defaults to 'now'","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Themes","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Theme"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/themes/theme_or_default":{"get":{"tags":["Theme"],"operationId":"theme_or_default","summary":"Get Theme or Default","description":"### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","parameters":[{"name":"name","in":"query","description":"Name of theme","required":true,"schema":{"type":"string"}},{"name":"ts","in":"query","description":"Timestamp representing the target datetime for the active period. Defaults to 'now'","required":false,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Theme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Theme"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/themes/validate":{"post":{"tags":["Theme"],"operationId":"validate_theme","summary":"Validate Theme","description":"### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","requestBody":{"$ref":"#/components/requestBodies/Theme"},"responses":{"200":{"description":"Theme validation results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"204":{"description":"No errors detected with the theme","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/themes/{theme_id}":{"get":{"tags":["Theme"],"operationId":"theme","summary":"Get Theme","description":"### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","parameters":[{"name":"theme_id","in":"path","description":"Id of theme","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Theme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Theme"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Theme"],"operationId":"update_theme","summary":"Update Theme","description":"### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","parameters":[{"name":"theme_id","in":"path","description":"Id of theme","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"$ref":"#/components/requestBodies/Theme"},"responses":{"200":{"description":"Theme","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Theme"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Theme"],"operationId":"delete_theme","summary":"Delete Theme","description":"### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n","parameters":[{"name":"theme_id","in":"path","description":"Id of theme","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/timezones":{"get":{"tags":["Config"],"operationId":"all_timezones","summary":"Get All Timezones","description":"### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n","responses":{"200":{"description":"Timezone","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Timezone"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/ssh_servers":{"get":{"tags":["Connection"],"operationId":"all_ssh_servers","summary":"Get All SSH Servers","description":"### Get information about all SSH Servers.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"SSH Server","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SshServer"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Connection"],"operationId":"create_ssh_server","summary":"Create SSH Server","description":"### Create an SSH Server.\n","requestBody":{"$ref":"#/components/requestBodies/SshServer"},"responses":{"200":{"description":"SSH Server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshServer"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/ssh_server/{ssh_server_id}":{"get":{"tags":["Connection"],"operationId":"ssh_server","summary":"Get SSH Server","description":"### Get information about an SSH Server.\n","parameters":[{"name":"ssh_server_id","in":"path","description":"Id of SSH Server","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SSH Server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshServer"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Connection"],"operationId":"update_ssh_server","summary":"Update SSH Server","description":"### Update an SSH Server.\n","parameters":[{"name":"ssh_server_id","in":"path","description":"Id of SSH Server","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/SshServer"},"responses":{"200":{"description":"SSH Server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshServer"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Connection"],"operationId":"delete_ssh_server","summary":"Delete SSH Server","description":"### Delete an SSH Server.\n","parameters":[{"name":"ssh_server_id","in":"path","description":"Id of SSH Server","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/ssh_server/{ssh_server_id}/test":{"get":{"tags":["Connection"],"operationId":"test_ssh_server","summary":"Test SSH Server","description":"### Test the SSH Server\n","parameters":[{"name":"ssh_server_id","in":"path","description":"Id of SSH Server","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Test SSH Server","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshServer"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/ssh_tunnels":{"get":{"tags":["Connection"],"operationId":"all_ssh_tunnels","summary":"Get All SSH Tunnels","description":"### Get information about all SSH Tunnels.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"SSH Tunnel","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SshTunnel"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["Connection"],"operationId":"create_ssh_tunnel","summary":"Create SSH Tunnel","description":"### Create an SSH Tunnel\n","requestBody":{"$ref":"#/components/requestBodies/SshTunnel"},"responses":{"200":{"description":"SSH Tunnel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshTunnel"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/ssh_tunnel/{ssh_tunnel_id}":{"get":{"tags":["Connection"],"operationId":"ssh_tunnel","summary":"Get SSH Tunnel","description":"### Get information about an SSH Tunnel.\n","parameters":[{"name":"ssh_tunnel_id","in":"path","description":"Id of SSH Tunnel","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SSH Tunnel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshTunnel"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"patch":{"tags":["Connection"],"operationId":"update_ssh_tunnel","summary":"Update SSH Tunnel","description":"### Update an SSH Tunnel\n","parameters":[{"name":"ssh_tunnel_id","in":"path","description":"Id of SSH Tunnel","required":true,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/SshTunnel"},"responses":{"200":{"description":"SSH Tunnel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshTunnel"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"delete":{"tags":["Connection"],"operationId":"delete_ssh_tunnel","summary":"Delete SSH Tunnel","description":"### Delete an SSH Tunnel\n","parameters":[{"name":"ssh_tunnel_id","in":"path","description":"Id of SSH Tunnel","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/ssh_tunnel/{ssh_tunnel_id}/test":{"get":{"tags":["Connection"],"operationId":"test_ssh_tunnel","summary":"Test SSH Tunnel","description":"### Test the SSH Tunnel\n","parameters":[{"name":"ssh_tunnel_id","in":"path","description":"Id of SSH Tunnel","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Test SSH Tunnel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshTunnel"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/ssh_public_key":{"get":{"tags":["Connection"],"operationId":"ssh_public_key","summary":"Get SSH Public Key","description":"### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n","responses":{"200":{"description":"SSH Public Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshPublicKey"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/user_attributes":{"get":{"tags":["UserAttribute"],"operationId":"all_user_attributes","summary":"Get All User Attributes","description":"### Get information about all user attributes.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"sorts","in":"query","description":"Fields to order the results by. Sortable fields include: name, label","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"User Attribute","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAttribute"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["UserAttribute"],"operationId":"create_user_attribute","summary":"Create User Attribute","description":"### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/UserAttribute"},"responses":{"200":{"description":"User Attribute","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttribute"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/user_attributes/{user_attribute_id}":{"get":{"tags":["UserAttribute"],"operationId":"user_attribute","summary":"Get User Attribute","description":"### Get information about a user attribute.\n","parameters":[{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"User Attribute","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttribute"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["UserAttribute"],"operationId":"update_user_attribute","summary":"Update User Attribute","description":"### Update a user attribute definition.\n","parameters":[{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/UserAttribute"},"responses":{"200":{"description":"User Attribute","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttribute"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["UserAttribute"],"operationId":"delete_user_attribute","summary":"Delete User Attribute","description":"### Delete a user attribute (admin only).\n","parameters":[{"name":"user_attribute_id","in":"path","description":"Id of user_attribute","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/user_attributes/{user_attribute_id}/group_values":{"get":{"tags":["UserAttribute"],"operationId":"all_user_attribute_group_values","summary":"Get User Attribute Group Values","description":"### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n","parameters":[{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"All group values for attribute.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAttributeGroupValue"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["UserAttribute"],"operationId":"set_user_attribute_group_values","summary":"Set User Attribute Group Values","description":"### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n","parameters":[{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAttributeGroupValue"}}}},"description":"Array of group values.","required":true},"responses":{"200":{"description":"Array of group values.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAttributeGroupValue"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/user_login_lockouts":{"get":{"tags":["Auth"],"operationId":"all_user_login_lockouts","summary":"Get All User Login Lockouts","description":"### Get currently locked-out users.\n","parameters":[{"name":"fields","in":"query","description":"Include only these fields in the response","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"User Login Lockout","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserLoginLockout"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/user_login_lockouts/search":{"get":{"tags":["Auth"],"operationId":"search_user_login_lockouts","summary":"Search User Login Lockouts","description":"### Search currently locked-out users.\n","parameters":[{"name":"fields","in":"query","description":"Include only these fields in the response","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Return only page N of paginated results","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"Return N rows of data per page","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"auth_type","in":"query","description":"Auth type user is locked out for (email, ldap, totp, api)","required":false,"schema":{"type":"string"}},{"name":"full_name","in":"query","description":"Match name","required":false,"schema":{"type":"string"}},{"name":"email","in":"query","description":"Match email","required":false,"schema":{"type":"string"}},{"name":"remote_id","in":"query","description":"Match remote LDAP ID","required":false,"schema":{"type":"string"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"User Login Lockout","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserLoginLockout"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/user_login_lockout/{key}":{"delete":{"tags":["Auth"],"operationId":"delete_user_login_lockout","summary":"Delete User Login Lockout","description":"### Removes login lockout for the associated user.\n","parameters":[{"name":"key","in":"path","description":"The key associated with the locked user","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/user":{"get":{"tags":["User"],"operationId":"me","summary":"Get Current User","description":"### Get information about the current user; i.e. the user account currently calling the API.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users":{"get":{"tags":["User"],"operationId":"all_users","summary":"Get All Users","description":"### Get information about all users.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"DEPRECATED. Use limit and offset instead. Return only page N of paginated results","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"DEPRECATED. Use limit and offset instead. Return N rows of data per page","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Number of results to return. (used with offset and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (used with limit and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"ids","in":"query","description":"Optional list of ids to get specific users.","required":false,"style":"form","explode":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}],"responses":{"200":{"description":"All users.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"},"post":{"tags":["User"],"operationId":"create_user","summary":"Create User","description":"### Create a user with the specified information.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"User"},"responses":{"200":{"description":"Created User","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/search":{"get":{"tags":["User"],"operationId":"search_users","summary":"Search Users","description":"### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n","parameters":[{"name":"fields","in":"query","description":"Include only these fields in the response","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"DEPRECATED. Use limit and offset instead. Return only page N of paginated results","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"DEPRECATED. Use limit and offset instead. Return N rows of data per page","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Number of results to return. (used with offset and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (used with limit and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match User Id.","required":false,"schema":{"type":"string"}},{"name":"first_name","in":"query","description":"Match First name.","required":false,"schema":{"type":"string"}},{"name":"last_name","in":"query","description":"Match Last name.","required":false,"schema":{"type":"string"}},{"name":"verified_looker_employee","in":"query","description":"Search for user accounts associated with Looker employees","required":false,"schema":{"type":"boolean"}},{"name":"embed_user","in":"query","description":"Search for only embed users","required":false,"schema":{"type":"boolean"}},{"name":"email","in":"query","description":"Search for the user with this email address","required":false,"schema":{"type":"string"}},{"name":"is_disabled","in":"query","description":"Search for disabled user accounts","required":false,"schema":{"type":"boolean"}},{"name":"filter_or","in":"query","description":"Combine given search criteria in a boolean OR expression","required":false,"schema":{"type":"boolean"}},{"name":"content_metadata_id","in":"query","description":"Search for users who have access to this content_metadata item","required":false,"schema":{"type":"string"}},{"name":"group_id","in":"query","description":"Search for users who are direct members of this group","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Matching users.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/users/search/names/{pattern}":{"get":{"tags":["User"],"operationId":"search_users_names","summary":"Search User Names","description":"### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n","parameters":[{"name":"pattern","in":"path","description":"Pattern to match","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Include only these fields in the response","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"DEPRECATED. Use limit and offset instead. Return only page N of paginated results","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"per_page","in":"query","description":"DEPRECATED. Use limit and offset instead. Return N rows of data per page","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Number of results to return. (used with offset and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of results to skip before returning any. (used with limit and takes priority over page and per_page)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sorts","in":"query","description":"Fields to sort by","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Match User Id","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"first_name","in":"query","description":"Match First name","required":false,"schema":{"type":"string"}},{"name":"last_name","in":"query","description":"Match Last name","required":false,"schema":{"type":"string"}},{"name":"verified_looker_employee","in":"query","description":"Match Verified Looker employee","required":false,"schema":{"type":"boolean"}},{"name":"email","in":"query","description":"Match Email Address","required":false,"schema":{"type":"string"}},{"name":"is_disabled","in":"query","description":"Include or exclude disabled accounts in the results","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Matching users.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/users/{user_id}":{"get":{"tags":["User"],"operationId":"user","summary":"Get User by Id","description":"### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Specified user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["User"],"operationId":"update_user","summary":"Update User","description":"### Update information about the user with a specific id.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"User","required":true},"responses":{"200":{"description":"New state for specified user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user","summary":"Delete User","description":"### Delete the user with a specific id.\n\n**DANGER** this will delete the user and all looks and other information owned by the user.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"User successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Permission Denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/credential/{credential_type}/{credential_id}":{"get":{"tags":["User"],"operationId":"user_for_credential","summary":"Get User by Credential Id","description":"### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\n","parameters":[{"name":"credential_type","in":"path","description":"Type name of credential","required":true,"schema":{"type":"string"}},{"name":"credential_id","in":"path","description":"Id of credential","required":true,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Specified user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_email":{"get":{"tags":["User"],"operationId":"user_credentials_email","summary":"Get Email/Password Credential","description":"### Email/password login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Email/Password Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEmail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["User"],"operationId":"create_user_credentials_email","summary":"Create Email/Password Credential","description":"### Email/password login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/CredentialsEmail"},"responses":{"200":{"description":"Email/Password Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEmail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"patch":{"tags":["User"],"operationId":"update_user_credentials_email","summary":"Update Email/Password Credential","description":"### Email/password login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/CredentialsEmail"},"responses":{"200":{"description":"Email/Password Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEmail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_email","summary":"Delete Email/Password Credential","description":"### Email/password login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_totp":{"get":{"tags":["User"],"operationId":"user_credentials_totp","summary":"Get Two-Factor Credential","description":"### Two-factor login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Two-Factor Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsTotp"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["User"],"operationId":"create_user_credentials_totp","summary":"Create Two-Factor Credential","description":"### Two-factor login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsTotp"}}},"description":"Two-Factor Credential"},"responses":{"200":{"description":"Two-Factor Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsTotp"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_totp","summary":"Delete Two-Factor Credential","description":"### Two-factor login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_ldap":{"get":{"tags":["User"],"operationId":"user_credentials_ldap","summary":"Get LDAP Credential","description":"### LDAP login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"LDAP Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsLDAP"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_ldap","summary":"Delete LDAP Credential","description":"### LDAP login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_google":{"get":{"tags":["User"],"operationId":"user_credentials_google","summary":"Get Google Auth Credential","description":"### Google authentication login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Google Auth Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsGoogle"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_google","summary":"Delete Google Auth Credential","description":"### Google authentication login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_saml":{"get":{"tags":["User"],"operationId":"user_credentials_saml","summary":"Get Saml Auth Credential","description":"### Saml authentication login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Saml Auth Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsSaml"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_saml","summary":"Delete Saml Auth Credential","description":"### Saml authentication login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_oidc":{"get":{"tags":["User"],"operationId":"user_credentials_oidc","summary":"Get OIDC Auth Credential","description":"### OpenID Connect (OIDC) authentication login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OIDC Auth Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsOIDC"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_oidc","summary":"Delete OIDC Auth Credential","description":"### OpenID Connect (OIDC) authentication login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_api3/{credentials_api3_id}":{"get":{"tags":["User"],"operationId":"user_credentials_api3","summary":"Get API 3 Credential","description":"### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"credentials_api3_id","in":"path","description":"Id of API 3 Credential","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"API 3 Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsApi3"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_api3","summary":"Delete API 3 Credential","description":"### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"credentials_api3_id","in":"path","description":"id of API 3 Credential","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_api3":{"get":{"tags":["User"],"operationId":"all_user_credentials_api3s","summary":"Get All API 3 Credentials","description":"### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"API 3 Credential","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CredentialsApi3"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"post":{"tags":["User"],"operationId":"create_user_credentials_api3","summary":"Create API 3 Credential","description":"### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsApi3"}}},"description":"API 3 Credential"},"responses":{"200":{"description":"API 3 Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsApi3"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Resource Already Exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_embed/{credentials_embed_id}":{"get":{"tags":["User"],"operationId":"user_credentials_embed","summary":"Get Embedding Credential","description":"### Embed login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"credentials_embed_id","in":"path","description":"Id of Embedding Credential","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Embedding Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEmbed"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_embed","summary":"Delete Embedding Credential","description":"### Embed login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"credentials_embed_id","in":"path","description":"id of Embedding Credential","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_embed":{"get":{"tags":["User"],"operationId":"all_user_credentials_embeds","summary":"Get All Embedding Credentials","description":"### Embed login information for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Embedding Credential","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CredentialsEmbed"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_looker_openid":{"get":{"tags":["User"],"operationId":"user_credentials_looker_openid","summary":"Get Looker OpenId Credential","description":"### Looker Openid login information for the specified user. Used by Looker Analysts.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Looker OpenId Credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsLookerOpenid"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_credentials_looker_openid","summary":"Delete Looker OpenId Credential","description":"### Looker Openid login information for the specified user. Used by Looker Analysts.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/sessions/{session_id}":{"get":{"tags":["User"],"operationId":"user_session","summary":"Get Web Login Session","description":"### Web login session for the specified user.","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"session_id","in":"path","description":"Id of Web Login Session","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Web Login Session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_session","summary":"Delete Web Login Session","description":"### Web login session for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"session_id","in":"path","description":"id of Web Login Session","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Successfully deleted.","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/sessions":{"get":{"tags":["User"],"operationId":"all_user_sessions","summary":"Get All Web Login Sessions","description":"### Web login session for the specified user.","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Web Login Session","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Session"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_email/password_reset":{"post":{"tags":["User"],"operationId":"create_user_credentials_email_password_reset","summary":"Create Password Reset Token","description":"### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"expires","in":"query","description":"Expiring token.","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"email/password credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEmail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/roles":{"get":{"tags":["User"],"operationId":"user_roles","summary":"Get User Roles","description":"### Get information about roles of a given user\n","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"direct_association_only","in":"query","description":"Get only roles associated directly with the user: exclude those only associated through groups.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Roles of user.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Role"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"put":{"tags":["User"],"operationId":"set_user_roles","summary":"Set User Roles","description":"### Set roles of the user with a specific id.\n","parameters":[{"name":"user_id","in":"path","description":"id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}},"description":"array of roles ids for user","required":true},"responses":{"200":{"description":"Roles of user.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Role"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/attribute_values":{"get":{"tags":["User"],"operationId":"user_attribute_user_values","summary":"Get User Attribute Values","description":"### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}},{"name":"user_attribute_ids","in":"query","description":"Specific user attributes to request. Omit or leave blank to request all user attributes.","required":false,"style":"form","explode":false,"schema":{"type":"array","items":{"type":"integer","format":"int64"}}},{"name":"all_values","in":"query","description":"If true, returns all values in the search path instead of just the first value found. Useful for debugging group precedence.","required":false,"schema":{"type":"boolean"}},{"name":"include_unset","in":"query","description":"If true, returns an empty record for each requested attribute that has no user, group, or default value.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Value of user attribute.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAttributeWithValue"}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/attribute_values/{user_attribute_id}":{"patch":{"tags":["User"],"operationId":"set_user_attribute_user_value","summary":"Set User Attribute User Value","description":"### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttributeWithValue"}}},"description":"New attribute value for user.","required":true},"responses":{"200":{"description":"User attribute value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttributeWithValue"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"},"delete":{"tags":["User"],"operationId":"delete_user_attribute_user_value","summary":"Delete User Attribute User Value","description":"### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"user_attribute_id","in":"path","description":"Id of user attribute","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"Deleted"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/users/{user_id}/credentials_email/send_password_reset":{"post":{"tags":["User"],"operationId":"send_user_credentials_email_password_reset","summary":"Send Password Reset Token","description":"### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n","parameters":[{"name":"user_id","in":"path","description":"Id of user","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"email/password credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEmail"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/users/embed_user":{"post":{"tags":["User"],"operationId":"create_embed_user","summary":"Create an embed user from an external user ID","description":"Create an embed user from an external user ID\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmbedUserRequest"}}},"required":true},"responses":{"200":{"description":"Created embed user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"non_query"}},"/vector_thumbnail/{type}/{resource_id}":{"get":{"tags":["Content"],"operationId":"vector_thumbnail","summary":"Get Vector Thumbnail","description":"### Get a vector image representing the contents of a dashboard or look.\n\n# DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail)\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n","parameters":[{"name":"type","in":"path","description":"Either dashboard or look","required":true,"schema":{"type":"string"}},{"name":"resource_id","in":"path","description":"ID of the dashboard or look to render","required":true,"schema":{"type":"string"}},{"name":"reload","in":"query","description":"Whether or not to refresh the rendered image with the latest content","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Vector thumbnail","content":{"image/svg+xml":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"image/svg+xml":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"image/svg+xml":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-looker-status":"deprecated","x-looker-activity-type":"db_query"}},"/versions":{"get":{"tags":["Config"],"operationId":"versions","summary":"Get ApiVersion","description":"### Get information about all API versions supported by this Looker instance.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"ApiVersion","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiVersion"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"stable","x-looker-activity-type":"none"}},"/api_spec/{api_version}/{specification}":{"get":{"tags":["Config"],"operationId":"api_spec","summary":"Get an API specification","description":"### Get an API specification for this Looker instance.\n\nThe specification is returned as a JSON document in Swagger 2.x format\n","parameters":[{"name":"api_version","in":"path","description":"API version","required":true,"schema":{"type":"string"}},{"name":"specification","in":"path","description":"Specification name. Typically, this is \"swagger.json\"","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"API specification","content":{"application/json":{"schema":{"type":"any","format":"any"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"none"}},"/whitelabel_configuration":{"get":{"tags":["Config"],"operationId":"whitelabel_configuration","summary":"Get Whitelabel configuration","description":"### This feature is enabled only by special license.\n### Gets the whitelabel configuration, which includes hiding documentation links, custom favicon uploading, etc.\n","parameters":[{"name":"fields","in":"query","description":"Requested fields.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Whitelabel configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelabelConfiguration"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-looker-status":"deprecated","x-looker-activity-type":"non_query"},"put":{"tags":["Config"],"operationId":"update_whitelabel_configuration","summary":"Update Whitelabel configuration","description":"### Update the whitelabel configuration\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelabelConfiguration"}}},"description":"Whitelabel configuration","required":true},"responses":{"200":{"description":"Whitelabel configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelabelConfiguration"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"x-looker-status":"deprecated","x-looker-activity-type":"non_query"}},"/workspaces":{"get":{"tags":["Workspace"],"operationId":"all_workspaces","summary":"Get All Workspaces","description":"### Get All Workspaces\n\nReturns all workspaces available to the calling user.\n","responses":{"200":{"description":"Workspace","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}},"/workspaces/{workspace_id}":{"get":{"tags":["Workspace"],"operationId":"workspace","summary":"Get Workspace","description":"### Get A Workspace\n\nReturns information about a workspace such as the git status and selected branches\nof all projects available to the caller's user account.\n\nA workspace defines which versions of project files will be used to evaluate expressions\nand operations that use model definitions - operations such as running queries or rendering dashboards.\nEach project has its own git repository, and each project in a workspace may be configured to reference\nparticular branch or revision within their respective repositories.\n\nThere are two predefined workspaces available: \"production\" and \"dev\".\n\nThe production workspace is shared across all Looker users. Models in the production workspace are read-only.\nChanging files in production is accomplished by modifying files in a git branch and using Pull Requests\nto merge the changes from the dev branch into the production branch, and then telling\nLooker to sync with production.\n\nThe dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect\nthat user, and only when the dev workspace is selected as the active workspace for the API session.\n(See set_session_workspace()).\n\nThe dev workspace is NOT unique to an API session. Two applications accessing the Looker API using\nthe same user account will see the same files in the dev workspace. To avoid collisions between\nAPI clients it's best to have each client login with API3 credentials for a different user account.\n\nChanges made to files in a dev workspace are persistent across API sessions. It's a good\nidea to commit any changes you've made to the git repository, but not strictly required. Your modified files\nreside in a special user-specific directory on the Looker server and will still be there when you login in again\nlater and use update_session(workspace_id: \"dev\") to select the dev workspace for the new API session.\n","parameters":[{"name":"workspace_id","in":"path","description":"Id of the workspace ","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-looker-status":"beta","x-looker-activity-type":"non_query"}}},"servers":[{"url":"https://localhost:20000/api/4.0"}],"components":{"requestBodies":{"ColorCollection":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorCollection"}}},"description":"ColorCollection","required":true},"OauthClientApp":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OauthClientApp"}}},"description":"OAuth Client App","required":true},"LookmlModel":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookmlModel"}}},"description":"LookML Model","required":true},"Project":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"Project","required":true},"Dashboard":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard"}}},"description":"Dashboard","required":true},"ScheduledPlan":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledPlan"}}},"description":"Scheduled Plan","required":true},"DashboardLayout":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}},"description":"DashboardLayout","required":true},"CredentialsEmail":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEmail"}}},"description":"Email/Password Credential","required":true},"DBConnection":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DBConnection"}}},"description":"Connection","required":true},"UserAttribute":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttribute"}}},"description":"User Attribute","required":true},"BoardItem":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardItem"}}},"description":"Board Item","required":true},"SshServer":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshServer"}}},"description":"SSH Server","required":true},"Theme":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Theme"}}},"description":"Theme","required":true},"Alert":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alert"}}},"description":"Alert","required":true},"ContentMetaGroupUser":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentMetaGroupUser"}}},"description":"Content Metadata Access","required":true},"DashboardElement":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardElement"}}},"description":"DashboardElement","required":true},"GitBranch":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitBranch"}}},"description":"Git Branch","required":true},"Group":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}},"description":"Group","required":true},"Board":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}},"description":"Board","required":true},"BoardSection":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardSection"}}},"description":"Board section","required":true},"IntegrationHub":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationHub"}}},"description":"Integration Hub","required":true},"LDAPConfig":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LDAPConfig"}}},"description":"LDAP Config","required":true},"LookWithQuery":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookWithQuery"}}},"description":"Look","required":true},"ModelSet":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSet"}}},"description":"ModelSet","required":true},"PermissionSet":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionSet"}}},"description":"Permission Set","required":true},"Role":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}},"description":"Role","required":true},"SshTunnel":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshTunnel"}}},"description":"SSH Tunnel","required":true}},"schemas":{"Error":{"properties":{"message":{"type":"string","readOnly":true,"description":"Error details","nullable":true},"documentation_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Documentation link","nullable":true}},"x-looker-status":"stable","required":["message","documentation_url"]},"DashboardBase":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_favorite_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content Favorite Id","nullable":true},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"description":{"type":"string","readOnly":true,"description":"Description","nullable":true},"hidden":{"type":"boolean","readOnly":true,"description":"Is Hidden","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"model":{"$ref":"#/components/schemas/LookModel"},"query_timezone":{"type":"string","readOnly":true,"description":"Timezone in which the Dashboard will run by default.","nullable":true},"readonly":{"type":"boolean","readOnly":true,"description":"Is Read-only","nullable":false},"refresh_interval":{"type":"string","readOnly":true,"description":"Refresh Interval, as a time duration phrase like \"2 hours 30 minutes\". A number with no time units will be interpreted as whole seconds.","nullable":true},"refresh_interval_to_i":{"type":"integer","format":"int64","readOnly":true,"description":"Refresh Interval in milliseconds","nullable":true},"folder":{"$ref":"#/components/schemas/FolderBase"},"title":{"type":"string","readOnly":true,"description":"Dashboard Title","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User","nullable":true},"slug":{"type":"string","readOnly":true,"description":"Content Metadata Slug","nullable":true},"preferred_viewer":{"type":"string","readOnly":true,"description":"The preferred route for viewing this dashboard (ie: dashboards or dashboards-next)","nullable":true}},"x-looker-status":"stable"},"HomepageSection":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time at which this section was created.","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Time at which this section was deleted.","nullable":true},"detail_url":{"type":"string","readOnly":true,"description":"A URL pointing to a page showing further information about the content in the section.","nullable":true},"homepage_id":{"type":"integer","format":"int64","description":"Id reference to parent homepage","nullable":true},"homepage_items":{"type":"array","items":{"$ref":"#/components/schemas/HomepageItem"},"readOnly":true,"description":"Items in the homepage section","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"is_header":{"type":"boolean","readOnly":true,"description":"Is this a header section (has no items)","nullable":false},"item_order":{"type":"array","items":{"type":"integer","format":"int64"},"description":"ids of the homepage items in the order they should be displayed","nullable":true},"title":{"type":"string","description":"Name of row","nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time at which this section was last updated.","nullable":true},"description":{"type":"string","description":"Description of the content found in this section.","nullable":true},"visible_item_order":{"type":"array","items":{"type":"integer","format":"int64"},"readOnly":true,"description":"ids of the homepage items the user can see in the order they should be displayed","nullable":true}},"x-looker-status":"stable"},"HomepageItem":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_created_by":{"type":"string","readOnly":true,"description":"Name of user who created the content this item is based on","nullable":true},"content_favorite_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content favorite id associated with the item this content is based on","nullable":true},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content metadata id associated with the item this content is based on","nullable":true},"content_updated_at":{"type":"string","readOnly":true,"description":"Last time the content that this item is based on was updated","nullable":true},"custom_description":{"type":"string","description":"Custom description entered by the user, if present","nullable":true},"custom_image_data_base64":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) base64 encoded image data","nullable":true},"custom_image_url":{"type":"string","readOnly":true,"description":"Custom image_url entered by the user, if present","nullable":true},"custom_title":{"type":"string","description":"Custom title entered by the user, if present","nullable":true},"custom_url":{"type":"string","description":"Custom url entered by the user, if present","nullable":true},"dashboard_id":{"type":"integer","format":"int64","description":"Dashboard to base this item on","nullable":true},"description":{"type":"string","readOnly":true,"description":"The actual description for display","nullable":true},"favorite_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times content has been favorited, if present","nullable":true},"homepage_section_id":{"type":"integer","format":"int64","description":"Associated Homepage Section","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"image_url":{"type":"string","readOnly":true,"description":"The actual image_url for display","nullable":true},"location":{"type":"string","readOnly":true,"description":"The container folder name of the content","nullable":true},"look_id":{"type":"integer","format":"int64","description":"Look to base this item on","nullable":true},"lookml_dashboard_id":{"type":"string","description":"LookML Dashboard to base this item on","nullable":true},"order":{"type":"integer","format":"int64","description":"An arbitrary integer representing the sort order within the section","nullable":true},"section_fetch_time":{"type":"number","format":"float","readOnly":true,"description":"Number of seconds it took to fetch the section this item is in","nullable":true},"title":{"type":"string","readOnly":true,"description":"The actual title for display","nullable":true},"url":{"type":"string","readOnly":true,"description":"The actual url for display","nullable":true},"use_custom_description":{"type":"boolean","description":"Whether the custom description should be used instead of the content description, if the item is associated with content","nullable":false},"use_custom_image":{"type":"boolean","description":"Whether the custom image should be used instead of the content image, if the item is associated with content","nullable":false},"use_custom_title":{"type":"boolean","description":"Whether the custom title should be used instead of the content title, if the item is associated with content","nullable":false},"use_custom_url":{"type":"boolean","description":"Whether the custom url should be used instead of the content url, if the item is associated with content","nullable":false},"view_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times content has been viewed, if present","nullable":true}},"x-looker-status":"stable"},"ValidationError":{"properties":{"message":{"type":"string","readOnly":true,"description":"Error details","nullable":true},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationErrorDetail"},"readOnly":true,"description":"Error detail array","nullable":true},"documentation_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Documentation link","nullable":true}},"x-looker-status":"stable","required":["message","documentation_url"]},"ValidationErrorDetail":{"properties":{"field":{"type":"string","readOnly":true,"description":"Field with error","nullable":true},"code":{"type":"string","readOnly":true,"description":"Error code","nullable":true},"message":{"type":"string","readOnly":true,"description":"Error info message","nullable":true},"documentation_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Documentation link","nullable":true}},"x-looker-status":"stable","required":["documentation_url"]},"AccessToken":{"properties":{"access_token":{"type":"string","readOnly":true,"description":"Access Token used for API calls","nullable":false},"token_type":{"type":"string","readOnly":true,"description":"Type of Token","nullable":false},"expires_in":{"type":"integer","format":"int64","readOnly":true,"description":"Number of seconds before the token expires","nullable":false},"refresh_token":{"type":"string","readOnly":true,"description":"Refresh token which can be used to obtain a new access token","nullable":true}},"x-looker-status":"stable"},"AlertFieldFilter":{"properties":{"field_name":{"type":"string","description":"Field Name. Has format `.`","nullable":false},"field_value":{"type":"any","format":"any","description":"Field Value. Depends on the type of field - numeric or string. For [location](https://docs.looker.com/reference/field-reference/dimension-type-reference#location) type, it's a list of floats. Example `[1.0, 56.0]`","nullable":false},"filter_value":{"type":"string","description":"Filter Value. Usually null except for [location](https://docs.looker.com/reference/field-reference/dimension-type-reference#location) type. It'll be a string of lat,long ie `'1.0,56.0'`","nullable":true}},"x-looker-status":"beta"},"AlertAppliedDashboardFilter":{"properties":{"filter_title":{"type":"string","description":"Field Title. Refer to `DashboardFilter.title` in [DashboardFilter](#!/types/DashboardFilter). Example `Name`","nullable":true},"field_name":{"type":"string","description":"Field Name. Refer to `DashboardFilter.dimension` in [DashboardFilter](#!/types/DashboardFilter). Example `distribution_centers.name`","nullable":false},"filter_value":{"type":"string","description":"Field Value. [Filter Expressions](https://docs.looker.com/reference/filter-expressions). Example `Los Angeles CA`","nullable":false},"filter_description":{"type":"string","readOnly":true,"description":"Human Readable Filter Description. This may be null or auto-generated. Example `is Los Angeles CA`","nullable":true}},"x-looker-status":"beta"},"AlertField":{"properties":{"title":{"type":"string","description":"Field's title. Usually auto-generated to reflect field name and its filters","nullable":false},"name":{"type":"string","description":"Field's name. Has the format `.` Refer to [docs](https://docs.looker.com/sharing-and-publishing/creating-alerts) for more details","nullable":false},"filter":{"type":"array","items":{"$ref":"#/components/schemas/AlertFieldFilter"},"description":"(Optional / Advance Use) List of fields filter. This further restricts the alert to certain dashboard element's field values. This can be used on top of dashboard filters `applied_dashboard_filters`. To keep thing simple, it's suggested to just use dashboard filters. Example: `{ 'title': '12 Number on Hand', 'name': 'inventory_items.number_on_hand', 'filter': [{ 'field_name': 'inventory_items.id', 'field_value': 12, 'filter_value': null }] }`","nullable":true}},"x-looker-status":"beta"},"AlertConditionState":{"properties":{"previous_time_series_id":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) The second latest time string the alert has seen.","nullable":true},"latest_time_series_id":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Latest time string the alert has seen.","nullable":true}},"x-looker-status":"beta"},"Alert":{"properties":{"applied_dashboard_filters":{"type":"array","items":{"$ref":"#/components/schemas/AlertAppliedDashboardFilter"},"description":"Filters coming from the dashboard that are applied. Example `[{ \"filter_title\": \"Name\", \"field_name\": \"distribution_centers.name\", \"filter_value\": \"Los Angeles CA\" }]`","nullable":true},"comparison_type":{"type":"string","enum":["EQUAL_TO","GREATER_THAN","GREATER_THAN_OR_EQUAL_TO","LESS_THAN","LESS_THAN_OR_EQUAL_TO","INCREASES_BY","DECREASES_BY","CHANGES_BY"],"description":"This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: \"EQUAL_TO\", \"GREATER_THAN\", \"GREATER_THAN_OR_EQUAL_TO\", \"LESS_THAN\", \"LESS_THAN_OR_EQUAL_TO\", \"INCREASES_BY\", \"DECREASES_BY\", \"CHANGES_BY\".","nullable":false},"cron":{"type":"string","description":"Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals","nullable":false},"custom_title":{"type":"string","description":"An optional, user-defined title for the alert","nullable":true},"dashboard_element_id":{"type":"integer","format":"int64","description":"ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement)","nullable":true},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/AlertDestination"},"description":"Array of destinations to send alerts to. Must be the same type of destination. Example `[{ \"destination_type\": \"EMAIL\", \"email_address\": \"test@test.com\" }]`","nullable":true},"field":{"$ref":"#/components/schemas/AlertField"},"id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of the alert","nullable":false},"is_disabled":{"type":"boolean","description":"Whether or not the alert is disabled","nullable":false},"is_public":{"type":"boolean","description":"Whether or not the alert is public","nullable":false},"lookml_dashboard_id":{"type":"string","description":"ID of the LookML dashboard associated with the alert","nullable":true},"lookml_link_id":{"type":"string","description":"ID of the LookML dashboard element associated with the alert","nullable":true},"owner_id":{"type":"integer","format":"int64","description":"User id of alert owner","nullable":false},"threshold":{"type":"number","format":"double","description":"Value of the alert threshold","nullable":false},"time_series_condition_state":{"$ref":"#/components/schemas/AlertConditionState"}},"x-looker-status":"beta"},"AlertDestination":{"properties":{"destination_type":{"type":"string","enum":["EMAIL","ACTION_HUB"],"description":"Type of destination that the alert will be sent to Valid values are: \"EMAIL\", \"ACTION_HUB\".","nullable":false},"email_address":{"type":"string","description":"Email address for the 'email' type","nullable":true},"action_hub_integration_id":{"type":"string","description":"Action hub integration id for the 'action_hub' type. [Integration](#!/types/Integration)","nullable":true},"action_hub_form_params_json":{"type":"string","description":"Action hub form params json for the 'action_hub' type [IntegrationParam](#!/types/IntegrationParam)","nullable":true}},"x-looker-status":"beta","required":["destination_type"]},"ApiSession":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"workspace_id":{"type":"string","description":"The id of active workspace for this session","nullable":true},"sudo_user_id":{"type":"integer","format":"int64","readOnly":true,"description":"The id of the actual user in the case when this session represents one user sudo'ing as another","nullable":true}},"x-looker-status":"stable"},"BackupConfiguration":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"type":{"type":"string","description":"Type of backup: looker-s3 or custom-s3","nullable":true},"custom_s3_bucket":{"type":"string","description":"Name of bucket for custom-s3 backups","nullable":true},"custom_s3_bucket_region":{"type":"string","description":"Name of region where the bucket is located","nullable":true},"custom_s3_key":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) AWS S3 key used for custom-s3 backups","nullable":true},"custom_s3_secret":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) AWS S3 secret used for custom-s3 backups","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"BoardItem":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_created_by":{"type":"string","readOnly":true,"description":"Name of user who created the content this item is based on","nullable":true},"content_favorite_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content favorite id associated with the item this content is based on","nullable":true},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content metadata id associated with the item this content is based on","nullable":true},"content_updated_at":{"type":"string","readOnly":true,"description":"Last time the content that this item is based on was updated","nullable":true},"custom_image_data_base64":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) base64 encoded image data","nullable":true},"custom_image_url":{"type":"string","readOnly":true,"description":"Custom image_url entered by the user, if present","nullable":true},"custom_title":{"type":"string","description":"Custom title entered by the user, if present","nullable":true},"custom_url":{"type":"string","description":"Custom url entered by the user, if present","nullable":true},"dashboard_id":{"type":"integer","format":"int64","description":"Dashboard to base this item on","nullable":true},"description":{"type":"string","readOnly":true,"description":"The actual description for display","nullable":true},"favorite_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times content has been favorited, if present","nullable":true},"board_section_id":{"type":"integer","format":"int64","description":"Associated Board Section","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"image_url":{"type":"string","readOnly":true,"description":"The actual image_url for display","nullable":true},"location":{"type":"string","readOnly":true,"description":"The container folder name of the content","nullable":true},"look_id":{"type":"integer","format":"int64","description":"Look to base this item on","nullable":true},"lookml_dashboard_id":{"type":"string","description":"LookML Dashboard to base this item on","nullable":true},"order":{"type":"integer","format":"int64","description":"An arbitrary integer representing the sort order within the section","nullable":true},"title":{"type":"string","readOnly":true,"description":"The actual title for display","nullable":true},"url":{"type":"string","readOnly":true,"description":"Relative url for the associated content","nullable":false},"view_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times content has been viewed, if present","nullable":true}},"x-looker-status":"beta"},"Board":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of associated content_metadata record","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Date of board creation","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Date of board deletion","nullable":true},"description":{"type":"string","description":"Description of the board","nullable":true},"board_sections":{"type":"array","items":{"$ref":"#/components/schemas/BoardSection"},"readOnly":true,"description":"Sections of the board","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"section_order":{"type":"array","items":{"type":"integer","format":"int64"},"description":"ids of the board sections in the order they should be displayed","nullable":true},"title":{"type":"string","description":"Title of the board","nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"description":"Date of last board update","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"User id of board creator","nullable":true},"primary_homepage":{"type":"boolean","readOnly":true,"description":"Whether the board is the primary homepage or not","nullable":false}},"x-looker-status":"beta"},"BoardSection":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time at which this section was created.","nullable":true},"deleted_at":{"type":"string","format":"date-time","description":"Time at which this section was deleted.","nullable":true},"description":{"type":"string","description":"Description of the content found in this section.","nullable":true},"board_id":{"type":"integer","format":"int64","description":"Id reference to parent board","nullable":true},"board_items":{"type":"array","items":{"$ref":"#/components/schemas/BoardItem"},"readOnly":true,"description":"Items in the board section","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"item_order":{"type":"array","items":{"type":"integer","format":"int64"},"description":"ids of the board items in the order they should be displayed","nullable":true},"visible_item_order":{"type":"array","items":{"type":"integer","format":"int64"},"readOnly":true,"description":"ids of the homepage items the user can see in the order they should be displayed","nullable":true},"title":{"type":"string","description":"Name of row","nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time at which this section was last updated.","nullable":true}},"x-looker-status":"beta"},"ColorStop":{"properties":{"color":{"type":"string","description":"CSS color string","nullable":false},"offset":{"type":"integer","format":"int64","description":"Offset in continuous palette (0 to 100)","nullable":false}},"x-looker-status":"stable"},"ContinuousPalette":{"properties":{"id":{"type":"string","readOnly":true,"description":"Unique identity string","nullable":false},"label":{"type":"string","description":"Label for palette","nullable":true},"type":{"type":"string","description":"Type of palette","nullable":false},"stops":{"type":"array","items":{"$ref":"#/components/schemas/ColorStop"},"description":"Array of ColorStops in the palette","nullable":false}},"x-looker-status":"stable"},"DiscretePalette":{"properties":{"id":{"type":"string","readOnly":true,"description":"Unique identity string","nullable":false},"label":{"type":"string","description":"Label for palette","nullable":true},"type":{"type":"string","description":"Type of palette","nullable":false},"colors":{"type":"array","items":{"type":"string"},"description":"Array of colors in the palette","nullable":false}},"x-looker-status":"stable"},"ColorCollection":{"properties":{"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"label":{"type":"string","description":"Label of color collection","nullable":false},"categoricalPalettes":{"type":"array","items":{"$ref":"#/components/schemas/DiscretePalette"},"description":"Array of categorical palette definitions","nullable":false},"sequentialPalettes":{"type":"array","items":{"$ref":"#/components/schemas/ContinuousPalette"},"description":"Array of discrete palette definitions","nullable":false},"divergingPalettes":{"type":"array","items":{"$ref":"#/components/schemas/ContinuousPalette"},"description":"Array of diverging palette definitions","nullable":false}},"x-looker-status":"stable"},"Command":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of the command record","nullable":false},"author_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of the command author","nullable":false},"name":{"type":"string","description":"Name of the command","nullable":false},"description":{"type":"string","description":"Description of the command","nullable":true},"linked_content_id":{"type":"string","description":"Id of the content associated with the command","nullable":false},"linked_content_type":{"type":"string","enum":["dashboard","lookml_dashboard"],"description":"Name of the command Valid values are: \"dashboard\", \"lookml_dashboard\".","nullable":false}},"x-looker-status":"beta"},"UpdateCommand":{"properties":{"name":{"type":"string","description":"Name of the command","nullable":true},"description":{"type":"string","description":"Description of the command","nullable":true}},"x-looker-status":"beta"},"ContentFavorite":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"user_id":{"type":"integer","format":"int64","description":"User Id which owns this ContentFavorite","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","description":"Content Metadata Id associated with this ContentFavorite","nullable":false},"look_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of a look","nullable":true},"dashboard_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of a dashboard","nullable":true},"look":{"$ref":"#/components/schemas/LookBasic"},"dashboard":{"$ref":"#/components/schemas/DashboardBase"},"board_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of a board","nullable":true}},"x-looker-status":"stable"},"ContentMetaGroupUser":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"content_metadata_id":{"type":"string","readOnly":true,"description":"Id of associated Content Metadata","nullable":true},"permission_type":{"type":"string","readOnly":true,"enum":["view","edit"],"description":"Type of permission: \"view\" or \"edit\" Valid values are: \"view\", \"edit\".","nullable":true},"group_id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of associated group","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of associated user","nullable":true}},"x-looker-status":"stable"},"ContentMeta":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"name":{"type":"string","readOnly":true,"description":"Name or title of underlying content","nullable":true},"parent_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of Parent Content","nullable":true},"dashboard_id":{"type":"string","readOnly":true,"description":"Id of associated dashboard when content_type is \"dashboard\"","nullable":true},"look_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of associated look when content_type is \"look\"","nullable":true},"folder_id":{"type":"string","readOnly":true,"description":"Id of associated folder when content_type is \"space\"","nullable":true},"content_type":{"type":"string","readOnly":true,"description":"Content Type (\"dashboard\", \"look\", or \"folder\")","nullable":true},"inherits":{"type":"boolean","description":"Whether content inherits its access levels from parent","nullable":false},"inheriting_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of Inherited Content","nullable":true},"slug":{"type":"string","readOnly":true,"description":"Content Slug","nullable":true}},"x-looker-status":"stable"},"ContentValidation":{"properties":{"content_with_errors":{"type":"array","items":{"$ref":"#/components/schemas/ContentValidatorError"},"readOnly":true,"description":"A list of content errors","nullable":true},"computation_time":{"type":"number","format":"float","readOnly":true,"description":"Duration of content validation in seconds","nullable":true},"total_looks_validated":{"type":"integer","format":"int64","readOnly":true,"description":"The number of looks validated","nullable":true},"total_dashboard_elements_validated":{"type":"integer","format":"int64","readOnly":true,"description":"The number of dashboard elements validated","nullable":true},"total_dashboard_filters_validated":{"type":"integer","format":"int64","readOnly":true,"description":"The number of dashboard filters validated","nullable":true},"total_scheduled_plans_validated":{"type":"integer","format":"int64","readOnly":true,"description":"The number of scheduled plans validated","nullable":true},"total_alerts_validated":{"type":"integer","format":"int64","readOnly":true,"description":"The number of alerts validated","nullable":true},"total_explores_validated":{"type":"integer","format":"int64","readOnly":true,"description":"The number of explores used across all content validated","nullable":true}},"x-looker-status":"stable"},"ContentValidatorError":{"properties":{"look":{"$ref":"#/components/schemas/ContentValidationLook"},"dashboard":{"$ref":"#/components/schemas/ContentValidationDashboard"},"dashboard_element":{"$ref":"#/components/schemas/ContentValidationDashboardElement"},"dashboard_filter":{"$ref":"#/components/schemas/ContentValidationDashboardFilter"},"scheduled_plan":{"$ref":"#/components/schemas/ContentValidationScheduledPlan"},"alert":{"$ref":"#/components/schemas/ContentValidationAlert"},"lookml_dashboard":{"$ref":"#/components/schemas/ContentValidationLookMLDashboard"},"lookml_dashboard_element":{"$ref":"#/components/schemas/ContentValidationLookMLDashboardElement"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ContentValidationError"},"readOnly":true,"description":"A list of errors found for this piece of content","nullable":true},"id":{"type":"string","readOnly":true,"description":"An id unique to this piece of content for this validation run","nullable":false}},"x-looker-status":"stable"},"ContentValidationFolder":{"properties":{"name":{"type":"string","description":"Unique Name","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false}},"x-looker-status":"stable","required":["name"]},"ContentValidationLook":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"title":{"type":"string","description":"Look Title","nullable":true},"short_url":{"type":"string","readOnly":true,"description":"Short Url","nullable":true},"folder":{"$ref":"#/components/schemas/ContentValidationFolder"}},"x-looker-status":"stable"},"ContentValidationDashboard":{"properties":{"description":{"type":"string","description":"Description","nullable":true},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"folder":{"$ref":"#/components/schemas/ContentValidationFolder"},"title":{"type":"string","description":"Dashboard Title","nullable":true},"url":{"type":"string","readOnly":true,"description":"Relative URL of the dashboard","nullable":true}},"x-looker-status":"stable"},"ContentValidationDashboardElement":{"properties":{"body_text":{"type":"string","description":"Text tile body text","nullable":true},"dashboard_id":{"type":"string","description":"Id of Dashboard","nullable":true},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"look_id":{"type":"string","description":"Id Of Look","nullable":true},"note_display":{"type":"string","description":"Note Display","nullable":true},"note_state":{"type":"string","description":"Note State","nullable":true},"note_text":{"type":"string","description":"Note Text","nullable":true},"note_text_as_html":{"type":"string","readOnly":true,"description":"Note Text as Html","nullable":true},"query_id":{"type":"integer","format":"int64","description":"Id Of Query","nullable":true},"subtitle_text":{"type":"string","description":"Text tile subtitle text","nullable":true},"title":{"type":"string","description":"Title of dashboard element","nullable":true},"title_hidden":{"type":"boolean","description":"Whether title is hidden","nullable":false},"title_text":{"type":"string","description":"Text tile title","nullable":true},"type":{"type":"string","description":"Type","nullable":true}},"x-looker-status":"stable"},"ContentValidationError":{"properties":{"message":{"type":"string","readOnly":true,"description":"Error message","nullable":true},"field_name":{"type":"string","readOnly":true,"description":"Name of the field involved in the error","nullable":true},"model_name":{"type":"string","readOnly":true,"description":"Name of the model involved in the error","nullable":true},"explore_name":{"type":"string","readOnly":true,"description":"Name of the explore involved in the error","nullable":true},"removable":{"type":"boolean","readOnly":true,"description":"Whether this validation error is removable","nullable":false}},"x-looker-status":"stable"},"ContentValidationDashboardFilter":{"properties":{"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"dashboard_id":{"type":"string","readOnly":true,"description":"Id of Dashboard","nullable":true},"name":{"type":"string","description":"Name of filter","nullable":true},"title":{"type":"string","description":"Title of filter","nullable":true},"type":{"type":"string","description":"Type of filter: one of date, number, string, or field","nullable":true},"default_value":{"type":"string","description":"Default value of filter","nullable":true},"model":{"type":"string","description":"Model of filter (required if type = field)","nullable":true},"explore":{"type":"string","description":"Explore of filter (required if type = field)","nullable":true},"dimension":{"type":"string","description":"Dimension of filter (required if type = field)","nullable":true}},"x-looker-status":"stable"},"ContentValidationScheduledPlan":{"properties":{"name":{"type":"string","description":"Name of this scheduled plan","nullable":true},"look_id":{"type":"integer","format":"int64","description":"Id of a look","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false}},"x-looker-status":"stable"},"ContentValidationAlert":{"properties":{"id":{"type":"integer","format":"int64","description":"ID of the alert","nullable":false},"lookml_dashboard_id":{"type":"string","description":"ID of the LookML dashboard associated with the alert","nullable":true},"lookml_link_id":{"type":"string","description":"ID of the LookML dashboard element associated with the alert","nullable":true},"custom_title":{"type":"string","description":"An optional, user-defined title for the alert","nullable":true}},"x-looker-status":"stable"},"ContentValidationLookMLDashboard":{"properties":{"id":{"type":"string","readOnly":true,"description":"ID of the LookML Dashboard","nullable":false},"title":{"type":"string","readOnly":true,"description":"Title of the LookML Dashboard","nullable":true},"space_id":{"type":"string","readOnly":true,"description":"ID of Space","nullable":true}},"x-looker-status":"stable"},"ContentValidationLookMLDashboardElement":{"properties":{"lookml_link_id":{"type":"string","readOnly":true,"description":"Link ID of the LookML Dashboard Element","nullable":true},"title":{"type":"string","readOnly":true,"description":"Title of the LookML Dashboard Element","nullable":true}},"x-looker-status":"stable"},"ContentView":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"look_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of viewed Look","nullable":true},"dashboard_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of the viewed Dashboard","nullable":true},"title":{"type":"string","readOnly":true,"description":"Name or title of underlying content","nullable":true},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content metadata id of the Look or Dashboard","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of user content was viewed by","nullable":true},"group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of group content was viewed by","nullable":true},"view_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times piece of content was viewed","nullable":true},"favorite_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times piece of content was favorited","nullable":true},"last_viewed_at":{"type":"string","readOnly":true,"description":"Date the piece of content was last viewed","nullable":true},"start_of_week_date":{"type":"string","readOnly":true,"description":"Week start date for the view and favorite count during that given week","nullable":true}},"x-looker-status":"stable"},"CreateEmbedUserRequest":{"properties":{"external_user_id":{"type":"string","nullable":false}},"x-looker-status":"stable","required":["external_user_id"]},"CreateOAuthApplicationUserStateRequest":{"properties":{"user_id":{"type":"string","nullable":false},"oauth_application_id":{"type":"string","nullable":false},"access_token":{"type":"string","nullable":false},"access_token_expires_at":{"type":"string","format":"date-time","nullable":false},"refresh_token":{"type":"string","nullable":true},"refresh_token_expires_at":{"type":"string","format":"date-time","nullable":true}},"x-looker-status":"beta","required":["user_id","oauth_application_id","access_token","access_token_expires_at"]},"CreateOAuthApplicationUserStateResponse":{"properties":{"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"User Id","nullable":false},"oauth_application_id":{"type":"integer","format":"int64","readOnly":true,"description":"OAuth Application ID","nullable":false}},"x-looker-status":"beta","required":["user_id","oauth_application_id"]},"CredentialsApi3":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"client_id":{"type":"string","readOnly":true,"description":"API key client_id","nullable":true},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"CredentialsEmail":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"email":{"type":"string","description":"EMail address used for user login","nullable":true},"forced_password_reset_at_next_login":{"type":"boolean","description":"Force the user to change their password upon their next login","nullable":false},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"password_reset_url":{"type":"string","readOnly":true,"description":"Url with one-time use secret token that the user can use to reset password","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true},"user_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this user","nullable":true}},"x-looker-status":"stable"},"CredentialsEmailSearch":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"email":{"type":"string","description":"EMail address used for user login","nullable":true},"forced_password_reset_at_next_login":{"type":"boolean","description":"Force the user to change their password upon their next login","nullable":false},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"password_reset_url":{"type":"string","readOnly":true,"description":"Url with one-time use secret token that the user can use to reset password","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true},"user_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this user","nullable":true}},"x-looker-status":"beta"},"CredentialsEmbed":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"external_group_id":{"type":"string","readOnly":true,"description":"Embedder's id for a group to which this user was added during the most recent login","nullable":true},"external_user_id":{"type":"string","readOnly":true,"description":"Embedder's unique id for the user","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"CredentialsGoogle":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"domain":{"type":"string","readOnly":true,"description":"Google domain","nullable":true},"email":{"type":"string","readOnly":true,"description":"EMail address","nullable":true},"google_user_id":{"type":"string","readOnly":true,"description":"Google's Unique ID for this user","nullable":true},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"CredentialsLDAP":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"email":{"type":"string","readOnly":true,"description":"EMail address","nullable":true},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"ldap_dn":{"type":"string","readOnly":true,"description":"LDAP Distinguished name for this user (as-of the last login)","nullable":true},"ldap_id":{"type":"string","readOnly":true,"description":"LDAP Unique ID for this user","nullable":true},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"CredentialsLookerOpenid":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"email":{"type":"string","readOnly":true,"description":"EMail address used for user login","nullable":true},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"logged_in_ip":{"type":"string","readOnly":true,"description":"IP address of client for most recent login using credential","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true},"user_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this user","nullable":true}},"x-looker-status":"stable"},"CredentialsOIDC":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"email":{"type":"string","readOnly":true,"description":"EMail address","nullable":true},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"oidc_user_id":{"type":"string","readOnly":true,"description":"OIDC OP's Unique ID for this user","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"CredentialsSaml":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"email":{"type":"string","readOnly":true,"description":"EMail address","nullable":true},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"logged_in_at":{"type":"string","readOnly":true,"description":"Timestamp for most recent login using credential","nullable":true},"saml_user_id":{"type":"string","readOnly":true,"description":"Saml IdP's Unique ID for this user","nullable":true},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"CredentialsTotp":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Timestamp for the creation of this credential","nullable":true},"is_disabled":{"type":"boolean","readOnly":true,"description":"Has this credential been disabled?","nullable":false},"type":{"type":"string","readOnly":true,"description":"Short name for the type of this kind of credential","nullable":true},"verified":{"type":"boolean","readOnly":true,"description":"User has verified","nullable":false},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"CustomWelcomeEmail":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"enabled":{"type":"boolean","description":"If true, custom email content will replace the default body of welcome emails","nullable":false},"content":{"type":"string","description":"The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed.","nullable":true},"subject":{"type":"string","description":"The text to appear in the email subject line.","nullable":true},"header":{"type":"string","description":"The text to appear in the header line of the email body.","nullable":true}},"x-looker-status":"stable"},"DashboardAggregateTableLookml":{"properties":{"dashboard_id":{"type":"string","readOnly":true,"description":"Dashboard Id","nullable":true},"aggregate_table_lookml":{"type":"string","readOnly":true,"description":"Aggregate Table LookML","nullable":true}},"x-looker-status":"stable"},"DashboardAppearance":{"properties":{"page_side_margins":{"type":"integer","format":"int64","description":"Page margin (side) width","nullable":true},"page_background_color":{"type":"string","description":"Background color for the dashboard","nullable":true},"tile_title_alignment":{"type":"string","description":"Title alignment on dashboard tiles","nullable":true},"tile_space_between":{"type":"integer","format":"int64","description":"Space between tiles","nullable":true},"tile_background_color":{"type":"string","description":"Background color for tiles","nullable":true},"tile_shadow":{"type":"boolean","description":"Tile shadow on/off","nullable":true},"key_color":{"type":"string","description":"Key color","nullable":true}},"x-looker-status":"stable"},"DashboardElement":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"body_text":{"type":"string","description":"Text tile body text","nullable":true},"body_text_as_html":{"type":"string","readOnly":true,"description":"Text tile body text as Html","nullable":true},"dashboard_id":{"type":"string","description":"Id of Dashboard","nullable":true},"edit_uri":{"type":"string","format":"uri-reference","readOnly":true,"description":"Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only).","nullable":true},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"look":{"$ref":"#/components/schemas/LookWithQuery"},"look_id":{"type":"string","description":"Id Of Look","nullable":true},"lookml_link_id":{"type":"string","readOnly":true,"description":"LookML link ID","nullable":true},"merge_result_id":{"type":"string","description":"ID of merge result","nullable":true},"note_display":{"type":"string","description":"Note Display","nullable":true},"note_state":{"type":"string","description":"Note State","nullable":true},"note_text":{"type":"string","description":"Note Text","nullable":true},"note_text_as_html":{"type":"string","readOnly":true,"description":"Note Text as Html","nullable":true},"query":{"$ref":"#/components/schemas/Query"},"query_id":{"type":"integer","format":"int64","description":"Id Of Query","nullable":true},"refresh_interval":{"type":"string","description":"Refresh Interval","nullable":true},"refresh_interval_to_i":{"type":"integer","format":"int64","readOnly":true,"description":"Refresh Interval as integer","nullable":true},"result_maker":{"$ref":"#/components/schemas/ResultMakerWithIdVisConfigAndDynamicFields"},"result_maker_id":{"type":"integer","format":"int64","description":"ID of the ResultMakerLookup entry.","nullable":true},"subtitle_text":{"type":"string","description":"Text tile subtitle text","nullable":true},"title":{"type":"string","description":"Title of dashboard element","nullable":true},"title_hidden":{"type":"boolean","description":"Whether title is hidden","nullable":false},"title_text":{"type":"string","description":"Text tile title","nullable":true},"type":{"type":"string","description":"Type","nullable":true},"alert_count":{"type":"integer","format":"int64","readOnly":true,"description":"Count of Alerts associated to a dashboard element","nullable":true},"title_text_as_html":{"type":"string","readOnly":true,"description":"Text tile title text as Html","nullable":true},"subtitle_text_as_html":{"type":"string","readOnly":true,"description":"Text tile subtitle text as Html","nullable":true}},"x-looker-status":"stable"},"DashboardFilter":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"dashboard_id":{"type":"string","readOnly":true,"description":"Id of Dashboard","nullable":true},"name":{"type":"string","description":"Name of filter","nullable":true},"title":{"type":"string","description":"Title of filter","nullable":true},"type":{"type":"string","description":"Type of filter: one of date, number, string, or field","nullable":true},"default_value":{"type":"string","description":"Default value of filter","nullable":true},"model":{"type":"string","description":"Model of filter (required if type = field)","nullable":true},"explore":{"type":"string","description":"Explore of filter (required if type = field)","nullable":true},"dimension":{"type":"string","description":"Dimension of filter (required if type = field)","nullable":true},"field":{"type":"object","additionalProperties":{"type":"any","format":"any"},"readOnly":true,"description":"Field information","nullable":true},"row":{"type":"integer","format":"int64","description":"Display order of this filter relative to other filters","nullable":true},"listens_to_filters":{"type":"array","items":{"type":"string"},"description":"Array of listeners for faceted filters","nullable":true},"allow_multiple_values":{"type":"boolean","description":"Whether the filter allows multiple filter values (deprecated in the latest version of dashboards)","nullable":false},"required":{"type":"boolean","description":"Whether the filter requires a value to run the dashboard","nullable":false},"ui_config":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"The visual configuration for this filter. Used to set up how the UI for this filter should appear.","nullable":true}},"x-looker-status":"stable"},"CreateDashboardFilter":{"properties":{"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"dashboard_id":{"type":"string","description":"Id of Dashboard","nullable":true},"name":{"type":"string","description":"Name of filter","nullable":true},"title":{"type":"string","description":"Title of filter","nullable":true},"type":{"type":"string","description":"Type of filter: one of date, number, string, or field","nullable":true},"default_value":{"type":"string","description":"Default value of filter","nullable":true},"model":{"type":"string","description":"Model of filter (required if type = field)","nullable":true},"explore":{"type":"string","description":"Explore of filter (required if type = field)","nullable":true},"dimension":{"type":"string","description":"Dimension of filter (required if type = field)","nullable":true},"field":{"type":"object","additionalProperties":{"type":"any","format":"any"},"readOnly":true,"description":"Field information","nullable":true},"row":{"type":"integer","format":"int64","description":"Display order of this filter relative to other filters","nullable":true},"listens_to_filters":{"type":"array","items":{"type":"string"},"description":"Array of listeners for faceted filters","nullable":true},"allow_multiple_values":{"type":"boolean","description":"Whether the filter allows multiple filter values (deprecated in the latest version of dashboards)","nullable":false},"required":{"type":"boolean","description":"Whether the filter requires a value to run the dashboard","nullable":false},"ui_config":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"The visual configuration for this filter. Used to set up how the UI for this filter should appear.","nullable":true}},"x-looker-status":"stable","required":["dashboard_id","name","title","type"]},"DashboardLayoutComponent":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"dashboard_layout_id":{"type":"string","description":"Id of Dashboard Layout","nullable":true},"dashboard_element_id":{"type":"string","description":"Id Of Dashboard Element","nullable":true},"row":{"type":"integer","format":"int64","description":"Row","nullable":true},"column":{"type":"integer","format":"int64","description":"Column","nullable":true},"width":{"type":"integer","format":"int64","description":"Width","nullable":true},"height":{"type":"integer","format":"int64","description":"Height","nullable":true},"deleted":{"type":"boolean","readOnly":true,"description":"Whether or not the dashboard layout component is deleted","nullable":false},"element_title":{"type":"string","readOnly":true,"description":"Dashboard element title, extracted from the Dashboard Element.","nullable":true},"element_title_hidden":{"type":"boolean","readOnly":true,"description":"Whether or not the dashboard element title is displayed.","nullable":false},"vis_type":{"type":"string","readOnly":true,"description":"Visualization type, extracted from a query's vis_config","nullable":true}},"x-looker-status":"stable"},"DashboardLayout":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"dashboard_id":{"type":"string","description":"Id of Dashboard","nullable":true},"type":{"type":"string","description":"Type","nullable":true},"active":{"type":"boolean","description":"Is Active","nullable":false},"column_width":{"type":"integer","format":"int64","description":"Column Width","nullable":true},"width":{"type":"integer","format":"int64","description":"Width","nullable":true},"deleted":{"type":"boolean","readOnly":true,"description":"Whether or not the dashboard layout is deleted.","nullable":false},"dashboard_title":{"type":"string","readOnly":true,"description":"Title extracted from the dashboard this layout represents.","nullable":true},"dashboard_layout_components":{"type":"array","items":{"$ref":"#/components/schemas/DashboardLayoutComponent"},"readOnly":true,"description":"Components","nullable":true}},"x-looker-status":"stable"},"DashboardLookml":{"properties":{"dashboard_id":{"type":"string","readOnly":true,"description":"Id of Dashboard","nullable":true},"lookml":{"type":"string","readOnly":true,"description":"lookml of UDD","nullable":true}},"x-looker-status":"stable"},"Dashboard":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_favorite_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content Favorite Id","nullable":true},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"description":{"type":"string","description":"Description","nullable":true},"hidden":{"type":"boolean","description":"Is Hidden","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"model":{"$ref":"#/components/schemas/LookModel"},"query_timezone":{"type":"string","description":"Timezone in which the Dashboard will run by default.","nullable":true},"readonly":{"type":"boolean","readOnly":true,"description":"Is Read-only","nullable":false},"refresh_interval":{"type":"string","description":"Refresh Interval, as a time duration phrase like \"2 hours 30 minutes\". A number with no time units will be interpreted as whole seconds.","nullable":true},"refresh_interval_to_i":{"type":"integer","format":"int64","readOnly":true,"description":"Refresh Interval in milliseconds","nullable":true},"folder":{"$ref":"#/components/schemas/FolderBase"},"title":{"type":"string","description":"Dashboard Title","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User","nullable":true},"slug":{"type":"string","description":"Content Metadata Slug","nullable":true},"preferred_viewer":{"type":"string","description":"The preferred route for viewing this dashboard (ie: dashboards or dashboards-next)","nullable":true},"alert_sync_with_dashboard_filter_enabled":{"type":"boolean","description":"Enables alerts to keep in sync with dashboard filter changes - only available in Enhanced Alerts (beta)","nullable":false},"background_color":{"type":"string","description":"Background color","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Dashboard was created.","nullable":true},"crossfilter_enabled":{"type":"boolean","description":"Enables crossfiltering in dashboards - only available in dashboards-next (beta)","nullable":false},"dashboard_elements":{"type":"array","items":{"$ref":"#/components/schemas/DashboardElement"},"readOnly":true,"description":"Elements","nullable":true},"dashboard_filters":{"type":"array","items":{"$ref":"#/components/schemas/DashboardFilter"},"readOnly":true,"description":"Filters","nullable":true},"dashboard_layouts":{"type":"array","items":{"$ref":"#/components/schemas/DashboardLayout"},"readOnly":true,"description":"Layouts","nullable":true},"deleted":{"type":"boolean","description":"Whether or not a dashboard is 'soft' deleted.","nullable":false},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Dashboard was 'soft' deleted.","nullable":true},"deleter_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User that 'soft' deleted the dashboard.","nullable":true},"edit_uri":{"type":"string","format":"uri-reference","readOnly":true,"description":"Relative path of URI of LookML file to edit the dashboard (LookML dashboard only).","nullable":true},"favorite_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times favorited","nullable":true},"last_accessed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time the dashboard was last accessed","nullable":true},"last_viewed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time last viewed in the Looker web UI","nullable":true},"load_configuration":{"type":"string","description":"configuration option that governs how dashboard loading will happen.","nullable":true},"lookml_link_id":{"type":"string","description":"Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match.","nullable":true},"show_filters_bar":{"type":"boolean","description":"Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access)","nullable":false},"show_title":{"type":"boolean","description":"Show title","nullable":false},"folder_id":{"type":"string","description":"Id of folder","nullable":true},"text_tile_text_color":{"type":"string","description":"Color of text on text tiles","nullable":true},"tile_background_color":{"type":"string","description":"Tile background color","nullable":true},"tile_text_color":{"type":"string","description":"Tile text color","nullable":true},"title_color":{"type":"string","description":"Title color","nullable":true},"view_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times viewed in the Looker web UI","nullable":true},"appearance":{"$ref":"#/components/schemas/DashboardAppearance"},"url":{"type":"string","readOnly":true,"description":"Relative URL of the dashboard","nullable":true}},"x-looker-status":"stable"},"DataActionFormField":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name","nullable":true},"label":{"type":"string","readOnly":true,"description":"Human-readable label","nullable":true},"description":{"type":"string","readOnly":true,"description":"Description of field","nullable":true},"type":{"type":"string","readOnly":true,"description":"Type of field.","nullable":true},"default":{"type":"string","readOnly":true,"description":"Default value of the field.","nullable":true},"oauth_url":{"type":"string","readOnly":true,"description":"The URL for an oauth link, if type is 'oauth_link'.","nullable":true},"interactive":{"type":"boolean","readOnly":true,"description":"Whether or not a field supports interactive forms.","nullable":false},"required":{"type":"boolean","readOnly":true,"description":"Whether or not the field is required. This is a user-interface hint. A user interface displaying this form should not submit it without a value for this field. The action server must also perform this validation.","nullable":false},"options":{"type":"array","items":{"$ref":"#/components/schemas/DataActionFormSelectOption"},"readOnly":true,"description":"If the form type is 'select', a list of options to be selected from.","nullable":true}},"x-looker-status":"stable"},"DataActionForm":{"properties":{"state":{"$ref":"#/components/schemas/DataActionUserState"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/DataActionFormField"},"readOnly":true,"description":"Array of form fields.","nullable":true}},"x-looker-status":"stable"},"DataActionFormSelectOption":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name","nullable":true},"label":{"type":"string","readOnly":true,"description":"Human-readable label","nullable":true}},"x-looker-status":"stable"},"DataActionRequest":{"properties":{"action":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"The JSON describing the data action. This JSON should be considered opaque and should be passed through unmodified from the query result it came from.","nullable":true},"form_values":{"type":"object","additionalProperties":{"type":"string"},"description":"User input for any form values the data action might use.","nullable":true}},"x-looker-status":"stable"},"DataActionResponse":{"properties":{"webhook_id":{"type":"string","readOnly":true,"description":"ID of the webhook event that sent this data action. In some error conditions, this may be null.","nullable":true},"success":{"type":"boolean","readOnly":true,"description":"Whether the data action was successful.","nullable":false},"refresh_query":{"type":"boolean","readOnly":true,"description":"When true, indicates that the client should refresh (rerun) the source query because the data may have been changed by the action.","nullable":false},"validation_errors":{"$ref":"#/components/schemas/ValidationError"},"message":{"type":"string","readOnly":true,"description":"Optional message returned by the data action server describing the state of the action that took place. This can be used to implement custom failure messages. If a failure is related to a particular form field, the server should send back a validation error instead. The Looker web UI does not currently display any message if the action indicates 'success', but may do so in the future.","nullable":true}},"x-looker-status":"stable"},"DataActionUserState":{"properties":{"data":{"type":"string","readOnly":true,"description":"User state data","nullable":true},"refresh_time":{"type":"integer","format":"int64","readOnly":true,"description":"Time in seconds until the state needs to be refreshed","nullable":true}},"x-looker-status":"stable"},"Datagroup":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"integer","format":"int64","readOnly":true,"description":"UNIX timestamp at which this entry was created.","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique ID of the datagroup","nullable":false},"model_name":{"type":"string","readOnly":true,"description":"Name of the model containing the datagroup. Unique when combined with name.","nullable":true},"name":{"type":"string","readOnly":true,"description":"Name of the datagroup. Unique when combined with model_name.","nullable":true},"stale_before":{"type":"integer","format":"int64","description":"UNIX timestamp before which cache entries are considered stale. Cannot be in the future.","nullable":true},"trigger_check_at":{"type":"integer","format":"int64","readOnly":true,"description":"UNIX timestamp at which this entry trigger was last checked.","nullable":true},"trigger_error":{"type":"string","readOnly":true,"description":"The message returned with the error of the last trigger check.","nullable":true},"trigger_value":{"type":"string","readOnly":true,"description":"The value of the trigger when last checked.","nullable":true},"triggered_at":{"type":"integer","format":"int64","description":"UNIX timestamp at which this entry became triggered. Cannot be in the future.","nullable":true}},"x-looker-status":"stable"},"DBConnectionBase":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"name":{"type":"string","readOnly":true,"description":"Name of the connection. Also used as the unique identifier","nullable":false},"dialect":{"$ref":"#/components/schemas/Dialect"},"snippets":{"type":"array","items":{"$ref":"#/components/schemas/Snippet"},"readOnly":true,"description":"SQL Runner snippets for this connection","nullable":false},"pdts_enabled":{"type":"boolean","readOnly":true,"description":"True if PDTs are enabled on this connection","nullable":false}},"x-looker-status":"stable"},"DBConnection":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"name":{"type":"string","description":"Name of the connection. Also used as the unique identifier","nullable":false},"dialect":{"$ref":"#/components/schemas/Dialect"},"snippets":{"type":"array","items":{"$ref":"#/components/schemas/Snippet"},"readOnly":true,"description":"SQL Runner snippets for this connection","nullable":false},"pdts_enabled":{"type":"boolean","readOnly":true,"description":"True if PDTs are enabled on this connection","nullable":false},"host":{"type":"string","description":"Host name/address of server","nullable":true},"port":{"type":"integer","format":"int64","description":"Port number on server","nullable":true},"username":{"type":"string","description":"Username for server authentication","nullable":true},"password":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Password for server authentication","nullable":true},"uses_oauth":{"type":"boolean","readOnly":true,"description":"Whether the connection uses OAuth for authentication.","nullable":false},"certificate":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).","nullable":true},"file_type":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Certificate keyfile type - .json or .p12","nullable":true},"database":{"type":"string","description":"Database name","nullable":true},"db_timezone":{"type":"string","description":"Time zone of database","nullable":true},"query_timezone":{"type":"string","description":"Timezone to use in queries","nullable":true},"schema":{"type":"string","description":"Scheme name","nullable":true},"max_connections":{"type":"integer","format":"int64","description":"Maximum number of concurrent connection to use","nullable":true},"max_billing_gigabytes":{"type":"string","description":"Maximum size of query in GBs (BigQuery only, can be a user_attribute name)","nullable":true},"ssl":{"type":"boolean","description":"Use SSL/TLS when connecting to server","nullable":false},"verify_ssl":{"type":"boolean","description":"Verify the SSL","nullable":false},"tmp_db_name":{"type":"string","description":"Name of temporary database (if used)","nullable":true},"jdbc_additional_params":{"type":"string","description":"Additional params to add to JDBC connection string","nullable":true},"pool_timeout":{"type":"integer","format":"int64","description":"Connection Pool Timeout, in seconds","nullable":true},"dialect_name":{"type":"string","description":"(Read/Write) SQL Dialect name","nullable":true},"created_at":{"type":"string","readOnly":true,"description":"Creation date for this connection","nullable":true},"user_id":{"type":"string","readOnly":true,"description":"Id of user who last modified this connection configuration","nullable":true},"example":{"type":"boolean","readOnly":true,"description":"Is this an example connection?","nullable":false},"user_db_credentials":{"type":"boolean","description":"(Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password","nullable":true},"user_attribute_fields":{"type":"array","items":{"type":"string"},"description":"Fields whose values map to user attribute names","nullable":true},"maintenance_cron":{"type":"string","description":"Cron string specifying when maintenance such as PDT trigger checks and drops should be performed","nullable":true},"last_regen_at":{"type":"string","readOnly":true,"description":"Unix timestamp at start of last completed PDT trigger check process","nullable":true},"last_reap_at":{"type":"string","readOnly":true,"description":"Unix timestamp at start of last completed PDT reap process","nullable":true},"sql_runner_precache_tables":{"type":"boolean","description":"Precache tables in the SQL Runner","nullable":false},"sql_writing_with_info_schema":{"type":"boolean","description":"Fetch Information Schema For SQL Writing","nullable":false},"after_connect_statements":{"type":"string","description":"SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature","nullable":true},"pdt_context_override":{"$ref":"#/components/schemas/DBConnectionOverride"},"managed":{"type":"boolean","readOnly":true,"description":"Is this connection created and managed by Looker","nullable":false},"tunnel_id":{"type":"string","description":"The Id of the ssh tunnel this connection uses","x-looker-undocumented":false,"nullable":true},"pdt_concurrency":{"type":"integer","format":"int64","description":"Maximum number of threads to use to build PDTs in parallel","nullable":true},"disable_context_comment":{"type":"boolean","description":"When disable_context_comment is true comment will not be added to SQL","nullable":true},"oauth_application_id":{"type":"integer","format":"int64","description":"An External OAuth Application to use for authenticating to the database","nullable":true}},"x-looker-status":"stable"},"DBConnectionOverride":{"properties":{"context":{"type":"string","description":"Context in which to override (`pdt` is the only allowed value)","nullable":false},"host":{"type":"string","description":"Host name/address of server","nullable":true},"port":{"type":"string","description":"Port number on server","nullable":true},"username":{"type":"string","description":"Username for server authentication","nullable":true},"password":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Password for server authentication","nullable":true},"has_password":{"type":"boolean","readOnly":true,"description":"Whether or not the password is overridden in this context","nullable":false},"certificate":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).","nullable":true},"file_type":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Certificate keyfile type - .json or .p12","nullable":true},"database":{"type":"string","description":"Database name","nullable":true},"schema":{"type":"string","description":"Scheme name","nullable":true},"jdbc_additional_params":{"type":"string","description":"Additional params to add to JDBC connection string","nullable":true},"after_connect_statements":{"type":"string","description":"SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature","nullable":true}},"x-looker-status":"stable"},"DBConnectionTestResult":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"connection_string":{"type":"string","readOnly":true,"description":"JDBC connection string. (only populated in the 'connect' test)","nullable":true},"message":{"type":"string","readOnly":true,"description":"Result message of test","nullable":true},"name":{"type":"string","readOnly":true,"description":"Name of test","nullable":true},"status":{"type":"string","readOnly":true,"description":"Result code of test","nullable":true}},"x-looker-status":"stable"},"DelegateOauthTest":{"properties":{"name":{"type":"string","readOnly":true,"description":"Delegate Oauth Connection Name","nullable":false},"installation_target_id":{"type":"string","readOnly":true,"description":"The ID of the installation target. For Slack, this would be workspace id.","nullable":false},"installation_id":{"type":"integer","format":"int64","readOnly":true,"description":"Installation ID","nullable":false},"success":{"type":"boolean","readOnly":true,"description":"Whether or not the test was successful","nullable":false}},"x-looker-status":"stable"},"DependencyGraph":{"properties":{"graph_text":{"type":"string","readOnly":true,"description":"The graph structure in the dot language that can be rendered into an image.","nullable":false}},"x-looker-status":"stable"},"DialectInfo":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"default_max_connections":{"type":"string","readOnly":true,"description":"Default number max connections","nullable":true},"default_port":{"type":"string","readOnly":true,"description":"Default port number","nullable":true},"installed":{"type":"boolean","readOnly":true,"description":"Is the supporting driver installed","nullable":false},"label":{"type":"string","readOnly":true,"description":"The human-readable label of the connection","nullable":true},"label_for_database_equivalent":{"type":"string","readOnly":true,"description":"What the dialect calls the equivalent of a normal SQL table","nullable":true},"name":{"type":"string","readOnly":true,"description":"The name of the dialect","nullable":true},"supported_options":{"$ref":"#/components/schemas/DialectInfoOptions"}},"x-looker-status":"stable"},"DialectInfoOptions":{"properties":{"additional_params":{"type":"boolean","readOnly":true,"description":"Has additional params support","nullable":false},"auth":{"type":"boolean","readOnly":true,"description":"Has auth support","nullable":false},"host":{"type":"boolean","readOnly":true,"description":"Has host support","nullable":false},"oauth_credentials":{"type":"boolean","readOnly":true,"description":"Has support for a service account","nullable":false},"project_name":{"type":"boolean","readOnly":true,"description":"Has project name support","nullable":false},"schema":{"type":"boolean","readOnly":true,"description":"Has schema support","nullable":false},"ssl":{"type":"boolean","readOnly":true,"description":"Has SSL support","nullable":false},"timezone":{"type":"boolean","readOnly":true,"description":"Has timezone support","nullable":false},"tmp_table":{"type":"boolean","readOnly":true,"description":"Has tmp table support","nullable":false},"username_required":{"type":"boolean","readOnly":true,"description":"Username is required","nullable":false}},"x-looker-status":"stable"},"Dialect":{"properties":{"name":{"type":"string","readOnly":true,"description":"The name of the dialect","nullable":false},"label":{"type":"string","readOnly":true,"description":"The human-readable label of the connection","nullable":false},"supports_cost_estimate":{"type":"boolean","readOnly":true,"description":"Whether the dialect supports query cost estimates","nullable":false},"persistent_table_indexes":{"type":"string","readOnly":true,"description":"PDT index columns","nullable":false},"persistent_table_sortkeys":{"type":"string","readOnly":true,"description":"PDT sortkey columns","nullable":false},"persistent_table_distkey":{"type":"string","readOnly":true,"description":"PDT distkey column","nullable":false},"supports_streaming":{"type":"boolean","readOnly":true,"description":"Suports streaming results","nullable":false},"automatically_run_sql_runner_snippets":{"type":"boolean","readOnly":true,"description":"Should SQL Runner snippets automatically be run","nullable":false},"connection_tests":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Array of names of the tests that can be run on a connection using this dialect","nullable":false},"supports_inducer":{"type":"boolean","readOnly":true,"description":"Is supported with the inducer (i.e. generate from sql)","nullable":false},"supports_multiple_databases":{"type":"boolean","readOnly":true,"description":"Can multiple databases be accessed from a connection using this dialect","nullable":false},"supports_persistent_derived_tables":{"type":"boolean","readOnly":true,"description":"Whether the dialect supports allowing Looker to build persistent derived tables","nullable":false},"has_ssl_support":{"type":"boolean","readOnly":true,"description":"Does the database have client SSL support settable through the JDBC string explicitly?","nullable":false}},"x-looker-status":"stable"},"DigestEmailSend":{"properties":{"configuration_delivered":{"type":"boolean","description":"True if content was successfully generated and delivered","nullable":false}},"x-looker-status":"stable"},"DigestEmails":{"properties":{"is_enabled":{"type":"boolean","description":"Whether or not digest emails are enabled","nullable":false}},"x-looker-status":"stable"},"EmbedParams":{"properties":{"target_url":{"type":"string","format":"uri-reference","description":"The complete URL of the Looker UI page to display in the embed context. For example, to display the dashboard with id 34, `target_url` would look like: `https://mycompany.looker.com:9999/dashboards/34`. `target_uri` MUST contain a scheme (HTTPS), domain name, and URL path. Port must be included if it is required to reach the Looker server from browser clients. If the Looker instance is behind a load balancer or other proxy, `target_uri` must be the public-facing domain name and port required to reach the Looker instance, not the actual internal network machine name of the Looker instance.","nullable":false},"session_length":{"type":"integer","format":"int64","description":"Number of seconds the SSO embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).","nullable":true},"force_logout_login":{"type":"boolean","description":"When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true.","nullable":false}},"x-looker-status":"beta","required":["target_url"]},"EmbedSsoParams":{"properties":{"target_url":{"type":"string","format":"uri-reference","description":"The complete URL of the Looker UI page to display in the embed context. For example, to display the dashboard with id 34, `target_url` would look like: `https://mycompany.looker.com:9999/dashboards/34`. `target_uri` MUST contain a scheme (HTTPS), domain name, and URL path. Port must be included if it is required to reach the Looker server from browser clients. If the Looker instance is behind a load balancer or other proxy, `target_uri` must be the public-facing domain name and port required to reach the Looker instance, not the actual internal network machine name of the Looker instance.","nullable":false},"session_length":{"type":"integer","format":"int64","description":"Number of seconds the SSO embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).","nullable":true},"force_logout_login":{"type":"boolean","description":"When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true.","nullable":false},"external_user_id":{"type":"string","description":"A value from an external system that uniquely identifies the embed user. Since the user_ids of Looker embed users may change with every embed session, external_user_id provides a way to assign a known, stable user identifier across multiple embed sessions.","nullable":true},"first_name":{"type":"string","description":"First name of the embed user. Defaults to 'Embed' if not specified","nullable":true},"last_name":{"type":"string","description":"Last name of the embed user. Defaults to 'User' if not specified","nullable":true},"user_timezone":{"type":"string","description":"Sets the user timezone for the embed user session, if the User Specific Timezones setting is enabled in the Looker admin settings. A value of `null` forces the embed user to use the Looker Application Default Timezone. You MUST omit this property from the request if the User Specific Timezones setting is disabled. Timezone values are validated against the IANA Timezone standard and can be seen in the Application Time Zone dropdown list on the Looker General Settings admin page.","nullable":true},"permissions":{"type":"array","items":{"type":"string"},"description":"List of Looker permission names to grant to the embed user. Requested permissions will be filtered to permissions allowed for embed sessions.","nullable":true},"models":{"type":"array","items":{"type":"string"},"description":"List of model names that the embed user may access","nullable":true},"group_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"List of Looker group ids in which to enroll the embed user","nullable":true},"external_group_id":{"type":"string","description":"A unique value identifying an embed-exclusive group. Multiple embed users using the same `external_group_id` value will be able to share Looker content with each other. Content and embed users associated with the `external_group_id` will not be accessible to normal Looker users or embed users not associated with this `external_group_id`.","nullable":true},"user_attributes":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"A dictionary of name-value pairs associating a Looker user attribute name with a value.","nullable":true},"secret_id":{"type":"integer","format":"int64","description":"Id of the embed secret to use to sign this SSO url. If specified, the value must be an id of a valid (active) secret defined in the Looker instance. If not specified, the URL will be signed with the newest active embed secret defined in the Looker instance.","nullable":true}},"x-looker-status":"stable","required":["target_url"]},"EmbedUrlResponse":{"properties":{"url":{"type":"string","readOnly":true,"description":"The embed URL. Any modification to this string will make the URL unusable.","nullable":false}},"x-looker-status":"stable"},"ExternalOauthApplication":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of this OAuth Application","nullable":false},"name":{"type":"string","description":"The name of this application. For Snowflake connections, this should be the name of the host database.","nullable":false},"client_id":{"type":"string","description":"The OAuth Client ID for this application","nullable":false},"client_secret":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) The OAuth Client Secret for this application","nullable":false},"dialect_name":{"type":"string","description":"The database dialect for this application.","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Creation time for this application","nullable":false}},"x-looker-status":"beta"},"FolderBase":{"properties":{"name":{"type":"string","description":"Unique Name","nullable":false},"parent_id":{"type":"string","description":"Id of Parent. If the parent id is null, this is a root-level entry","nullable":true},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time the folder was created","nullable":true},"creator_id":{"type":"integer","format":"int64","readOnly":true,"description":"User Id of Creator","nullable":true},"child_count":{"type":"integer","format":"int64","readOnly":true,"description":"Children Count","nullable":true},"external_id":{"type":"string","readOnly":true,"description":"Embedder's Id if this folder was autogenerated as an embedding shared folder via 'external_group_id' in an SSO embed login","nullable":true},"is_embed":{"type":"boolean","readOnly":true,"description":"Folder is an embed folder","nullable":false},"is_embed_shared_root":{"type":"boolean","readOnly":true,"description":"Folder is the root embed shared folder","nullable":false},"is_embed_users_root":{"type":"boolean","readOnly":true,"description":"Folder is the root embed users folder","nullable":false},"is_personal":{"type":"boolean","readOnly":true,"description":"Folder is a user's personal folder","nullable":false},"is_personal_descendant":{"type":"boolean","readOnly":true,"description":"Folder is descendant of a user's personal folder","nullable":false},"is_shared_root":{"type":"boolean","readOnly":true,"description":"Folder is the root shared folder","nullable":false},"is_users_root":{"type":"boolean","readOnly":true,"description":"Folder is the root user folder","nullable":false},"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false}},"x-looker-status":"stable","required":["name"]},"CreateFolder":{"properties":{"name":{"type":"string","description":"Unique Name","nullable":false},"parent_id":{"type":"string","description":"Id of Parent. If the parent id is null, this is a root-level entry","nullable":false}},"x-looker-status":"stable","required":["name","parent_id"]},"UpdateFolder":{"properties":{"name":{"type":"string","description":"Unique Name","nullable":false},"parent_id":{"type":"string","description":"Id of Parent. If the parent id is null, this is a root-level entry","nullable":false}},"x-looker-status":"stable"},"Folder":{"properties":{"name":{"type":"string","description":"Unique Name","nullable":false},"parent_id":{"type":"string","description":"Id of Parent. If the parent id is null, this is a root-level entry","nullable":true},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time the space was created","nullable":true},"creator_id":{"type":"integer","format":"int64","readOnly":true,"description":"User Id of Creator","nullable":true},"child_count":{"type":"integer","format":"int64","readOnly":true,"description":"Children Count","nullable":true},"external_id":{"type":"string","readOnly":true,"description":"Embedder's Id if this folder was autogenerated as an embedding shared folder via 'external_group_id' in an SSO embed login","nullable":true},"is_embed":{"type":"boolean","readOnly":true,"description":"Folder is an embed folder","nullable":false},"is_embed_shared_root":{"type":"boolean","readOnly":true,"description":"Folder is the root embed shared folder","nullable":false},"is_embed_users_root":{"type":"boolean","readOnly":true,"description":"Folder is the root embed users folder","nullable":false},"is_personal":{"type":"boolean","readOnly":true,"description":"Folder is a user's personal folder","nullable":false},"is_personal_descendant":{"type":"boolean","readOnly":true,"description":"Folder is descendant of a user's personal folder","nullable":false},"is_shared_root":{"type":"boolean","readOnly":true,"description":"Folder is the root shared folder","nullable":false},"is_users_root":{"type":"boolean","readOnly":true,"description":"Folder is the root user folder","nullable":false},"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/DashboardBase"},"readOnly":true,"description":"Dashboards","nullable":true},"looks":{"type":"array","items":{"$ref":"#/components/schemas/LookWithDashboards"},"readOnly":true,"description":"Looks","nullable":true}},"x-looker-status":"stable","required":["name"]},"GitBranch":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"name":{"type":"string","description":"The short name on the local. Updating `name` results in `git checkout `","nullable":true},"remote":{"type":"string","readOnly":true,"description":"The name of the remote","nullable":true},"remote_name":{"type":"string","readOnly":true,"description":"The short name on the remote","nullable":true},"error":{"type":"string","readOnly":true,"description":"Name of error","nullable":true},"message":{"type":"string","readOnly":true,"description":"Message describing an error if present","nullable":true},"owner_name":{"type":"string","readOnly":true,"description":"Name of the owner of a personal branch","nullable":true},"readonly":{"type":"boolean","readOnly":true,"description":"Whether or not this branch is readonly","nullable":false},"personal":{"type":"boolean","readOnly":true,"description":"Whether or not this branch is a personal branch - readonly for all developers except the owner","nullable":false},"is_local":{"type":"boolean","readOnly":true,"description":"Whether or not a local ref exists for the branch","nullable":false},"is_remote":{"type":"boolean","readOnly":true,"description":"Whether or not a remote ref exists for the branch","nullable":false},"is_production":{"type":"boolean","readOnly":true,"description":"Whether or not this is the production branch","nullable":false},"ahead_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of commits the local branch is ahead of the remote","nullable":true},"behind_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of commits the local branch is behind the remote","nullable":true},"commit_at":{"type":"integer","format":"int64","readOnly":true,"description":"UNIX timestamp at which this branch was last committed.","nullable":true},"ref":{"type":"string","description":"The resolved ref of this branch. Updating `ref` results in `git reset --hard ``.","nullable":true},"remote_ref":{"type":"string","readOnly":true,"description":"The resolved ref of this branch remote.","nullable":true}},"x-looker-status":"stable"},"GitConnectionTest":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"description":{"type":"string","readOnly":true,"description":"Human readable string describing the test","nullable":true},"id":{"type":"string","readOnly":true,"description":"A short string, uniquely naming this test","nullable":false}},"x-looker-status":"stable"},"GitConnectionTestResult":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"A short string, uniquely naming this test","nullable":false},"message":{"type":"string","readOnly":true,"description":"Additional data from the test","nullable":true},"status":{"type":"string","readOnly":true,"description":"Either 'pass' or 'fail'","nullable":true}},"x-looker-status":"stable"},"GitStatus":{"properties":{"action":{"type":"string","readOnly":true,"description":"Git action: add, delete, etc","nullable":true},"conflict":{"type":"boolean","readOnly":true,"description":"When true, changes to the local file conflict with the remote repository","nullable":false},"revertable":{"type":"boolean","readOnly":true,"description":"When true, the file can be reverted to an earlier state","nullable":false},"text":{"type":"string","readOnly":true,"description":"Git description of the action","nullable":true}},"x-looker-status":"stable"},"GroupIdForGroupInclusion":{"properties":{"group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of group","nullable":true}},"x-looker-status":"stable"},"Group":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"can_add_to_content_metadata":{"type":"boolean","description":"Group can be used in content access controls","nullable":false},"contains_current_user":{"type":"boolean","readOnly":true,"description":"Currently logged in user is group member","nullable":false},"external_group_id":{"type":"string","readOnly":true,"description":"External Id group if embed group","nullable":true},"externally_managed":{"type":"boolean","readOnly":true,"description":"Group membership controlled outside of Looker","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"include_by_default":{"type":"boolean","readOnly":true,"description":"New users are added to this group by default","nullable":false},"name":{"type":"string","description":"Name of group","nullable":true},"user_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of users included in this group","nullable":true}},"x-looker-status":"stable"},"GroupSearch":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"can_add_to_content_metadata":{"type":"boolean","description":"Group can be used in content access controls","nullable":false},"contains_current_user":{"type":"boolean","readOnly":true,"description":"Currently logged in user is group member","nullable":false},"external_group_id":{"type":"string","readOnly":true,"description":"External Id group if embed group","nullable":true},"externally_managed":{"type":"boolean","readOnly":true,"description":"Group membership controlled outside of Looker","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"include_by_default":{"type":"boolean","readOnly":true,"description":"New users are added to this group by default","nullable":false},"name":{"type":"string","description":"Name of group","nullable":true},"user_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of users included in this group","nullable":true},"roles":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"readOnly":true,"description":"Roles assigned to group","nullable":true}},"x-looker-status":"beta"},"GroupHierarchy":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"can_add_to_content_metadata":{"type":"boolean","description":"Group can be used in content access controls","nullable":false},"contains_current_user":{"type":"boolean","readOnly":true,"description":"Currently logged in user is group member","nullable":false},"external_group_id":{"type":"string","readOnly":true,"description":"External Id group if embed group","nullable":true},"externally_managed":{"type":"boolean","readOnly":true,"description":"Group membership controlled outside of Looker","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"include_by_default":{"type":"boolean","readOnly":true,"description":"New users are added to this group by default","nullable":false},"name":{"type":"string","description":"Name of group","nullable":true},"user_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of users included in this group","nullable":true},"parent_group_ids":{"type":"array","items":{"type":"integer","format":"int64"},"readOnly":true,"description":"IDs of parents of this group","nullable":true},"role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"readOnly":true,"description":"Role IDs assigned to group","nullable":true}},"x-looker-status":"beta"},"GroupIdForGroupUserInclusion":{"properties":{"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of user","nullable":true}},"x-looker-status":"stable"},"ImportedProject":{"properties":{"name":{"type":"string","readOnly":true,"description":"Dependency name","nullable":true},"url":{"type":"string","readOnly":true,"description":"Url for a remote dependency","nullable":true},"ref":{"type":"string","readOnly":true,"description":"Ref for a remote dependency","nullable":true},"is_remote":{"type":"boolean","readOnly":true,"description":"Flag signifying if a dependency is remote or local","nullable":false}},"x-looker-status":"stable"},"IntegrationHub":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of the hub.","nullable":false},"url":{"type":"string","description":"URL of the hub.","nullable":false},"label":{"type":"string","readOnly":true,"description":"Label of the hub.","nullable":false},"official":{"type":"boolean","readOnly":true,"description":"Whether this hub is a first-party integration hub operated by Looker.","nullable":false},"fetch_error_message":{"type":"string","readOnly":true,"description":"An error message, present if the integration hub metadata could not be fetched. If this is present, the integration hub is unusable.","nullable":true},"authorization_token":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) An authorization key that will be sent to the integration hub on every request.","nullable":true},"has_authorization_token":{"type":"boolean","readOnly":true,"description":"Whether the authorization_token is set for the hub.","nullable":false},"legal_agreement_signed":{"type":"boolean","readOnly":true,"description":"Whether the legal agreement message has been signed by the user. This only matters if legal_agreement_required is true.","nullable":false},"legal_agreement_required":{"type":"boolean","readOnly":true,"description":"Whether the legal terms for the integration hub are required before use.","nullable":false},"legal_agreement_text":{"type":"string","readOnly":true,"description":"The legal agreement text for this integration hub.","nullable":true}},"x-looker-status":"stable"},"Integration":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"ID of the integration.","nullable":false},"integration_hub_id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of the integration hub.","nullable":false},"label":{"type":"string","readOnly":true,"description":"Label for the integration.","nullable":false},"description":{"type":"string","readOnly":true,"description":"Description of the integration.","nullable":true},"enabled":{"type":"boolean","description":"Whether the integration is available to users.","nullable":false},"params":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationParam"},"description":"Array of params for the integration.","nullable":false},"supported_formats":{"type":"array","items":{"type":"string"},"readOnly":true,"enum":["txt","csv","inline_json","json","json_label","json_detail","json_detail_lite_stream","xlsx","html","wysiwyg_pdf","assembled_pdf","wysiwyg_png","csv_zip"],"description":"A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: \"txt\", \"csv\", \"inline_json\", \"json\", \"json_label\", \"json_detail\", \"json_detail_lite_stream\", \"xlsx\", \"html\", \"wysiwyg_pdf\", \"assembled_pdf\", \"wysiwyg_png\", \"csv_zip\".","nullable":false},"supported_action_types":{"type":"array","items":{"type":"string"},"readOnly":true,"enum":["cell","query","dashboard"],"description":"A list of action types the integration supports. Valid values are: \"cell\", \"query\", \"dashboard\".","nullable":false},"supported_formattings":{"type":"array","items":{"type":"string"},"readOnly":true,"enum":["formatted","unformatted"],"description":"A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"formatted\", \"unformatted\".","nullable":false},"supported_visualization_formattings":{"type":"array","items":{"type":"string"},"readOnly":true,"enum":["apply","noapply"],"description":"A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"apply\", \"noapply\".","nullable":false},"supported_download_settings":{"type":"array","items":{"type":"string"},"readOnly":true,"enum":["push","url"],"description":"A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: \"push\", \"url\".","nullable":false},"icon_url":{"type":"string","readOnly":true,"description":"URL to an icon for the integration.","nullable":true},"uses_oauth":{"type":"boolean","readOnly":true,"description":"Whether the integration uses oauth.","nullable":true},"required_fields":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationRequiredField"},"readOnly":true,"description":"A list of descriptions of required fields that this integration is compatible with. If there are multiple entries in this list, the integration requires more than one field. If unspecified, no fields will be required.","nullable":false},"delegate_oauth":{"type":"boolean","readOnly":true,"description":"Whether the integration uses delegate oauth, which allows federation between an integration installation scope specific entity (like org, group, and team, etc.) and Looker.","nullable":true},"installed_delegate_oauth_targets":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Whether the integration is available to users.","nullable":false}},"x-looker-status":"stable"},"IntegrationParam":{"properties":{"name":{"type":"string","description":"Name of the parameter.","nullable":true},"label":{"type":"string","readOnly":true,"description":"Label of the parameter.","nullable":true},"description":{"type":"string","readOnly":true,"description":"Short description of the parameter.","nullable":true},"required":{"type":"boolean","readOnly":true,"description":"Whether the parameter is required to be set to use the destination. If unspecified, this defaults to false.","nullable":false},"has_value":{"type":"boolean","readOnly":true,"description":"Whether the parameter has a value set.","nullable":false},"value":{"type":"string","description":"The current value of the parameter. Always null if the value is sensitive. When writing, null values will be ignored. Set the value to an empty string to clear it.","nullable":true},"user_attribute_name":{"type":"string","description":"When present, the param's value comes from this user attribute instead of the 'value' parameter. Set to null to use the 'value'.","nullable":true},"sensitive":{"type":"boolean","readOnly":true,"description":"Whether the parameter contains sensitive data like API credentials. If unspecified, this defaults to true.","nullable":true},"per_user":{"type":"boolean","readOnly":true,"description":"When true, this parameter must be assigned to a user attribute in the admin panel (instead of a constant value), and that value may be updated by the user as part of the integration flow.","nullable":false},"delegate_oauth_url":{"type":"string","readOnly":true,"description":"When present, the param represents the oauth url the user will be taken to.","nullable":true}},"x-looker-status":"stable"},"IntegrationRequiredField":{"properties":{"tag":{"type":"string","readOnly":true,"description":"Matches a field that has this tag.","nullable":true},"any_tag":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"If present, supercedes 'tag' and matches a field that has any of the provided tags.","nullable":true},"all_tags":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"If present, supercedes 'tag' and matches a field that has all of the provided tags.","nullable":true}},"x-looker-status":"stable"},"IntegrationTestResult":{"properties":{"success":{"type":"boolean","readOnly":true,"description":"Whether or not the test was successful","nullable":false},"message":{"type":"string","readOnly":true,"description":"A message representing the results of the test.","nullable":true},"delegate_oauth_result":{"type":"array","items":{"$ref":"#/components/schemas/DelegateOauthTest"},"readOnly":true,"description":"An array of connection test result for delegate oauth actions.","nullable":true}},"x-looker-status":"stable"},"InternalHelpResourcesContent":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"organization_name":{"type":"string","description":"Text to display in the help menu item which will display the internal help resources","nullable":true},"markdown_content":{"type":"string","description":"Content to be displayed in the internal help resources page/modal","nullable":true}},"x-looker-status":"stable"},"InternalHelpResources":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"enabled":{"type":"boolean","description":"If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker","nullable":false}},"x-looker-status":"stable"},"LDAPConfig":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"alternate_email_login_allowed":{"type":"boolean","description":"Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled.","nullable":false},"auth_password":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Password for the LDAP account used to access the LDAP server","nullable":true},"auth_requires_role":{"type":"boolean","description":"Users will not be allowed to login at all unless a role for them is found in LDAP if set to true","nullable":false},"auth_username":{"type":"string","description":"Distinguished name of LDAP account used to access the LDAP server","nullable":true},"connection_host":{"type":"string","description":"LDAP server hostname","nullable":true},"connection_port":{"type":"string","description":"LDAP host port","nullable":true},"connection_tls":{"type":"boolean","description":"Use Transport Layer Security","nullable":false},"connection_tls_no_verify":{"type":"boolean","description":"Do not verify peer when using TLS","nullable":false},"default_new_user_group_ids":{"type":"array","items":{"type":"integer","format":"int64"},"x-looker-write-only":true,"description":"(Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP","nullable":true},"default_new_user_groups":{"type":"array","items":{"$ref":"#/components/schemas/Group"},"readOnly":true,"description":"(Read-only) Groups that will be applied to new users the first time they login via LDAP","nullable":true},"default_new_user_role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"x-looker-write-only":true,"description":"(Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP","nullable":true},"default_new_user_roles":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"readOnly":true,"description":"(Read-only) Roles that will be applied to new users the first time they login via LDAP","nullable":true},"enabled":{"type":"boolean","description":"Enable/Disable LDAP authentication for the server","nullable":false},"force_no_page":{"type":"boolean","description":"Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it.","nullable":false},"groups":{"type":"array","items":{"$ref":"#/components/schemas/LDAPGroupRead"},"readOnly":true,"description":"(Read-only) Array of mappings between LDAP Groups and Looker Roles","nullable":true},"groups_base_dn":{"type":"string","description":"Base dn for finding groups in LDAP searches","nullable":true},"groups_finder_type":{"type":"string","description":"Identifier for a strategy for how Looker will search for groups in the LDAP server","nullable":true},"groups_member_attribute":{"type":"string","description":"LDAP Group attribute that signifies the members of the groups. Most commonly 'member'","nullable":true},"groups_objectclasses":{"type":"string","description":"Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches","nullable":true},"groups_user_attribute":{"type":"string","description":"LDAP Group attribute that signifies the user in a group. Most commonly 'dn'","nullable":true},"groups_with_role_ids":{"type":"array","items":{"$ref":"#/components/schemas/LDAPGroupWrite"},"description":"(Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids","nullable":true},"has_auth_password":{"type":"boolean","readOnly":true,"description":"(Read-only) Has the password been set for the LDAP account used to access the LDAP server","nullable":false},"merge_new_users_by_email":{"type":"boolean","description":"Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user.","nullable":false},"modified_at":{"type":"string","readOnly":true,"description":"When this config was last modified","nullable":true},"modified_by":{"type":"string","readOnly":true,"description":"User id of user who last modified this config","nullable":true},"set_roles_from_groups":{"type":"boolean","description":"Set user roles in Looker based on groups from LDAP","nullable":false},"test_ldap_password":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Test LDAP user password. For ldap tests only.","nullable":true},"test_ldap_user":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Test LDAP user login id. For ldap tests only.","nullable":true},"user_attribute_map_email":{"type":"string","description":"Name of user record attributes used to indicate email address field","nullable":true},"user_attribute_map_first_name":{"type":"string","description":"Name of user record attributes used to indicate first name","nullable":true},"user_attribute_map_last_name":{"type":"string","description":"Name of user record attributes used to indicate last name","nullable":true},"user_attribute_map_ldap_id":{"type":"string","description":"Name of user record attributes used to indicate unique record id","nullable":true},"user_attributes":{"type":"array","items":{"$ref":"#/components/schemas/LDAPUserAttributeRead"},"readOnly":true,"description":"(Read-only) Array of mappings between LDAP User Attributes and Looker User Attributes","nullable":true},"user_attributes_with_ids":{"type":"array","items":{"$ref":"#/components/schemas/LDAPUserAttributeWrite"},"description":"(Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids","nullable":true},"user_bind_base_dn":{"type":"string","description":"Distinguished name of LDAP node used as the base for user searches","nullable":true},"user_custom_filter":{"type":"string","description":"(Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses.","nullable":true},"user_id_attribute_names":{"type":"string","description":"Name(s) of user record attributes used for matching user login id (comma separated list)","nullable":true},"user_objectclass":{"type":"string","description":"(Optional) Name of user record objectclass used for finding user during login id","nullable":true},"allow_normal_group_membership":{"type":"boolean","description":"Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login.","nullable":false},"allow_roles_from_normal_groups":{"type":"boolean","description":"LDAP auth'd users will be able to inherit roles from non-reflected Looker groups.","nullable":false},"allow_direct_roles":{"type":"boolean","description":"Allows roles to be directly assigned to LDAP auth'd users.","nullable":false},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"LDAPConfigTestResult":{"properties":{"details":{"type":"string","readOnly":true,"description":"Additional details for error cases","nullable":true},"issues":{"type":"array","items":{"$ref":"#/components/schemas/LDAPConfigTestIssue"},"readOnly":true,"description":"Array of issues/considerations about the result","nullable":true},"message":{"type":"string","readOnly":true,"description":"Short human readable test about the result","nullable":true},"status":{"type":"string","readOnly":true,"description":"Test status code: always 'success' or 'error'","nullable":true},"trace":{"type":"string","readOnly":true,"description":"A more detailed trace of incremental results during auth tests","nullable":true},"user":{"$ref":"#/components/schemas/LDAPUser"},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to ldap config","nullable":true}},"x-looker-status":"stable"},"LDAPConfigTestIssue":{"properties":{"severity":{"type":"string","readOnly":true,"description":"Severity of the issue. Error or Warning","nullable":true},"message":{"type":"string","readOnly":true,"description":"Message describing the issue","nullable":true}},"x-looker-status":"stable"},"LDAPGroupRead":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"looker_group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id of group in Looker","nullable":true},"looker_group_name":{"type":"string","readOnly":true,"description":"Name of group in Looker","nullable":true},"name":{"type":"string","readOnly":true,"description":"Name of group in LDAP","nullable":true},"roles":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"readOnly":true,"description":"Looker Roles","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to ldap config","nullable":true}},"x-looker-status":"stable"},"LDAPGroupWrite":{"properties":{"id":{"type":"integer","format":"int64","description":"Unique Id","nullable":true},"looker_group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id of group in Looker","nullable":true},"looker_group_name":{"type":"string","description":"Name of group in Looker","nullable":true},"name":{"type":"string","description":"Name of group in LDAP","nullable":true},"role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Looker Role Ids","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to ldap config","nullable":true}},"x-looker-status":"stable"},"LDAPUserAttributeRead":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name of User Attribute in LDAP","nullable":true},"required":{"type":"boolean","readOnly":true,"description":"Required to be in LDAP assertion for login to be allowed to succeed","nullable":false},"user_attributes":{"type":"array","items":{"$ref":"#/components/schemas/UserAttribute"},"readOnly":true,"description":"Looker User Attributes","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to ldap config","nullable":true}},"x-looker-status":"stable"},"LDAPUserAttributeWrite":{"properties":{"name":{"type":"string","description":"Name of User Attribute in LDAP","nullable":true},"required":{"type":"boolean","description":"Required to be in LDAP assertion for login to be allowed to succeed","nullable":false},"user_attribute_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Looker User Attribute Ids","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to ldap config","nullable":true}},"x-looker-status":"stable"},"LDAPUser":{"properties":{"all_emails":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Array of user's email addresses and aliases for use in migration","nullable":true},"attributes":{"type":"object","additionalProperties":{"type":"string"},"readOnly":true,"description":"Dictionary of user's attributes (name/value)","nullable":true},"email":{"type":"string","readOnly":true,"description":"Primary email address","nullable":true},"first_name":{"type":"string","readOnly":true,"description":"First name","nullable":true},"groups":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Array of user's groups (group names only)","nullable":true},"last_name":{"type":"string","readOnly":true,"description":"Last Name","nullable":true},"ldap_dn":{"type":"string","readOnly":true,"description":"LDAP's distinguished name for the user record","nullable":true},"ldap_id":{"type":"string","readOnly":true,"description":"LDAP's Unique ID for the user","nullable":true},"roles":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Array of user's roles (role names only)","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to ldap config","nullable":true}},"x-looker-status":"stable"},"LegacyFeature":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"name":{"type":"string","readOnly":true,"description":"Name","nullable":true},"description":{"type":"string","readOnly":true,"description":"Description","nullable":true},"enabled_locally":{"type":"boolean","description":"Whether this feature has been enabled by a user","nullable":false},"enabled":{"type":"boolean","readOnly":true,"description":"Whether this feature is currently enabled","nullable":false},"disallowed_as_of_version":{"type":"string","readOnly":true,"description":"Looker version where this feature became a legacy feature","nullable":true},"disable_on_upgrade_to_version":{"type":"string","readOnly":true,"description":"Looker version where this feature will be automatically disabled","nullable":true},"end_of_life_version":{"type":"string","readOnly":true,"description":"Future Looker version where this feature will be removed","nullable":true},"documentation_url":{"type":"string","readOnly":true,"description":"URL for documentation about this feature","nullable":true},"approximate_disable_date":{"type":"string","format":"date-time","readOnly":true,"description":"Approximate date that this feature will be automatically disabled.","nullable":true},"approximate_end_of_life_date":{"type":"string","format":"date-time","readOnly":true,"description":"Approximate date that this feature will be removed.","nullable":true},"has_disabled_on_upgrade":{"type":"boolean","readOnly":true,"description":"Whether this legacy feature may have been automatically disabled when upgrading to the current version.","nullable":false}},"x-looker-status":"stable"},"Locale":{"properties":{"code":{"type":"string","readOnly":true,"description":"Code for Locale","nullable":true},"native_name":{"type":"string","readOnly":true,"description":"Name of Locale in its own language","nullable":true},"english_name":{"type":"string","readOnly":true,"description":"Name of Locale in English","nullable":true}},"x-looker-status":"stable"},"LocalizationSettings":{"properties":{"default_locale":{"type":"string","readOnly":true,"description":"Default locale for localization","nullable":true},"localization_level":{"type":"string","readOnly":true,"description":"Localization level - strict or permissive","nullable":true}},"x-looker-status":"stable"},"LookBasic":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"title":{"type":"string","readOnly":true,"description":"Look Title","nullable":true},"user_id":{"type":"integer","format":"int64","description":"User Id","nullable":true}},"x-looker-status":"stable"},"Look":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"title":{"type":"string","description":"Look Title","nullable":true},"user_id":{"type":"integer","format":"int64","description":"User Id","nullable":true},"content_favorite_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content Favorite Id","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was created.","nullable":true},"deleted":{"type":"boolean","description":"Whether or not a look is 'soft' deleted.","nullable":false},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was deleted.","nullable":true},"deleter_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User that deleted the look.","nullable":true},"description":{"type":"string","description":"Description","nullable":true},"embed_url":{"type":"string","readOnly":true,"description":"Embed Url","nullable":true},"excel_file_url":{"type":"string","readOnly":true,"description":"Excel File Url","nullable":true},"favorite_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times favorited","nullable":true},"google_spreadsheet_formula":{"type":"string","readOnly":true,"description":"Google Spreadsheet Formula","nullable":true},"image_embed_url":{"type":"string","readOnly":true,"description":"Image Embed Url","nullable":true},"is_run_on_load":{"type":"boolean","description":"auto-run query when Look viewed","nullable":false},"last_accessed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was last accessed by any user","nullable":true},"last_updater_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User that last updated the look.","nullable":true},"last_viewed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time last viewed in the Looker web UI","nullable":true},"model":{"$ref":"#/components/schemas/LookModel"},"public":{"type":"boolean","description":"Is Public","nullable":false},"public_slug":{"type":"string","readOnly":true,"description":"Public Slug","nullable":true},"public_url":{"type":"string","readOnly":true,"description":"Public Url","nullable":true},"query_id":{"type":"integer","format":"int64","description":"Query Id","nullable":true},"short_url":{"type":"string","readOnly":true,"description":"Short Url","nullable":true},"folder":{"$ref":"#/components/schemas/FolderBase"},"folder_id":{"type":"string","description":"Folder Id","nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was updated.","nullable":true},"view_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times viewed in the Looker web UI","nullable":true}},"x-looker-status":"stable"},"LookWithQuery":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"title":{"type":"string","description":"Look Title","nullable":true},"user_id":{"type":"integer","format":"int64","description":"User Id","nullable":true},"content_favorite_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content Favorite Id","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was created.","nullable":true},"deleted":{"type":"boolean","description":"Whether or not a look is 'soft' deleted.","nullable":false},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was deleted.","nullable":true},"deleter_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User that deleted the look.","nullable":true},"description":{"type":"string","description":"Description","nullable":true},"embed_url":{"type":"string","readOnly":true,"description":"Embed Url","nullable":true},"excel_file_url":{"type":"string","readOnly":true,"description":"Excel File Url","nullable":true},"favorite_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times favorited","nullable":true},"google_spreadsheet_formula":{"type":"string","readOnly":true,"description":"Google Spreadsheet Formula","nullable":true},"image_embed_url":{"type":"string","readOnly":true,"description":"Image Embed Url","nullable":true},"is_run_on_load":{"type":"boolean","description":"auto-run query when Look viewed","nullable":false},"last_accessed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was last accessed by any user","nullable":true},"last_updater_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User that last updated the look.","nullable":true},"last_viewed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time last viewed in the Looker web UI","nullable":true},"model":{"$ref":"#/components/schemas/LookModel"},"public":{"type":"boolean","description":"Is Public","nullable":false},"public_slug":{"type":"string","readOnly":true,"description":"Public Slug","nullable":true},"public_url":{"type":"string","readOnly":true,"description":"Public Url","nullable":true},"query_id":{"type":"integer","format":"int64","description":"Query Id","nullable":true},"short_url":{"type":"string","readOnly":true,"description":"Short Url","nullable":true},"folder":{"$ref":"#/components/schemas/FolderBase"},"folder_id":{"type":"string","description":"Folder Id","nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was updated.","nullable":true},"view_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times viewed in the Looker web UI","nullable":true},"query":{"$ref":"#/components/schemas/Query"},"url":{"type":"string","readOnly":true,"description":"Url","nullable":true}},"x-looker-status":"stable"},"LookWithDashboards":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"content_metadata_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of content metadata","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"title":{"type":"string","description":"Look Title","nullable":true},"user_id":{"type":"integer","format":"int64","description":"User Id","nullable":true},"content_favorite_id":{"type":"integer","format":"int64","readOnly":true,"description":"Content Favorite Id","nullable":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was created.","nullable":true},"deleted":{"type":"boolean","description":"Whether or not a look is 'soft' deleted.","nullable":false},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was deleted.","nullable":true},"deleter_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User that deleted the look.","nullable":true},"description":{"type":"string","description":"Description","nullable":true},"embed_url":{"type":"string","readOnly":true,"description":"Embed Url","nullable":true},"excel_file_url":{"type":"string","readOnly":true,"description":"Excel File Url","nullable":true},"favorite_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times favorited","nullable":true},"google_spreadsheet_formula":{"type":"string","readOnly":true,"description":"Google Spreadsheet Formula","nullable":true},"image_embed_url":{"type":"string","readOnly":true,"description":"Image Embed Url","nullable":true},"is_run_on_load":{"type":"boolean","description":"auto-run query when Look viewed","nullable":false},"last_accessed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was last accessed by any user","nullable":true},"last_updater_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User that last updated the look.","nullable":true},"last_viewed_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time last viewed in the Looker web UI","nullable":true},"model":{"$ref":"#/components/schemas/LookModel"},"public":{"type":"boolean","description":"Is Public","nullable":false},"public_slug":{"type":"string","readOnly":true,"description":"Public Slug","nullable":true},"public_url":{"type":"string","readOnly":true,"description":"Public Url","nullable":true},"query_id":{"type":"integer","format":"int64","description":"Query Id","nullable":true},"short_url":{"type":"string","readOnly":true,"description":"Short Url","nullable":true},"folder":{"$ref":"#/components/schemas/FolderBase"},"folder_id":{"type":"string","description":"Folder Id","nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time that the Look was updated.","nullable":true},"view_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times viewed in the Looker web UI","nullable":true},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/DashboardBase"},"readOnly":true,"description":"Dashboards","nullable":true}},"x-looker-status":"stable"},"LookModel":{"properties":{"id":{"type":"string","readOnly":true,"description":"Model Id","nullable":false},"label":{"type":"string","readOnly":true,"description":"Model Label","nullable":true}},"x-looker-status":"stable"},"LookmlModelNavExplore":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name of the explore","nullable":true},"description":{"type":"string","readOnly":true,"description":"Description for the explore","nullable":true},"label":{"type":"string","readOnly":true,"description":"Label for the explore","nullable":true},"hidden":{"type":"boolean","readOnly":true,"description":"Is this explore marked as hidden","nullable":false},"group_label":{"type":"string","readOnly":true,"description":"Label used to group explores in the navigation menus","nullable":true}},"x-looker-status":"stable"},"LookmlModelExplore":{"properties":{"id":{"type":"string","readOnly":true,"description":"Fully qualified explore name (model name plus explore name)","nullable":false},"name":{"type":"string","readOnly":true,"description":"Explore name","nullable":true},"description":{"type":"string","readOnly":true,"description":"Description","nullable":true},"label":{"type":"string","readOnly":true,"description":"Label","nullable":true},"title":{"type":"string","readOnly":true,"description":"Explore title","x-looker-undocumented":false,"nullable":true},"scopes":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Scopes","nullable":true},"can_total":{"type":"boolean","readOnly":true,"description":"Can Total","nullable":false},"can_develop":{"type":"boolean","readOnly":true,"description":"Can Develop LookML","x-looker-undocumented":false,"nullable":false},"can_see_lookml":{"type":"boolean","readOnly":true,"description":"Can See LookML","x-looker-undocumented":false,"nullable":false},"lookml_link":{"type":"string","readOnly":true,"description":"A URL linking to the definition of this explore in the LookML IDE.","x-looker-undocumented":false,"nullable":true},"can_save":{"type":"boolean","readOnly":true,"description":"Can Save","nullable":false},"can_explain":{"type":"boolean","readOnly":true,"description":"Can Explain","nullable":false},"can_pivot_in_db":{"type":"boolean","readOnly":true,"description":"Can pivot in the DB","nullable":false},"can_subtotal":{"type":"boolean","readOnly":true,"description":"Can use subtotals","nullable":false},"has_timezone_support":{"type":"boolean","readOnly":true,"description":"Has timezone support","nullable":false},"supports_cost_estimate":{"type":"boolean","readOnly":true,"description":"Cost estimates supported","nullable":false},"connection_name":{"type":"string","readOnly":true,"description":"Connection name","nullable":true},"null_sort_treatment":{"type":"string","readOnly":true,"description":"How nulls are sorted, possible values are \"low\", \"high\", \"first\" and \"last\"","nullable":true},"files":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"List of model source files","nullable":true},"source_file":{"type":"string","readOnly":true,"description":"Primary source_file file","nullable":true},"project_name":{"type":"string","readOnly":true,"description":"Name of project","nullable":true},"model_name":{"type":"string","readOnly":true,"description":"Name of model","nullable":true},"view_name":{"type":"string","readOnly":true,"description":"Name of view","nullable":true},"hidden":{"type":"boolean","readOnly":true,"description":"Is hidden","nullable":false},"sql_table_name":{"type":"string","readOnly":true,"description":"A sql_table_name expression that defines what sql table the view/explore maps onto. Example: \"prod_orders2 AS orders\" in a view named orders.","nullable":true},"access_filter_fields":{"type":"array","items":{"type":"string"},"readOnly":true,"x-looker-deprecated":true,"description":"(DEPRECATED) Array of access filter field names","nullable":true},"access_filters":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreAccessFilter"},"readOnly":true,"description":"Access filters","nullable":true},"aliases":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreAlias"},"readOnly":true,"description":"Aliases","nullable":true},"always_filter":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreAlwaysFilter"},"readOnly":true,"description":"Always filter","nullable":true},"conditionally_filter":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreConditionallyFilter"},"readOnly":true,"description":"Conditionally filter","nullable":true},"index_fields":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Array of index fields","nullable":true},"sets":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreSet"},"readOnly":true,"description":"Sets","nullable":true},"tags":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"An array of arbitrary string tags provided in the model for this explore.","nullable":true},"errors":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreError"},"readOnly":true,"description":"Errors","nullable":true},"fields":{"$ref":"#/components/schemas/LookmlModelExploreFieldset"},"joins":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreJoins"},"readOnly":true,"description":"Views joined into this explore","nullable":true},"group_label":{"type":"string","readOnly":true,"description":"Label used to group explores in the navigation menus","nullable":true},"supported_measure_types":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreSupportedMeasureType"},"readOnly":true,"description":"An array of items describing which custom measure types are supported for creating a custom measure 'based_on' each possible dimension type.","nullable":false}},"x-looker-status":"stable"},"LookmlModelExploreSupportedMeasureType":{"properties":{"dimension_type":{"type":"string","readOnly":true,"nullable":true},"measure_types":{"type":"array","items":{"type":"string"},"readOnly":true,"nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreAccessFilter":{"properties":{"field":{"type":"string","readOnly":true,"description":"Field to be filtered","nullable":true},"user_attribute":{"type":"string","readOnly":true,"description":"User attribute name","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreConditionallyFilter":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name","nullable":true},"value":{"type":"string","readOnly":true,"description":"Value","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreAlwaysFilter":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name","nullable":true},"value":{"type":"string","readOnly":true,"description":"Value","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreAlias":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name","nullable":true},"value":{"type":"string","readOnly":true,"description":"Value","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreSet":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name","nullable":true},"value":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Value set","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreError":{"properties":{"message":{"type":"string","readOnly":true,"description":"Error Message","nullable":true},"details":{"type":"any","format":"any","readOnly":true,"description":"Details","nullable":true},"error_pos":{"type":"string","readOnly":true,"description":"Error source location","nullable":true},"field_error":{"type":"boolean","readOnly":true,"description":"Is this a field error","nullable":false}},"x-looker-status":"stable"},"LookmlModelExploreFieldset":{"properties":{"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreField"},"readOnly":true,"description":"Array of dimensions","nullable":true},"measures":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreField"},"readOnly":true,"description":"Array of measures","nullable":true},"filters":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreField"},"readOnly":true,"description":"Array of filters","nullable":true},"parameters":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreField"},"readOnly":true,"description":"Array of parameters","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreField":{"properties":{"align":{"type":"string","readOnly":true,"enum":["left","right"],"description":"The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: \"left\", \"right\".","nullable":false},"can_filter":{"type":"boolean","readOnly":true,"description":"Whether it's possible to filter on this field.","nullable":false},"category":{"type":"string","readOnly":true,"enum":["parameter","filter","measure","dimension"],"description":"Field category Valid values are: \"parameter\", \"filter\", \"measure\", \"dimension\".","nullable":true},"default_filter_value":{"type":"string","readOnly":true,"description":"The default value that this field uses when filtering. Null if there is no default value.","nullable":true},"description":{"type":"string","readOnly":true,"description":"Description","nullable":true},"dimension_group":{"type":"string","readOnly":true,"description":"Dimension group if this field is part of a dimension group. If not, this will be null.","nullable":true},"enumerations":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreFieldEnumeration"},"readOnly":true,"description":"An array enumerating all the possible values that this field can contain. When null, there is no limit to the set of possible values this field can contain.","nullable":true},"error":{"type":"string","readOnly":true,"description":"An error message indicating a problem with the definition of this field. If there are no errors, this will be null.","nullable":true},"field_group_label":{"type":"string","readOnly":true,"description":"A label creating a grouping of fields. All fields with this label should be presented together when displayed in a UI.","nullable":true},"field_group_variant":{"type":"string","readOnly":true,"description":"When presented in a field group via field_group_label, a shorter name of the field to be displayed in that context.","nullable":true},"fill_style":{"type":"string","readOnly":true,"enum":["enumeration","range"],"description":"The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: \"enumeration\", \"range\".","nullable":true},"fiscal_month_offset":{"type":"integer","format":"int64","readOnly":true,"description":"An offset (in months) from the calendar start month to the fiscal start month defined in the LookML model this field belongs to.","nullable":false},"has_allowed_values":{"type":"boolean","readOnly":true,"description":"Whether this field has a set of allowed_values specified in LookML.","nullable":false},"hidden":{"type":"boolean","readOnly":true,"description":"Whether this field should be hidden from the user interface.","nullable":false},"is_filter":{"type":"boolean","readOnly":true,"description":"Whether this field is a filter.","nullable":false},"is_fiscal":{"type":"boolean","readOnly":true,"description":"Whether this field represents a fiscal time value.","nullable":false},"is_numeric":{"type":"boolean","readOnly":true,"description":"Whether this field is of a type that represents a numeric value.","nullable":false},"is_timeframe":{"type":"boolean","readOnly":true,"description":"Whether this field is of a type that represents a time value.","nullable":false},"can_time_filter":{"type":"boolean","readOnly":true,"description":"Whether this field can be time filtered.","nullable":false},"time_interval":{"$ref":"#/components/schemas/LookmlModelExploreFieldTimeInterval"},"label":{"type":"string","readOnly":true,"description":"Fully-qualified human-readable label of the field.","nullable":false},"label_from_parameter":{"type":"string","readOnly":true,"description":"The name of the parameter that will provide a parameterized label for this field, if available in the current context.","nullable":true},"label_short":{"type":"string","readOnly":true,"description":"The human-readable label of the field, without the view label.","nullable":false},"lookml_link":{"type":"string","readOnly":true,"description":"A URL linking to the definition of this field in the LookML IDE.","nullable":true},"map_layer":{"$ref":"#/components/schemas/LookmlModelExploreFieldMapLayer"},"measure":{"type":"boolean","readOnly":true,"description":"Whether this field is a measure.","nullable":false},"name":{"type":"string","readOnly":true,"description":"Fully-qualified name of the field.","nullable":false},"strict_value_format":{"type":"boolean","readOnly":true,"description":"If yes, the field will not be localized with the user attribute number_format. Defaults to no","nullable":false},"parameter":{"type":"boolean","readOnly":true,"description":"Whether this field is a parameter.","nullable":false},"permanent":{"type":"boolean","readOnly":true,"description":"Whether this field can be removed from a query.","nullable":true},"primary_key":{"type":"boolean","readOnly":true,"description":"Whether or not the field represents a primary key.","nullable":false},"project_name":{"type":"string","readOnly":true,"description":"The name of the project this field is defined in.","nullable":true},"requires_refresh_on_sort":{"type":"boolean","readOnly":true,"description":"When true, it's not possible to re-sort this field's values without re-running the SQL query, due to database logic that affects the sort.","nullable":false},"scope":{"type":"string","readOnly":true,"description":"The LookML scope this field belongs to. The scope is typically the field's view.","nullable":false},"sortable":{"type":"boolean","readOnly":true,"description":"Whether this field can be sorted.","nullable":false},"source_file":{"type":"string","readOnly":true,"description":"The path portion of source_file_path.","nullable":false},"source_file_path":{"type":"string","readOnly":true,"description":"The fully-qualified path of the project file this field is defined in.","nullable":false},"sql":{"type":"string","readOnly":true,"description":"SQL expression as defined in the LookML model. The SQL syntax shown here is a representation intended for auditability, and is not neccessarily an exact match for what will ultimately be run in the database. It may contain special LookML syntax or annotations that are not valid SQL. This will be null if the current user does not have the see_lookml permission for the field's model.","nullable":true},"sql_case":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreFieldSqlCase"},"readOnly":true,"description":"An array of conditions and values that make up a SQL Case expression, as defined in the LookML model. The SQL syntax shown here is a representation intended for auditability, and is not neccessarily an exact match for what will ultimately be run in the database. It may contain special LookML syntax or annotations that are not valid SQL. This will be null if the current user does not have the see_lookml permission for the field's model.","nullable":true},"filters":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelExploreFieldMeasureFilters"},"readOnly":true,"description":"Array of filter conditions defined for the measure in LookML.","nullable":true},"suggest_dimension":{"type":"string","readOnly":true,"description":"The name of the dimension to base suggest queries from.","nullable":false},"suggest_explore":{"type":"string","readOnly":true,"description":"The name of the explore to base suggest queries from.","nullable":false},"suggestable":{"type":"boolean","readOnly":true,"description":"Whether or not suggestions are possible for this field.","nullable":false},"suggestions":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"If available, a list of suggestions for this field. For most fields, a suggest query is a more appropriate way to get an up-to-date list of suggestions. Or use enumerations to list all the possible values.","nullable":true},"tags":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"An array of arbitrary string tags provided in the model for this field.","nullable":false},"type":{"type":"string","readOnly":true,"description":"The LookML type of the field.","nullable":false},"user_attribute_filter_types":{"type":"array","items":{"type":"string"},"readOnly":true,"enum":["advanced_filter_string","advanced_filter_number","advanced_filter_datetime","string","number","datetime","relative_url","yesno","zipcode"],"description":"An array of user attribute types that are allowed to be used in filters on this field. Valid values are: \"advanced_filter_string\", \"advanced_filter_number\", \"advanced_filter_datetime\", \"string\", \"number\", \"datetime\", \"relative_url\", \"yesno\", \"zipcode\".","nullable":false},"value_format":{"type":"string","readOnly":true,"description":"If specified, the LookML value format string for formatting values of this field.","nullable":true},"view":{"type":"string","readOnly":true,"description":"The name of the view this field belongs to.","nullable":false},"view_label":{"type":"string","readOnly":true,"description":"The human-readable label of the view the field belongs to.","nullable":false},"dynamic":{"type":"boolean","readOnly":true,"description":"Whether this field was specified in \"dynamic_fields\" and is not part of the model.","nullable":false},"week_start_day":{"type":"string","readOnly":true,"enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"The name of the starting day of the week. Valid values are: \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"sunday\".","nullable":false},"times_used":{"type":"integer","format":"int64","readOnly":true,"description":"The number of times this field has been used in queries","nullable":false},"original_view":{"type":"string","readOnly":true,"description":"The name of the view this field is defined in. This will be different than \"view\" when the view has been joined via a different name using the \"from\" parameter.","nullable":false}},"x-looker-status":"stable"},"LookmlModelExploreFieldEnumeration":{"properties":{"label":{"type":"string","readOnly":true,"description":"Label","nullable":true},"value":{"type":"any","format":"any","x-looker-polymorphic-types":[{"type":"string"},{"type":"number","format":"float"}],"readOnly":true,"description":"Value","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreFieldTimeInterval":{"properties":{"name":{"type":"string","readOnly":true,"enum":["day","hour","minute","second","millisecond","microsecond","week","month","quarter","year"],"description":"The type of time interval this field represents a grouping of. Valid values are: \"day\", \"hour\", \"minute\", \"second\", \"millisecond\", \"microsecond\", \"week\", \"month\", \"quarter\", \"year\".","nullable":false},"count":{"type":"integer","format":"int64","readOnly":true,"description":"The number of intervals this field represents a grouping of.","nullable":false}},"x-looker-status":"stable"},"LookmlModelExploreFieldSqlCase":{"properties":{"value":{"type":"string","readOnly":true,"description":"SQL Case label value","nullable":true},"condition":{"type":"string","readOnly":true,"description":"SQL Case condition expression","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreFieldMeasureFilters":{"properties":{"field":{"type":"string","readOnly":true,"description":"Filter field name","nullable":true},"condition":{"type":"string","readOnly":true,"description":"Filter condition value","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreFieldMapLayer":{"properties":{"url":{"type":"string","readOnly":true,"description":"URL to the map layer resource.","nullable":false},"name":{"type":"string","readOnly":true,"description":"Name of the map layer, as defined in LookML.","nullable":false},"feature_key":{"type":"string","readOnly":true,"description":"Specifies the name of the TopoJSON object that the map layer references. If not specified, use the first object..","nullable":true},"property_key":{"type":"string","readOnly":true,"description":"Selects which property from the TopoJSON data to plot against. TopoJSON supports arbitrary metadata for each region. When null, the first matching property should be used.","nullable":true},"property_label_key":{"type":"string","readOnly":true,"description":"Which property from the TopoJSON data to use to label the region. When null, property_key should be used.","nullable":true},"projection":{"type":"string","readOnly":true,"description":"The preferred geographic projection of the map layer when displayed in a visualization that supports multiple geographic projections.","nullable":true},"format":{"type":"string","readOnly":true,"enum":["topojson","vector_tile_region"],"description":"Specifies the data format of the region information. Valid values are: \"topojson\", \"vector_tile_region\".","nullable":false},"extents_json_url":{"type":"string","readOnly":true,"description":"Specifies the URL to a JSON file that defines the geographic extents of each region available in the map layer. This data is used to automatically center the map on the available data for visualization purposes. The JSON file must be a JSON object where the keys are the mapping value of the feature (as specified by property_key) and the values are arrays of four numbers representing the west longitude, south latitude, east longitude, and north latitude extents of the region. The object must include a key for every possible value of property_key.","nullable":true},"max_zoom_level":{"type":"integer","format":"int64","readOnly":true,"description":"The minimum zoom level that the map layer may be displayed at, for visualizations that support zooming.","nullable":true},"min_zoom_level":{"type":"integer","format":"int64","readOnly":true,"description":"The maximum zoom level that the map layer may be displayed at, for visualizations that support zooming.","nullable":true}},"x-looker-status":"stable"},"LookmlModelExploreJoins":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name of this join (and name of the view to join)","nullable":true},"dependent_fields":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Fields referenced by the join","nullable":true},"fields":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Fields of the joined view to pull into this explore","nullable":true},"foreign_key":{"type":"string","readOnly":true,"description":"Name of the dimension in this explore whose value is in the primary key of the joined view","nullable":true},"from":{"type":"string","readOnly":true,"description":"Name of view to join","nullable":true},"outer_only":{"type":"boolean","readOnly":true,"description":"Specifies whether all queries must use an outer join","nullable":true},"relationship":{"type":"string","readOnly":true,"description":"many_to_one, one_to_one, one_to_many, many_to_many","nullable":true},"required_joins":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Names of joins that must always be included in SQL queries","nullable":true},"sql_foreign_key":{"type":"string","readOnly":true,"description":"SQL expression that produces a foreign key","nullable":true},"sql_on":{"type":"string","readOnly":true,"description":"SQL ON expression describing the join condition","nullable":true},"sql_table_name":{"type":"string","readOnly":true,"description":"SQL table name to join","nullable":true},"type":{"type":"string","readOnly":true,"description":"The join type: left_outer, full_outer, inner, or cross","nullable":true},"view_label":{"type":"string","readOnly":true,"description":"Label to display in UI selectors","nullable":true}},"x-looker-status":"stable"},"LookmlModel":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"allowed_db_connection_names":{"type":"array","items":{"type":"string"},"description":"Array of names of connections this model is allowed to use","nullable":true},"explores":{"type":"array","items":{"$ref":"#/components/schemas/LookmlModelNavExplore"},"readOnly":true,"description":"Array of explores (if has_content)","nullable":true},"has_content":{"type":"boolean","readOnly":true,"description":"Does this model declaration have have lookml content?","nullable":false},"label":{"type":"string","readOnly":true,"description":"UI-friendly name for this model","nullable":true},"name":{"type":"string","description":"Name of the model. Also used as the unique identifier","nullable":true},"project_name":{"type":"string","description":"Name of project containing the model","nullable":true},"unlimited_db_connections":{"type":"boolean","description":"Is this model allowed to use all current and future connections","nullable":false}},"x-looker-status":"stable"},"LookmlTest":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"model_name":{"type":"string","readOnly":true,"description":"Name of model containing this test.","nullable":false},"name":{"type":"string","readOnly":true,"description":"Name of this test.","nullable":false},"explore_name":{"type":"string","readOnly":true,"description":"Name of the explore this test runs a query against","nullable":false},"query_url_params":{"type":"string","readOnly":true,"description":"The url parameters that can be used to reproduce this test's query on an explore.","nullable":false},"file":{"type":"string","readOnly":true,"description":"Name of the LookML file containing this test.","nullable":false},"line":{"type":"integer","format":"int64","readOnly":true,"description":"Line number of this test in LookML.","nullable":true}},"x-looker-status":"stable"},"LookmlTestResult":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"model_name":{"type":"string","readOnly":true,"description":"Name of model containing this test.","nullable":false},"test_name":{"type":"string","readOnly":true,"description":"Name of this test.","nullable":false},"assertions_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of assertions in this test","nullable":false},"assertions_failed":{"type":"integer","format":"int64","readOnly":true,"description":"Number of assertions passed in this test","nullable":false},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ProjectError"},"readOnly":true,"description":"A list of any errors encountered by the test.","nullable":true},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/ProjectError"},"readOnly":true,"description":"A list of any warnings encountered by the test.","nullable":true},"success":{"type":"boolean","readOnly":true,"description":"True if this test passsed without errors.","nullable":false}},"x-looker-status":"stable"},"Manifest":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"name":{"type":"string","readOnly":true,"description":"Manifest project name","nullable":true},"imports":{"type":"array","items":{"$ref":"#/components/schemas/ImportedProject"},"readOnly":true,"description":"Imports for a project","nullable":true},"localization_settings":{"$ref":"#/components/schemas/LocalizationSettings"}},"x-looker-status":"stable"},"MergeQuery":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"column_limit":{"type":"string","description":"Column Limit","nullable":true},"dynamic_fields":{"type":"string","description":"Dynamic Fields","nullable":true},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"pivots":{"type":"array","items":{"type":"string"},"description":"Pivots","nullable":true},"result_maker_id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique to get results","nullable":true},"sorts":{"type":"array","items":{"type":"string"},"description":"Sorts","nullable":true},"source_queries":{"type":"array","items":{"$ref":"#/components/schemas/MergeQuerySourceQuery"},"description":"Source Queries defining the results to be merged.","nullable":true},"total":{"type":"boolean","description":"Total","nullable":false},"vis_config":{"type":"object","additionalProperties":{"type":"string"},"description":"Visualization Config","nullable":true}},"x-looker-status":"stable"},"MergeQuerySourceQuery":{"properties":{"merge_fields":{"type":"array","items":{"$ref":"#/components/schemas/MergeFields"},"description":"An array defining which fields of the source query are mapped onto fields of the merge query","nullable":true},"name":{"type":"string","description":"Display name","nullable":true},"query_id":{"type":"integer","format":"int64","description":"Id of the query to merge","nullable":true}},"x-looker-status":"stable"},"MergeFields":{"properties":{"field_name":{"type":"string","description":"Field name to map onto in the merged results","nullable":true},"source_field_name":{"type":"string","description":"Field name from the source query","nullable":true}},"x-looker-status":"stable"},"MobileSettings":{"properties":{"mobile_force_authentication":{"type":"boolean","readOnly":true,"description":"Specifies whether the force authentication option is enabled for mobile","nullable":false},"mobile_app_integration":{"type":"boolean","readOnly":true,"description":"Specifies whether mobile access for this instance is enabled.","nullable":false}},"x-looker-status":"beta"},"ModelSet":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"all_access":{"type":"boolean","readOnly":true,"nullable":false},"built_in":{"type":"boolean","readOnly":true,"nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"models":{"type":"array","items":{"type":"string"},"nullable":true},"name":{"type":"string","description":"Name of ModelSet","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"OauthClientApp":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"client_guid":{"type":"string","readOnly":true,"description":"The globally unique id of this application","nullable":false},"redirect_uri":{"type":"string","description":"The uri with which this application will receive an auth code by browser redirect.","nullable":false},"display_name":{"type":"string","description":"The application's display name","nullable":false},"description":{"type":"string","description":"A description of the application that will be displayed to users","nullable":false},"enabled":{"type":"boolean","description":"When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused.","nullable":false},"group_id":{"type":"integer","format":"int64","description":"If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance","nullable":true},"tokens_invalid_before":{"type":"string","format":"date-time","readOnly":true,"description":"All auth codes, access tokens, and refresh tokens issued for this application prior to this date-time for ALL USERS will be invalid.","nullable":false},"activated_users":{"type":"array","items":{"$ref":"#/components/schemas/UserPublic"},"readOnly":true,"description":"All users who have been activated to use this app","nullable":false}},"x-looker-status":"beta"},"OIDCConfig":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"alternate_email_login_allowed":{"type":"boolean","description":"Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled.","nullable":false},"audience":{"type":"string","description":"OpenID Provider Audience","nullable":true},"auth_requires_role":{"type":"boolean","description":"Users will not be allowed to login at all unless a role for them is found in OIDC if set to true","nullable":false},"authorization_endpoint":{"type":"string","format":"uri-reference","description":"OpenID Provider Authorization Url","nullable":true},"default_new_user_group_ids":{"type":"array","items":{"type":"integer","format":"int64"},"x-looker-write-only":true,"description":"(Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC","nullable":true},"default_new_user_groups":{"type":"array","items":{"$ref":"#/components/schemas/Group"},"readOnly":true,"description":"(Read-only) Groups that will be applied to new users the first time they login via OIDC","nullable":true},"default_new_user_role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"x-looker-write-only":true,"description":"(Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC","nullable":true},"default_new_user_roles":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"readOnly":true,"description":"(Read-only) Roles that will be applied to new users the first time they login via OIDC","nullable":true},"enabled":{"type":"boolean","description":"Enable/Disable OIDC authentication for the server","nullable":false},"groups":{"type":"array","items":{"$ref":"#/components/schemas/OIDCGroupRead"},"readOnly":true,"description":"(Read-only) Array of mappings between OIDC Groups and Looker Roles","nullable":true},"groups_attribute":{"type":"string","description":"Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values'","nullable":true},"groups_with_role_ids":{"type":"array","items":{"$ref":"#/components/schemas/OIDCGroupWrite"},"description":"(Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids","nullable":true},"identifier":{"type":"string","description":"Relying Party Identifier (provided by OpenID Provider)","nullable":true},"issuer":{"type":"string","description":"OpenID Provider Issuer","nullable":true},"modified_at":{"type":"string","format":"date-time","readOnly":true,"description":"When this config was last modified","nullable":true},"modified_by":{"type":"integer","format":"int64","readOnly":true,"description":"User id of user who last modified this config","nullable":true},"new_user_migration_types":{"type":"string","description":"Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google'","nullable":true},"scopes":{"type":"array","items":{"type":"string"},"description":"Array of scopes to request.","nullable":true},"secret":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Relying Party Secret (provided by OpenID Provider)","nullable":true},"set_roles_from_groups":{"type":"boolean","description":"Set user roles in Looker based on groups from OIDC","nullable":false},"test_slug":{"type":"string","readOnly":true,"description":"Slug to identify configurations that are created in order to run a OIDC config test","nullable":true},"token_endpoint":{"type":"string","description":"OpenID Provider Token Url","nullable":true},"user_attribute_map_email":{"type":"string","description":"Name of user record attributes used to indicate email address field","nullable":true},"user_attribute_map_first_name":{"type":"string","description":"Name of user record attributes used to indicate first name","nullable":true},"user_attribute_map_last_name":{"type":"string","description":"Name of user record attributes used to indicate last name","nullable":true},"user_attributes":{"type":"array","items":{"$ref":"#/components/schemas/OIDCUserAttributeRead"},"readOnly":true,"description":"(Read-only) Array of mappings between OIDC User Attributes and Looker User Attributes","nullable":true},"user_attributes_with_ids":{"type":"array","items":{"$ref":"#/components/schemas/OIDCUserAttributeWrite"},"description":"(Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids","nullable":true},"userinfo_endpoint":{"type":"string","format":"uri-reference","description":"OpenID Provider User Information Url","nullable":true},"allow_normal_group_membership":{"type":"boolean","description":"Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login.","nullable":false},"allow_roles_from_normal_groups":{"type":"boolean","description":"OIDC auth'd users will inherit roles from non-reflected Looker groups.","nullable":false},"allow_direct_roles":{"type":"boolean","description":"Allows roles to be directly assigned to OIDC auth'd users.","nullable":false},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"OIDCGroupRead":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"looker_group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id of group in Looker","nullable":true},"looker_group_name":{"type":"string","readOnly":true,"description":"Name of group in Looker","nullable":true},"name":{"type":"string","readOnly":true,"description":"Name of group in OIDC","nullable":true},"roles":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"readOnly":true,"description":"Looker Roles","nullable":true}},"x-looker-status":"stable"},"OIDCGroupWrite":{"properties":{"id":{"type":"integer","format":"int64","description":"Unique Id","nullable":true},"looker_group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id of group in Looker","nullable":true},"looker_group_name":{"type":"string","description":"Name of group in Looker","nullable":true},"name":{"type":"string","description":"Name of group in OIDC","nullable":true},"role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Looker Role Ids","nullable":true}},"x-looker-status":"stable"},"OIDCUserAttributeRead":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name of User Attribute in OIDC","nullable":true},"required":{"type":"boolean","readOnly":true,"description":"Required to be in OIDC assertion for login to be allowed to succeed","nullable":false},"user_attributes":{"type":"array","items":{"$ref":"#/components/schemas/UserAttribute"},"readOnly":true,"description":"Looker User Attributes","nullable":true}},"x-looker-status":"stable"},"OIDCUserAttributeWrite":{"properties":{"name":{"type":"string","description":"Name of User Attribute in OIDC","nullable":true},"required":{"type":"boolean","description":"Required to be in OIDC assertion for login to be allowed to succeed","nullable":false},"user_attribute_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Looker User Attribute Ids","nullable":true}},"x-looker-status":"stable"},"PasswordConfig":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"min_length":{"type":"integer","format":"int64","description":"Minimum number of characters required for a new password. Must be between 7 and 100","nullable":true},"require_numeric":{"type":"boolean","description":"Require at least one numeric character","nullable":false},"require_upperlower":{"type":"boolean","description":"Require at least one uppercase and one lowercase letter","nullable":false},"require_special":{"type":"boolean","description":"Require at least one special character","nullable":false}},"x-looker-status":"stable"},"Permission":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"permission":{"type":"string","readOnly":true,"description":"Permission symbol","nullable":true},"parent":{"type":"string","readOnly":true,"description":"Dependency parent symbol","nullable":true},"description":{"type":"string","readOnly":true,"description":"Description","nullable":true}},"x-looker-status":"stable"},"PermissionSet":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"all_access":{"type":"boolean","readOnly":true,"nullable":false},"built_in":{"type":"boolean","readOnly":true,"nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"name":{"type":"string","description":"Name of PermissionSet","nullable":true},"permissions":{"type":"array","items":{"type":"string"},"nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"ProjectFile":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"An opaque token uniquely identifying a file within a project. Avoid parsing or decomposing the text of this token. This token is stable within a Looker release but may change between Looker releases","nullable":false},"path":{"type":"string","readOnly":true,"description":"Path, file name, and extension of the file relative to the project root directory","nullable":true},"title":{"type":"string","readOnly":true,"description":"Display name","nullable":true},"type":{"type":"string","readOnly":true,"description":"File type: model, view, etc","nullable":true},"extension":{"type":"string","readOnly":true,"description":"The extension of the file: .view.lkml, .model.lkml, etc","nullable":true},"mime_type":{"type":"string","readOnly":true,"description":"File mime type","nullable":true},"editable":{"type":"boolean","readOnly":true,"description":"State of editability for the file.","nullable":false},"git_status":{"$ref":"#/components/schemas/GitStatus"}},"x-looker-status":"stable"},"Project":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Project Id","nullable":false},"name":{"type":"string","description":"Project display name","nullable":false},"uses_git":{"type":"boolean","readOnly":true,"description":"If true the project is configured with a git repository","nullable":false},"git_remote_url":{"type":"string","description":"Git remote repository url","nullable":true},"git_username":{"type":"string","description":"Git username for HTTPS authentication. (For production only, if using user attributes.)","nullable":true},"git_password":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.)","nullable":true},"git_production_branch_name":{"type":"string","description":"Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher.","nullable":false},"use_git_cookie_auth":{"type":"boolean","description":"If true, the project uses a git cookie for authentication.","nullable":false},"git_username_user_attribute":{"type":"string","description":"User attribute name for username in per-user HTTPS authentication.","nullable":true},"git_password_user_attribute":{"type":"string","description":"User attribute name for password in per-user HTTPS authentication.","nullable":true},"git_service_name":{"type":"string","description":"Name of the git service provider","nullable":true},"git_application_server_http_port":{"type":"integer","format":"int64","description":"Port that HTTP(S) application server is running on (for PRs, file browsing, etc.)","nullable":true},"git_application_server_http_scheme":{"type":"string","description":"Scheme that is running on application server (for PRs, file browsing, etc.)","nullable":true},"deploy_secret":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated.","nullable":true},"unset_deploy_secret":{"type":"boolean","x-looker-write-only":true,"description":"(Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint.","nullable":false},"pull_request_mode":{"type":"string","enum":["off","links","recommended","required"],"description":"The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".","nullable":false},"validation_required":{"type":"boolean","description":"Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository","nullable":false},"git_release_mgmt_enabled":{"type":"boolean","description":"If true, advanced git release management is enabled for this project","nullable":false},"allow_warnings":{"type":"boolean","description":"Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false).","nullable":false},"is_example":{"type":"boolean","readOnly":true,"description":"If true the project is an example project and cannot be modified","nullable":false},"dependency_status":{"type":"string","description":"Status of dependencies in your manifest & lockfile","nullable":true}},"x-looker-status":"stable"},"ProjectError":{"properties":{"code":{"type":"string","readOnly":true,"description":"A stable token that uniquely identifies this class of error, ignoring parameter values. Error message text may vary due to parameters or localization, but error codes do not. For example, a \"File not found\" error will have the same error code regardless of the filename in question or the user's display language","nullable":true},"severity":{"type":"string","readOnly":true,"description":"Severity: fatal, error, warning, info, success","nullable":true},"kind":{"type":"string","readOnly":true,"description":"Error classification: syntax, deprecation, model_configuration, etc","nullable":true},"message":{"type":"string","readOnly":true,"description":"Error message which may contain information such as dashboard or model names that may be considered sensitive in some use cases. Avoid storing or sending this message outside of Looker","nullable":true},"field_name":{"type":"string","readOnly":true,"description":"The field associated with this error","nullable":true},"file_path":{"type":"string","readOnly":true,"description":"Name of the file containing this error","nullable":true},"line_number":{"type":"integer","format":"int64","readOnly":true,"description":"Line number in the file of this error","nullable":true},"model_id":{"type":"string","readOnly":true,"description":"The model associated with this error","nullable":true},"explore":{"type":"string","readOnly":true,"description":"The explore associated with this error","nullable":true},"help_url":{"type":"string","readOnly":true,"description":"A link to Looker documentation about this error","nullable":true},"params":{"type":"object","additionalProperties":{"type":"any","format":"any"},"readOnly":true,"description":"Error parameters","nullable":true},"sanitized_message":{"type":"string","readOnly":true,"description":"A version of the error message that does not contain potentially sensitive information. Suitable for situations in which messages are stored or sent to consumers outside of Looker, such as external logs. Sanitized messages will display \"(?)\" where sensitive information would appear in the corresponding non-sanitized message","nullable":true}},"x-looker-status":"stable"},"ModelsNotValidated":{"properties":{"name":{"type":"string","readOnly":true,"description":"Model name","nullable":true},"project_file_id":{"type":"string","readOnly":true,"description":"Project file","nullable":true}},"x-looker-status":"stable"},"ProjectValidation":{"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ProjectError"},"readOnly":true,"description":"A list of project errors","nullable":true},"project_digest":{"type":"string","readOnly":true,"description":"A hash value computed from the project's current state","nullable":true},"models_not_validated":{"type":"array","items":{"$ref":"#/components/schemas/ModelsNotValidated"},"readOnly":true,"description":"A list of models which were not fully validated","nullable":true},"computation_time":{"type":"number","format":"float","readOnly":true,"description":"Duration of project validation in seconds","nullable":true}},"x-looker-status":"stable"},"ProjectValidationCache":{"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ProjectError"},"readOnly":true,"description":"A list of project errors","nullable":true},"project_digest":{"type":"string","readOnly":true,"description":"A hash value computed from the project's current state","nullable":true},"models_not_validated":{"type":"array","items":{"$ref":"#/components/schemas/ModelsNotValidated"},"readOnly":true,"description":"A list of models which were not fully validated","nullable":true},"computation_time":{"type":"number","format":"float","readOnly":true,"description":"Duration of project validation in seconds","nullable":true},"stale":{"type":"boolean","readOnly":true,"description":"If true, the cached project validation results are no longer accurate because the project has changed since the cached results were calculated","nullable":false}},"x-looker-status":"stable"},"ProjectWorkspace":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"project_id":{"type":"string","readOnly":true,"description":"The id of the project","nullable":true},"workspace_id":{"type":"string","readOnly":true,"description":"The id of the local workspace containing the project files","nullable":true},"git_status":{"type":"string","readOnly":true,"description":"The status of the local git directory","nullable":true},"git_head":{"type":"string","readOnly":true,"description":"Git head revision name","nullable":true},"dependency_status":{"type":"string","readOnly":true,"enum":["lock_optional","lock_required","lock_error","install_none"],"description":"Status of the dependencies in your project. Valid values are: \"lock_optional\", \"lock_required\", \"lock_error\", \"install_none\".","nullable":true},"git_branch":{"$ref":"#/components/schemas/GitBranch"},"lookml_type":{"type":"string","readOnly":true,"description":"The lookml syntax used by all files in this project","nullable":true}},"x-looker-status":"stable"},"Query":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"model":{"type":"string","description":"Model","nullable":false},"view":{"type":"string","description":"Explore Name","nullable":false},"fields":{"type":"array","items":{"type":"string"},"description":"Fields","nullable":true},"pivots":{"type":"array","items":{"type":"string"},"description":"Pivots","nullable":true},"fill_fields":{"type":"array","items":{"type":"string"},"description":"Fill Fields","nullable":true},"filters":{"type":"object","additionalProperties":{"type":"string"},"description":"Filters","nullable":true},"filter_expression":{"type":"string","description":"Filter Expression","nullable":true},"sorts":{"type":"array","items":{"type":"string"},"description":"Sorting for the query results. Use the format `[\"view.field\", ...]` to sort on fields in ascending order. Use the format `[\"view.field desc\", ...]` to sort on fields in descending order. Use `[\"__UNSORTED__\"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort.","nullable":true},"limit":{"type":"string","description":"Limit","nullable":true},"column_limit":{"type":"string","description":"Column Limit","nullable":true},"total":{"type":"boolean","description":"Total","nullable":true},"row_total":{"type":"string","description":"Raw Total","nullable":true},"subtotals":{"type":"array","items":{"type":"string"},"description":"Fields on which to run subtotals","nullable":true},"vis_config":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A \"type\" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties.","nullable":true},"filter_config":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over \"filters\". When creating a query or modifying an existing query, \"filter_config\" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque.","nullable":true},"visible_ui_sections":{"type":"string","description":"Visible UI Sections","nullable":true},"slug":{"type":"string","readOnly":true,"description":"Slug","nullable":true},"dynamic_fields":{"type":"string","description":"Dynamic Fields","nullable":true},"client_id":{"type":"string","description":"Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated.","nullable":true},"share_url":{"type":"string","readOnly":true,"description":"Share Url","nullable":true},"expanded_share_url":{"type":"string","readOnly":true,"description":"Expanded Share Url","nullable":true},"url":{"type":"string","readOnly":true,"description":"Expanded Url","nullable":true},"query_timezone":{"type":"string","description":"Query Timezone","nullable":true},"has_table_calculations":{"type":"boolean","readOnly":true,"description":"Has Table Calculations","nullable":false}},"x-looker-status":"stable","required":["model","view"]},"CreateQueryTask":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"query_id":{"type":"integer","format":"int64","description":"Id of query to run","nullable":true},"result_format":{"type":"string","enum":["inline_json","json","json_detail","json_fe","csv","html","md","txt","xlsx","gsxml"],"description":"Desired async query result format. Valid values are: \"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\".","nullable":true},"source":{"type":"string","description":"Source of query task","nullable":true},"deferred":{"type":"boolean","description":"Create the task but defer execution","nullable":false},"look_id":{"type":"integer","format":"int64","description":"Id of look associated with query.","nullable":true},"dashboard_id":{"type":"string","description":"Id of dashboard associated with query.","nullable":true}},"x-looker-status":"stable","required":["query_id","result_format"]},"QueryTask":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"query_id":{"type":"integer","format":"int64","description":"Id of query","nullable":true},"query":{"$ref":"#/components/schemas/Query"},"generate_links":{"type":"boolean","description":"whether or not to generate links in the query response.","nullable":false},"force_production":{"type":"boolean","description":"Use production models to run query (even is user is in dev mode).","nullable":false},"path_prefix":{"type":"string","description":"Prefix to use for drill links.","nullable":true},"cache":{"type":"boolean","description":"Whether or not to use the cache","nullable":false},"server_table_calcs":{"type":"boolean","description":"Whether or not to run table calculations on the server","nullable":false},"cache_only":{"type":"boolean","description":"Retrieve any results from cache even if the results have expired.","nullable":false},"cache_key":{"type":"string","readOnly":true,"description":"cache key used to cache query.","nullable":true},"status":{"type":"string","description":"Status of query task.","nullable":true},"source":{"type":"string","description":"Source of query task.","nullable":true},"runtime":{"type":"number","format":"float","readOnly":true,"description":"Runtime of prior queries.","nullable":true},"rebuild_pdts":{"type":"boolean","description":"Rebuild PDTS used in query.","nullable":false},"result_source":{"type":"string","readOnly":true,"description":"Source of the results of the query.","nullable":true},"look_id":{"type":"integer","format":"int64","description":"Id of look associated with query.","nullable":true},"dashboard_id":{"type":"string","description":"Id of dashboard associated with query.","nullable":true},"result_format":{"type":"string","readOnly":true,"description":"The data format of the query results.","nullable":true}},"x-looker-status":"stable"},"RenderTask":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"created_at":{"type":"string","readOnly":true,"description":"Date/Time render task was created","nullable":true},"dashboard_filters":{"type":"string","readOnly":true,"description":"Filter values to apply to the dashboard queries, in URL query format","nullable":true},"dashboard_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of dashboard to render","nullable":true},"dashboard_style":{"type":"string","readOnly":true,"description":"Dashboard layout style: single_column or tiled","nullable":true},"finalized_at":{"type":"string","readOnly":true,"description":"Date/Time render task was completed","nullable":true},"height":{"type":"integer","format":"int64","readOnly":true,"description":"Output height in pixels. Flowed layouts may ignore this value.","nullable":true},"id":{"type":"string","readOnly":true,"description":"Id of this render task","nullable":false},"look_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of look to render","nullable":true},"lookml_dashboard_id":{"type":"string","readOnly":true,"description":"Id of lookml dashboard to render","nullable":true},"query_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of query to render","nullable":true},"query_runtime":{"type":"number","format":"double","readOnly":true,"description":"Number of seconds elapsed running queries","nullable":true},"render_runtime":{"type":"number","format":"double","readOnly":true,"description":"Number of seconds elapsed rendering data","nullable":true},"result_format":{"type":"string","readOnly":true,"description":"Output format: pdf, png, or jpg","nullable":true},"runtime":{"type":"number","format":"double","readOnly":true,"description":"Total seconds elapsed for render task","nullable":true},"status":{"type":"string","readOnly":true,"description":"Render task status: enqueued_for_query, querying, enqueued_for_render, rendering, success, failure","nullable":true},"status_detail":{"type":"string","readOnly":true,"description":"Additional information about the current status","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"The user account permissions in which the render task will execute","nullable":true},"width":{"type":"integer","format":"int64","readOnly":true,"description":"Output width in pixels","nullable":true}},"x-looker-status":"stable"},"CreateDashboardRenderTask":{"properties":{"dashboard_filters":{"type":"string","description":"Filter values to apply to the dashboard queries, in URL query format","nullable":true},"dashboard_style":{"type":"string","description":"Dashboard layout style: single_column or tiled","nullable":true}},"x-looker-status":"stable"},"RepositoryCredential":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"Unique Id","nullable":false},"root_project_id":{"type":"string","readOnly":true,"description":"Root project Id","nullable":false},"remote_url":{"type":"string","readOnly":true,"description":"Git remote repository url","nullable":false},"git_username":{"type":"string","description":"Git username for HTTPS authentication.","nullable":true},"git_password":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) Git password for HTTPS authentication.","nullable":true},"ssh_public_key":{"type":"string","description":"Public deploy key for SSH authentication.","nullable":true},"is_configured":{"type":"boolean","readOnly":true,"description":"Whether the credentials have been configured for the Git Repository.","nullable":false}},"x-looker-status":"stable"},"ResultMakerFilterablesListen":{"properties":{"dashboard_filter_name":{"type":"string","description":"The name of a dashboard filter to listen to.","nullable":true},"field":{"type":"string","description":"The name of the field in the filterable to filter with the value of the dashboard filter.","nullable":true}},"x-looker-status":"stable"},"ResultMakerFilterables":{"properties":{"model":{"type":"string","readOnly":true,"description":"The model this filterable comes from (used for field suggestions).","nullable":true},"view":{"type":"string","readOnly":true,"description":"The view this filterable comes from (used for field suggestions).","nullable":true},"name":{"type":"string","readOnly":true,"description":"The name of the filterable thing (Query or Merged Results).","nullable":true},"listen":{"type":"array","items":{"$ref":"#/components/schemas/ResultMakerFilterablesListen"},"readOnly":true,"description":"array of dashboard_filter_name: and field: objects.","nullable":true}},"x-looker-status":"stable"},"ResultMakerWithIdVisConfigAndDynamicFields":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id.","nullable":false},"dynamic_fields":{"type":"string","readOnly":true,"description":"JSON string of dynamic field information.","nullable":true},"filterables":{"type":"array","items":{"$ref":"#/components/schemas/ResultMakerFilterables"},"readOnly":true,"description":"array of items that can be filtered and information about them.","nullable":true},"sorts":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Sorts of the constituent Look, Query, or Merge Query","nullable":true},"merge_result_id":{"type":"string","readOnly":true,"description":"ID of merge result if this is a merge_result.","nullable":true},"total":{"type":"boolean","readOnly":true,"description":"Total of the constituent Look, Query, or Merge Query","nullable":false},"query_id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of query if this is a query.","nullable":true},"sql_query_id":{"type":"string","readOnly":true,"description":"ID of SQL Query if this is a SQL Runner Query","nullable":true},"query":{"$ref":"#/components/schemas/Query"},"vis_config":{"type":"object","additionalProperties":{"type":"any","format":"any"},"readOnly":true,"description":"Vis config of the constituent Query, or Merge Query.","nullable":true}},"x-looker-status":"stable"},"Role":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"name":{"type":"string","description":"Name of Role","nullable":true},"permission_set":{"$ref":"#/components/schemas/PermissionSet"},"permission_set_id":{"type":"integer","format":"int64","x-looker-write-only":true,"description":"(Write-Only) Id of permission set","nullable":true},"model_set":{"$ref":"#/components/schemas/ModelSet"},"model_set_id":{"type":"integer","format":"int64","x-looker-write-only":true,"description":"(Write-Only) Id of model set","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true},"users_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get list of users with this role","nullable":true}},"x-looker-status":"stable"},"RoleSearch":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"name":{"type":"string","description":"Name of Role","nullable":true},"permission_set":{"$ref":"#/components/schemas/PermissionSet"},"permission_set_id":{"type":"integer","format":"int64","x-looker-write-only":true,"description":"(Write-Only) Id of permission set","nullable":true},"model_set":{"$ref":"#/components/schemas/ModelSet"},"model_set_id":{"type":"integer","format":"int64","x-looker-write-only":true,"description":"(Write-Only) Id of model set","nullable":true},"user_count":{"type":"integer","format":"int64","readOnly":true,"description":"Count of users with this role","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true},"users_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get list of users with this role","nullable":true}},"x-looker-status":"beta"},"RunningQueries":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"user":{"$ref":"#/components/schemas/UserPublic"},"query":{"$ref":"#/components/schemas/Query"},"sql_query":{"$ref":"#/components/schemas/SqlQuery"},"look":{"$ref":"#/components/schemas/LookBasic"},"created_at":{"type":"string","readOnly":true,"description":"Date/Time Query was initiated","nullable":true},"completed_at":{"type":"string","readOnly":true,"description":"Date/Time Query was completed","nullable":true},"query_id":{"type":"string","readOnly":true,"description":"Query Id","nullable":true},"source":{"type":"string","readOnly":true,"description":"Source (look, dashboard, queryrunner, explore, etc.)","nullable":true},"node_id":{"type":"string","readOnly":true,"description":"Node Id","nullable":true},"slug":{"type":"string","readOnly":true,"description":"Slug","nullable":true},"query_task_id":{"type":"string","readOnly":true,"description":"ID of a Query Task","nullable":true},"cache_key":{"type":"string","readOnly":true,"description":"Cache Key","nullable":true},"connection_name":{"type":"string","readOnly":true,"description":"Connection","nullable":true},"dialect":{"type":"string","readOnly":true,"description":"Dialect","nullable":true},"connection_id":{"type":"string","readOnly":true,"description":"Connection ID","nullable":true},"message":{"type":"string","readOnly":true,"description":"Additional Information(Error message or verbose status)","nullable":true},"status":{"type":"string","readOnly":true,"description":"Status description","nullable":true},"runtime":{"type":"number","format":"double","readOnly":true,"description":"Number of seconds elapsed running the Query","nullable":true},"sql":{"type":"string","readOnly":true,"description":"SQL text of the query as run","nullable":true}},"x-looker-status":"stable"},"SamlConfig":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"enabled":{"type":"boolean","description":"Enable/Disable Saml authentication for the server","nullable":false},"idp_cert":{"type":"string","description":"Identity Provider Certificate (provided by IdP)","nullable":true},"idp_url":{"type":"string","description":"Identity Provider Url (provided by IdP)","nullable":true},"idp_issuer":{"type":"string","description":"Identity Provider Issuer (provided by IdP)","nullable":true},"idp_audience":{"type":"string","description":"Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP.","nullable":true},"allowed_clock_drift":{"type":"integer","format":"int64","description":"Count of seconds of clock drift to allow when validating timestamps of assertions.","nullable":true},"user_attribute_map_email":{"type":"string","description":"Name of user record attributes used to indicate email address field","nullable":true},"user_attribute_map_first_name":{"type":"string","description":"Name of user record attributes used to indicate first name","nullable":true},"user_attribute_map_last_name":{"type":"string","description":"Name of user record attributes used to indicate last name","nullable":true},"new_user_migration_types":{"type":"string","description":"Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google'","nullable":true},"alternate_email_login_allowed":{"type":"boolean","description":"Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled.","nullable":false},"test_slug":{"type":"string","readOnly":true,"description":"Slug to identify configurations that are created in order to run a Saml config test","nullable":true},"modified_at":{"type":"string","readOnly":true,"description":"When this config was last modified","nullable":true},"modified_by":{"type":"string","readOnly":true,"description":"User id of user who last modified this config","nullable":true},"default_new_user_roles":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"readOnly":true,"description":"(Read-only) Roles that will be applied to new users the first time they login via Saml","nullable":true},"default_new_user_groups":{"type":"array","items":{"$ref":"#/components/schemas/Group"},"readOnly":true,"description":"(Read-only) Groups that will be applied to new users the first time they login via Saml","nullable":true},"default_new_user_role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"x-looker-write-only":true,"description":"(Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml","nullable":true},"default_new_user_group_ids":{"type":"array","items":{"type":"integer","format":"int64"},"x-looker-write-only":true,"description":"(Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml","nullable":true},"set_roles_from_groups":{"type":"boolean","description":"Set user roles in Looker based on groups from Saml","nullable":false},"groups_attribute":{"type":"string","description":"Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values'","nullable":true},"groups":{"type":"array","items":{"$ref":"#/components/schemas/SamlGroupRead"},"readOnly":true,"description":"(Read-only) Array of mappings between Saml Groups and Looker Roles","nullable":true},"groups_with_role_ids":{"type":"array","items":{"$ref":"#/components/schemas/SamlGroupWrite"},"description":"(Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids","nullable":true},"auth_requires_role":{"type":"boolean","description":"Users will not be allowed to login at all unless a role for them is found in Saml if set to true","nullable":false},"user_attributes":{"type":"array","items":{"$ref":"#/components/schemas/SamlUserAttributeRead"},"readOnly":true,"description":"(Read-only) Array of mappings between Saml User Attributes and Looker User Attributes","nullable":true},"user_attributes_with_ids":{"type":"array","items":{"$ref":"#/components/schemas/SamlUserAttributeWrite"},"description":"(Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids","nullable":true},"groups_finder_type":{"type":"string","description":"Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes']","nullable":true},"groups_member_value":{"type":"string","description":"Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes'","nullable":true},"bypass_login_page":{"type":"boolean","description":"Bypass the login page when user authentication is required. Redirect to IdP immediately instead.","nullable":false},"allow_normal_group_membership":{"type":"boolean","description":"Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login.","nullable":false},"allow_roles_from_normal_groups":{"type":"boolean","description":"SAML auth'd users will inherit roles from non-reflected Looker groups.","nullable":false},"allow_direct_roles":{"type":"boolean","description":"Allows roles to be directly assigned to SAML auth'd users.","nullable":false},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"SamlGroupRead":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"looker_group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id of group in Looker","nullable":true},"looker_group_name":{"type":"string","readOnly":true,"description":"Name of group in Looker","nullable":true},"name":{"type":"string","readOnly":true,"description":"Name of group in Saml","nullable":true},"roles":{"type":"array","items":{"$ref":"#/components/schemas/Role"},"readOnly":true,"description":"Looker Roles","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to saml config","nullable":true}},"x-looker-status":"stable"},"SamlGroupWrite":{"properties":{"id":{"type":"integer","format":"int64","description":"Unique Id","nullable":true},"looker_group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id of group in Looker","nullable":true},"looker_group_name":{"type":"string","description":"Name of group in Looker","nullable":true},"name":{"type":"string","description":"Name of group in Saml","nullable":true},"role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Looker Role Ids","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to saml config","nullable":true}},"x-looker-status":"stable"},"SamlMetadataParseResult":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"idp_issuer":{"type":"string","readOnly":true,"description":"Identify Provider Issuer","nullable":true},"idp_url":{"type":"string","readOnly":true,"description":"Identify Provider Url","nullable":true},"idp_cert":{"type":"string","readOnly":true,"description":"Identify Provider Certificate","nullable":true}},"x-looker-status":"stable"},"SamlUserAttributeRead":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name of User Attribute in Saml","nullable":true},"required":{"type":"boolean","readOnly":true,"description":"Required to be in Saml assertion for login to be allowed to succeed","nullable":false},"user_attributes":{"type":"array","items":{"$ref":"#/components/schemas/UserAttribute"},"readOnly":true,"description":"Looker User Attributes","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to saml config","nullable":true}},"x-looker-status":"stable"},"SamlUserAttributeWrite":{"properties":{"name":{"type":"string","description":"Name of User Attribute in Saml","nullable":true},"required":{"type":"boolean","description":"Required to be in Saml assertion for login to be allowed to succeed","nullable":false},"user_attribute_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Looker User Attribute Ids","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to saml config","nullable":true}},"x-looker-status":"stable"},"ScheduledPlanDestination":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"scheduled_plan_id":{"type":"integer","format":"int64","description":"Id of a scheduled plan you own","nullable":true},"format":{"type":"string","description":"The data format to send to the given destination. Supported formats vary by destination, but include: \"txt\", \"csv\", \"inline_json\", \"json\", \"json_detail\", \"xlsx\", \"html\", \"wysiwyg_pdf\", \"assembled_pdf\", \"wysiwyg_png\"","nullable":true},"apply_formatting":{"type":"boolean","description":"Are values formatted? (containing currency symbols, digit separators, etc.","nullable":false},"apply_vis":{"type":"boolean","description":"Whether visualization options are applied to the results.","nullable":false},"address":{"type":"string","description":"Address for recipient. For email e.g. 'user@example.com'. For webhooks e.g. 'https://domain/path'. For Amazon S3 e.g. 's3://bucket-name/path/'. For SFTP e.g. 'sftp://host-name/path/'. ","nullable":true},"looker_recipient":{"type":"boolean","readOnly":true,"description":"Whether the recipient is a Looker user on the current instance (only applicable for email recipients)","nullable":false},"type":{"type":"string","description":"Type of the address ('email', 'webhook', 's3', or 'sftp')","nullable":true},"parameters":{"type":"string","description":"JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username.","nullable":true},"secret_parameters":{"type":"string","x-looker-write-only":true,"description":"(Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password.","nullable":true},"message":{"type":"string","description":"Optional message to be included in scheduled emails","nullable":true}},"x-looker-status":"stable"},"WriteScheduledPlan":{"properties":{"name":{"type":"string","description":"Name of this scheduled plan","nullable":true},"user_id":{"type":"integer","format":"int64","description":"User Id which owns this scheduled plan","nullable":true},"run_as_recipient":{"type":"boolean","description":"Whether schedule is run as recipient (only applicable for email recipients)","nullable":false},"enabled":{"type":"boolean","description":"Whether the ScheduledPlan is enabled","nullable":false},"look_id":{"type":"integer","format":"int64","description":"Id of a look","nullable":true},"dashboard_id":{"type":"integer","format":"int64","description":"Id of a dashboard","nullable":true},"lookml_dashboard_id":{"type":"string","description":"Id of a LookML dashboard","nullable":true},"filters_string":{"type":"string","description":"Query string to run look or dashboard with","nullable":true},"dashboard_filters":{"type":"string","x-looker-deprecated":true,"description":"(DEPRECATED) Alias for filters_string field","nullable":true},"require_results":{"type":"boolean","description":"Delivery should occur if running the dashboard or look returns results","nullable":false},"require_no_results":{"type":"boolean","description":"Delivery should occur if the dashboard look does not return results","nullable":false},"require_change":{"type":"boolean","description":"Delivery should occur if data have changed since the last run","nullable":false},"send_all_results":{"type":"boolean","description":"Will run an unlimited query and send all results.","nullable":false},"crontab":{"type":"string","description":"Vixie-Style crontab specification when to run","nullable":true},"datagroup":{"type":"string","description":"Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)","nullable":true},"timezone":{"type":"string","description":"Timezone for interpreting the specified crontab (default is Looker instance timezone)","nullable":true},"query_id":{"type":"string","description":"Query id","nullable":true},"scheduled_plan_destination":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledPlanDestination"},"description":"Scheduled plan destinations","nullable":true},"run_once":{"type":"boolean","description":"Whether the plan in question should only be run once (usually for testing)","nullable":false},"include_links":{"type":"boolean","description":"Whether links back to Looker should be included in this ScheduledPlan","nullable":false},"pdf_paper_size":{"type":"string","description":"The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".","nullable":true},"pdf_landscape":{"type":"boolean","description":"Whether the PDF should be formatted for landscape orientation","nullable":false},"embed":{"type":"boolean","description":"Whether this schedule is in an embed context or not","nullable":false},"color_theme":{"type":"string","description":"Color scheme of the dashboard if applicable","nullable":true},"long_tables":{"type":"boolean","description":"Whether or not to expand table vis to full length","nullable":false},"inline_table_width":{"type":"integer","format":"int64","description":"The pixel width at which we render the inline table visualizations","nullable":true}},"x-looker-status":"stable"},"ScheduledPlan":{"properties":{"name":{"type":"string","description":"Name of this scheduled plan","nullable":true},"user_id":{"type":"integer","format":"int64","description":"User Id which owns this scheduled plan","nullable":true},"run_as_recipient":{"type":"boolean","description":"Whether schedule is run as recipient (only applicable for email recipients)","nullable":false},"enabled":{"type":"boolean","description":"Whether the ScheduledPlan is enabled","nullable":false},"look_id":{"type":"integer","format":"int64","description":"Id of a look","nullable":true},"dashboard_id":{"type":"integer","format":"int64","description":"Id of a dashboard","nullable":true},"lookml_dashboard_id":{"type":"string","description":"Id of a LookML dashboard","nullable":true},"filters_string":{"type":"string","description":"Query string to run look or dashboard with","nullable":true},"dashboard_filters":{"type":"string","x-looker-deprecated":true,"description":"(DEPRECATED) Alias for filters_string field","nullable":true},"require_results":{"type":"boolean","description":"Delivery should occur if running the dashboard or look returns results","nullable":false},"require_no_results":{"type":"boolean","description":"Delivery should occur if the dashboard look does not return results","nullable":false},"require_change":{"type":"boolean","description":"Delivery should occur if data have changed since the last run","nullable":false},"send_all_results":{"type":"boolean","description":"Will run an unlimited query and send all results.","nullable":false},"crontab":{"type":"string","description":"Vixie-Style crontab specification when to run","nullable":true},"datagroup":{"type":"string","description":"Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)","nullable":true},"timezone":{"type":"string","description":"Timezone for interpreting the specified crontab (default is Looker instance timezone)","nullable":true},"query_id":{"type":"string","description":"Query id","nullable":true},"scheduled_plan_destination":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledPlanDestination"},"description":"Scheduled plan destinations","nullable":true},"run_once":{"type":"boolean","description":"Whether the plan in question should only be run once (usually for testing)","nullable":false},"include_links":{"type":"boolean","description":"Whether links back to Looker should be included in this ScheduledPlan","nullable":false},"pdf_paper_size":{"type":"string","description":"The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".","nullable":true},"pdf_landscape":{"type":"boolean","description":"Whether the PDF should be formatted for landscape orientation","nullable":false},"embed":{"type":"boolean","description":"Whether this schedule is in an embed context or not","nullable":false},"color_theme":{"type":"string","description":"Color scheme of the dashboard if applicable","nullable":true},"long_tables":{"type":"boolean","description":"Whether or not to expand table vis to full length","nullable":false},"inline_table_width":{"type":"integer","format":"int64","description":"The pixel width at which we render the inline table visualizations","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"created_at":{"type":"string","format":"date-time","readOnly":true,"description":"Date and time when ScheduledPlan was created","nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"description":"Date and time when ScheduledPlan was last updated","nullable":true},"title":{"type":"string","readOnly":true,"description":"Title","nullable":true},"user":{"$ref":"#/components/schemas/UserPublic"},"next_run_at":{"type":"string","format":"date-time","readOnly":true,"description":"When the ScheduledPlan will next run (null if running once)","nullable":true},"last_run_at":{"type":"string","format":"date-time","readOnly":true,"description":"When the ScheduledPlan was last run","nullable":true},"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false}},"x-looker-status":"stable"},"SchemaColumn":{"properties":{"name":{"type":"string","readOnly":true,"description":"Schema item name","nullable":true},"sql_escaped_name":{"type":"string","readOnly":true,"description":"Full name of item","nullable":true},"schema_name":{"type":"string","readOnly":true,"description":"Name of schema","nullable":true},"data_type_database":{"type":"string","readOnly":true,"description":"SQL dialect data type","nullable":false},"data_type":{"type":"string","readOnly":true,"description":"Data type","nullable":false},"data_type_looker":{"type":"string","readOnly":true,"description":"Looker data type","nullable":false},"description":{"type":"string","readOnly":true,"description":"SQL data type","nullable":true},"column_size":{"type":"integer","format":"int64","readOnly":true,"description":"Column data size","nullable":true},"snippets":{"type":"array","items":{"$ref":"#/components/schemas/Snippet"},"readOnly":true,"description":"SQL Runner snippets for this connection","nullable":false}},"x-looker-status":"beta"},"SchemaTable":{"properties":{"name":{"type":"string","readOnly":true,"description":"Schema item name","nullable":true},"sql_escaped_name":{"type":"string","readOnly":true,"description":"Full name of item","nullable":true},"schema_name":{"type":"string","readOnly":true,"description":"Name of schema","nullable":true},"rows":{"type":"integer","format":"int64","readOnly":true,"description":"Number of data rows","nullable":true},"external":{"type":"string","readOnly":true,"description":"External reference???","nullable":true},"snippets":{"type":"array","items":{"$ref":"#/components/schemas/Snippet"},"readOnly":true,"description":"SQL Runner snippets for connection","nullable":false}},"x-looker-status":"beta"},"ConnectionFeatures":{"properties":{"dialect_name":{"type":"string","readOnly":true,"description":"Name of the dialect for this connection","nullable":false},"cost_estimate":{"type":"boolean","readOnly":true,"description":"True for cost estimating support","nullable":false},"multiple_databases":{"type":"boolean","readOnly":true,"description":"True for multiple database support","nullable":false},"column_search":{"type":"boolean","readOnly":true,"description":"True for cost estimating support","nullable":false},"persistent_table_indexes":{"type":"boolean","readOnly":true,"description":"True for secondary index support","nullable":false},"persistent_derived_tables":{"type":"boolean","readOnly":true,"description":"True for persistent derived table support","nullable":false},"turtles":{"type":"boolean","readOnly":true,"description":"True for turtles support","nullable":false},"percentile":{"type":"boolean","readOnly":true,"description":"True for percentile support","nullable":false},"distinct_percentile":{"type":"boolean","readOnly":true,"description":"True for distinct percentile support","nullable":false},"stable_views":{"type":"boolean","readOnly":true,"description":"True for stable views support","nullable":false},"milliseconds":{"type":"boolean","readOnly":true,"description":"True for millisecond support","nullable":false},"microseconds":{"type":"boolean","readOnly":true,"description":"True for microsecond support","nullable":false},"subtotals":{"type":"boolean","readOnly":true,"description":"True for subtotal support","nullable":false},"location":{"type":"boolean","readOnly":true,"description":"True for geographic location support","nullable":false},"timezone":{"type":"boolean","readOnly":true,"description":"True for timezone conversion in query support","nullable":false},"connection_pooling":{"type":"boolean","readOnly":true,"description":"True for connection pooling support","nullable":false}},"x-looker-status":"beta"},"Schema":{"properties":{"name":{"type":"string","readOnly":true,"description":"Schema name","nullable":false},"is_default":{"type":"boolean","readOnly":true,"description":"True if this is the default schema","nullable":false}},"x-looker-status":"beta"},"SchemaTables":{"properties":{"name":{"type":"string","readOnly":true,"description":"Schema name","nullable":false},"is_default":{"type":"boolean","readOnly":true,"description":"True if this is the default schema","nullable":false},"tables":{"type":"array","items":{"$ref":"#/components/schemas/SchemaTable"},"readOnly":true,"description":"Tables for this schema","nullable":false}},"x-looker-status":"beta"},"SchemaColumns":{"properties":{"name":{"type":"string","readOnly":true,"description":"Schema item name","nullable":true},"sql_escaped_name":{"type":"string","readOnly":true,"description":"Full name of item","nullable":true},"schema_name":{"type":"string","readOnly":true,"description":"Name of schema","nullable":true},"columns":{"type":"array","items":{"$ref":"#/components/schemas/SchemaColumn"},"readOnly":true,"description":"Columns for this schema","nullable":false}},"x-looker-status":"beta"},"ColumnSearch":{"properties":{"schema_name":{"type":"string","readOnly":true,"description":"Name of schema containing the table","nullable":true},"table_name":{"type":"string","readOnly":true,"description":"Name of table containing the column","nullable":true},"column_name":{"type":"string","readOnly":true,"description":"Name of column","nullable":true},"data_type":{"type":"string","readOnly":true,"description":"Column data type","nullable":true}},"x-looker-status":"beta"},"CreateCostEstimate":{"properties":{"sql":{"type":"string","readOnly":true,"description":"SQL statement to estimate","nullable":false}},"x-looker-status":"beta"},"CostEstimate":{"properties":{"cost":{"type":"integer","format":"int64","readOnly":true,"description":"Cost of SQL statement","nullable":false},"cache_hit":{"type":"boolean","readOnly":true,"description":"Does the result come from the cache?","nullable":false},"cost_unit":{"type":"string","readOnly":true,"description":"Cost measurement size","nullable":false},"message":{"type":"string","readOnly":true,"description":"Human-friendly message","nullable":false}},"x-looker-status":"beta"},"ModelFieldSuggestions":{"properties":{"suggestions":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"List of suggestions","nullable":false},"error":{"type":"string","readOnly":true,"description":"Error message","nullable":true},"from_cache":{"type":"boolean","readOnly":true,"description":"True if result came from the cache","nullable":false},"hit_limit":{"type":"boolean","readOnly":true,"description":"True if this was a hit limit","nullable":false},"used_calcite_materialization":{"type":"boolean","readOnly":true,"description":"True if calcite was used","nullable":false}},"x-looker-status":"beta"},"ModelNamedValueFormats":{"properties":{"format_string":{"type":"string","readOnly":true,"nullable":false},"label":{"type":"string","readOnly":true,"nullable":false},"name":{"type":"string","readOnly":true,"nullable":false},"strict_value_format":{"type":"boolean","readOnly":true,"nullable":false}},"x-looker-status":"beta"},"Model":{"properties":{"connection":{"type":"string","readOnly":true,"nullable":true},"name":{"type":"string","readOnly":true,"nullable":false},"value_formats":{"type":"array","items":{"$ref":"#/components/schemas/ModelNamedValueFormats"},"readOnly":true,"description":"Array of named value formats","nullable":true}},"x-looker-status":"beta"},"SessionConfig":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"allow_persistent_sessions":{"type":"boolean","description":"Allow users to have persistent sessions when they login","nullable":false},"session_minutes":{"type":"integer","format":"int64","description":"Number of minutes for user sessions. Must be between 5 and 43200","nullable":true},"unlimited_sessions_per_user":{"type":"boolean","description":"Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time).","nullable":false},"use_inactivity_based_logout":{"type":"boolean","description":"Enforce session logout for sessions that are inactive for 15 minutes.","nullable":false},"track_session_location":{"type":"boolean","description":"Track location of session when user logs in.","nullable":false}},"x-looker-status":"stable"},"Session":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"ip_address":{"type":"string","readOnly":true,"description":"IP address of user when this session was initiated","nullable":true},"browser":{"type":"string","readOnly":true,"description":"User's browser type","nullable":true},"operating_system":{"type":"string","readOnly":true,"description":"User's Operating System","nullable":true},"city":{"type":"string","readOnly":true,"description":"City component of user location (derived from IP address)","nullable":true},"state":{"type":"string","readOnly":true,"description":"State component of user location (derived from IP address)","nullable":true},"country":{"type":"string","readOnly":true,"description":"Country component of user location (derived from IP address)","nullable":true},"credentials_type":{"type":"string","readOnly":true,"description":"Type of credentials used for logging in this session","nullable":true},"extended_at":{"type":"string","readOnly":true,"description":"Time when this session was last extended by the user","nullable":true},"extended_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times this session was extended","nullable":true},"sudo_user_id":{"type":"integer","format":"int64","readOnly":true,"description":"Actual user in the case when this session represents one user sudo'ing as another","nullable":true},"created_at":{"type":"string","readOnly":true,"description":"Time when this session was initiated","nullable":true},"expires_at":{"type":"string","readOnly":true,"description":"Time when this session will expire","nullable":true},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"Setting":{"properties":{"extension_framework_enabled":{"type":"boolean","description":"Toggle extension framework on or off","nullable":false},"marketplace_auto_install_enabled":{"type":"boolean","description":"Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled.","nullable":false},"marketplace_enabled":{"type":"boolean","description":"Toggle marketplace on or off","nullable":false},"whitelabel_configuration":{"$ref":"#/components/schemas/WhitelabelConfiguration"}},"x-looker-status":"beta"},"Snippet":{"properties":{"name":{"type":"string","readOnly":true,"description":"Name of the snippet","nullable":false},"label":{"type":"string","readOnly":true,"description":"Label of the snippet","nullable":false},"sql":{"type":"string","readOnly":true,"description":"SQL text of the snippet","nullable":false}},"x-looker-status":"stable"},"SqlQueryCreate":{"properties":{"connection_name":{"type":"string","description":"Name of the db connection on which to run this query","nullable":true},"connection_id":{"type":"string","x-looker-deprecated":true,"description":"(DEPRECATED) Use `connection_name` instead","nullable":true},"model_name":{"type":"string","description":"Name of LookML Model (this or `connection_id` required)","nullable":true},"sql":{"type":"string","description":"SQL query","nullable":true},"vis_config":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A \"type\" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties.","nullable":true}},"x-looker-status":"stable"},"SqlQuery":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"slug":{"type":"string","readOnly":true,"description":"The identifier of the SQL query","nullable":false},"last_runtime":{"type":"number","format":"float","readOnly":true,"description":"Number of seconds this query took to run the most recent time it was run","nullable":true},"run_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of times this query has been run","nullable":false},"browser_limit":{"type":"integer","format":"int64","readOnly":true,"description":"Maximum number of rows this query will display on the SQL Runner page","nullable":false},"sql":{"type":"string","readOnly":true,"description":"SQL query text","nullable":false},"last_run_at":{"type":"string","readOnly":true,"description":"The most recent time this query was run","nullable":true},"connection":{"$ref":"#/components/schemas/DBConnectionBase"},"model_name":{"type":"string","readOnly":true,"description":"Model name this query uses","nullable":true},"creator":{"$ref":"#/components/schemas/UserPublic"},"explore_url":{"type":"string","readOnly":true,"description":"Explore page URL for this SQL query","nullable":true},"plaintext":{"type":"boolean","readOnly":true,"description":"Should this query be rendered as plain text","nullable":false},"vis_config":{"type":"object","additionalProperties":{"type":"any","format":"any"},"description":"Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A \"type\" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties.","nullable":true},"result_maker_id":{"type":"integer","format":"int64","description":"ID of the ResultMakerLookup entry.","nullable":true}},"x-looker-status":"stable"},"SshPublicKey":{"properties":{"public_key":{"type":"string","readOnly":true,"description":"The SSH public key created for this instance","nullable":false}},"x-looker-status":"beta"},"SshServer":{"properties":{"ssh_server_id":{"type":"string","readOnly":true,"description":"A unique id used to identify this SSH Server","nullable":false},"ssh_server_name":{"type":"string","description":"The name to identify this SSH Server","nullable":false},"ssh_server_host":{"type":"string","description":"The hostname or ip address of the SSH Server","nullable":false},"ssh_server_port":{"type":"integer","format":"int64","description":"The port to connect to on the SSH Server","nullable":false},"ssh_server_user":{"type":"string","description":"The username used to connect to the SSH Server","nullable":false},"finger_print":{"type":"string","readOnly":true,"description":"The md5 fingerprint used to identify the SSH Server","nullable":false},"sha_finger_print":{"type":"string","readOnly":true,"description":"The SHA fingerprint used to identify the SSH Server","nullable":false},"public_key":{"type":"string","readOnly":true,"description":"The SSH public key created for this instance","nullable":false},"status":{"type":"string","readOnly":true,"description":"The current connection status to this SSH Server","nullable":false}},"x-looker-status":"beta"},"SshTunnel":{"properties":{"tunnel_id":{"type":"string","readOnly":true,"description":"Unique ID for the tunnel","nullable":false},"ssh_server_id":{"type":"string","description":"SSH Server ID","nullable":false},"ssh_server_name":{"type":"string","readOnly":true,"description":"SSH Server name","nullable":false},"ssh_server_host":{"type":"string","readOnly":true,"description":"SSH Server Hostname or IP Address","nullable":false},"ssh_server_port":{"type":"integer","format":"int64","readOnly":true,"description":"SSH Server port","nullable":false},"ssh_server_user":{"type":"string","readOnly":true,"description":"Username used to connect to the SSH Server","nullable":false},"last_attempt":{"type":"string","readOnly":true,"description":"Time of last connect attempt","nullable":false},"local_host_port":{"type":"integer","format":"int64","readOnly":true,"description":"Localhost Port used by the Looker instance to connect to the remote DB","nullable":false},"database_host":{"type":"string","description":"Hostname or IP Address of the Database Server","nullable":false},"database_port":{"type":"integer","format":"int64","description":"Port that the Database Server is listening on","nullable":false},"status":{"type":"string","readOnly":true,"description":"Current connection status for this Tunnel","nullable":false}},"x-looker-status":"beta"},"ThemeSettings":{"properties":{"background_color":{"type":"string","description":"Default background color","nullable":false},"base_font_size":{"type":"string","description":"Base font size for scaling fonts","nullable":true},"color_collection_id":{"type":"string","description":"Optional. ID of color collection to use with the theme. Use an empty string for none.","nullable":false},"font_color":{"type":"string","description":"Default font color","nullable":true},"font_family":{"type":"string","description":"Primary font family","nullable":false},"font_source":{"type":"string","description":"Source specification for font","nullable":true},"info_button_color":{"type":"string","description":"Info button color","nullable":false},"primary_button_color":{"type":"string","description":"Primary button color","nullable":false},"show_filters_bar":{"type":"boolean","description":"Toggle to show filters. Defaults to true.","nullable":false},"show_title":{"type":"boolean","description":"Toggle to show the title. Defaults to true.","nullable":false},"text_tile_text_color":{"type":"string","description":"Text color for text tiles","nullable":false},"tile_background_color":{"type":"string","description":"Background color for tiles","nullable":false},"tile_text_color":{"type":"string","description":"Text color for tiles","nullable":false},"title_color":{"type":"string","description":"Color for titles","nullable":false},"warn_button_color":{"type":"string","description":"Warning button color","nullable":false},"tile_title_alignment":{"type":"string","description":"The text alignment of tile titles (New Dashboards)","nullable":false},"tile_shadow":{"type":"boolean","description":"Toggles the tile shadow (New Dashboards)","nullable":false}},"x-looker-status":"stable"},"Theme":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"begin_at":{"type":"string","format":"date-time","description":"Timestamp for when this theme becomes active. Null=always","nullable":true},"end_at":{"type":"string","format":"date-time","description":"Timestamp for when this theme expires. Null=never","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"name":{"type":"string","description":"Name of theme. Can only be alphanumeric and underscores.","nullable":false},"settings":{"$ref":"#/components/schemas/ThemeSettings"}},"x-looker-status":"stable"},"Timezone":{"properties":{"value":{"type":"string","readOnly":true,"description":"Timezone","nullable":true},"label":{"type":"string","readOnly":true,"description":"Description of timezone","nullable":true},"group":{"type":"string","readOnly":true,"description":"Timezone group (e.g Common, Other, etc.)","nullable":true}},"x-looker-status":"stable"},"UserAttribute":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"name":{"type":"string","description":"Name of user attribute","nullable":true},"label":{"type":"string","description":"Human-friendly label for user attribute","nullable":true},"type":{"type":"string","description":"Type of user attribute (\"string\", \"number\", \"datetime\", \"yesno\", \"zipcode\")","nullable":true},"default_value":{"type":"string","description":"Default value for when no value is set on the user","nullable":true},"is_system":{"type":"boolean","readOnly":true,"description":"Attribute is a system default","nullable":false},"is_permanent":{"type":"boolean","readOnly":true,"description":"Attribute is permanent and cannot be deleted","nullable":false},"value_is_hidden":{"type":"boolean","description":"If true, users will not be able to view values of this attribute","nullable":false},"user_can_view":{"type":"boolean","description":"Non-admin users can see the values of their attributes and use them in filters","nullable":false},"user_can_edit":{"type":"boolean","description":"Users can change the value of this attribute for themselves","nullable":false},"hidden_value_domain_whitelist":{"type":"string","description":"Destinations to which a hidden attribute may be sent. Once set, cannot be edited.","nullable":true}},"x-looker-status":"stable","required":["name","label","type"]},"UserAttributeGroupValue":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id of this group-attribute relation","nullable":false},"group_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of group","nullable":true},"user_attribute_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of user attribute","nullable":true},"value_is_hidden":{"type":"boolean","readOnly":true,"description":"If true, the \"value\" field will be null, because the attribute settings block access to this value","nullable":false},"rank":{"type":"integer","format":"int64","readOnly":true,"description":"Precedence for resolving value for user","nullable":true},"value":{"type":"string","readOnly":true,"description":"Value of user attribute for group","nullable":true}},"x-looker-status":"stable"},"UserAttributeWithValue":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"name":{"type":"string","readOnly":true,"description":"Name of user attribute","nullable":true},"label":{"type":"string","readOnly":true,"description":"Human-friendly label for user attribute","nullable":true},"rank":{"type":"integer","format":"int64","readOnly":true,"description":"Precedence for setting value on user (lowest wins)","nullable":true},"value":{"type":"string","description":"Value of attribute for user","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User","nullable":true},"user_can_edit":{"type":"boolean","readOnly":true,"description":"Can the user set this value","nullable":false},"value_is_hidden":{"type":"boolean","readOnly":true,"description":"If true, the \"value\" field will be null, because the attribute settings block access to this value","nullable":false},"user_attribute_id":{"type":"integer","format":"int64","readOnly":true,"description":"Id of User Attribute","nullable":true},"source":{"type":"string","readOnly":true,"description":"How user got this value for this attribute","nullable":true},"hidden_value_domain_whitelist":{"type":"string","readOnly":true,"description":"If this user attribute is hidden, whitelist of destinations to which it may be sent.","nullable":true}},"x-looker-status":"stable"},"UserLoginLockout":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"key":{"type":"string","readOnly":true,"description":"Hash of user's client id","nullable":true},"auth_type":{"type":"string","readOnly":true,"description":"Authentication method for login failures","nullable":true},"ip":{"type":"string","readOnly":true,"description":"IP address of most recent failed attempt","nullable":true},"user_id":{"type":"integer","format":"int64","readOnly":true,"description":"User ID","nullable":true},"remote_id":{"type":"string","readOnly":true,"description":"Remote ID of user if using LDAP","nullable":true},"full_name":{"type":"string","readOnly":true,"description":"User's name","nullable":true},"email":{"type":"string","readOnly":true,"description":"Email address associated with the user's account","nullable":true},"fail_count":{"type":"integer","format":"int64","readOnly":true,"description":"Number of failures that triggered the lockout","nullable":true},"lockout_at":{"type":"string","format":"date-time","readOnly":true,"description":"Time when lockout was triggered","nullable":true}},"x-looker-status":"stable"},"User":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"avatar_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"URL for the avatar image (may be generic)","nullable":true},"avatar_url_without_sizing":{"type":"string","format":"uri-reference","readOnly":true,"description":"URL for the avatar image (may be generic), does not specify size","nullable":true},"credentials_api3":{"type":"array","items":{"$ref":"#/components/schemas/CredentialsApi3"},"readOnly":true,"description":"API 3 credentials","nullable":true},"credentials_email":{"$ref":"#/components/schemas/CredentialsEmail"},"credentials_embed":{"type":"array","items":{"$ref":"#/components/schemas/CredentialsEmbed"},"readOnly":true,"description":"Embed credentials","nullable":true},"credentials_google":{"$ref":"#/components/schemas/CredentialsGoogle"},"credentials_ldap":{"$ref":"#/components/schemas/CredentialsLDAP"},"credentials_looker_openid":{"$ref":"#/components/schemas/CredentialsLookerOpenid"},"credentials_oidc":{"$ref":"#/components/schemas/CredentialsOIDC"},"credentials_saml":{"$ref":"#/components/schemas/CredentialsSaml"},"credentials_totp":{"$ref":"#/components/schemas/CredentialsTotp"},"display_name":{"type":"string","readOnly":true,"description":"Full name for display (available only if both first_name and last_name are set)","nullable":true},"email":{"type":"string","readOnly":true,"description":"EMail address","nullable":true},"embed_group_space_id":{"type":"integer","format":"int64","readOnly":true,"description":"(Embed only) ID of user's group space based on the external_group_id optionally specified during embed user login","nullable":true},"first_name":{"type":"string","description":"First name","nullable":true},"group_ids":{"type":"array","items":{"type":"integer","format":"int64"},"readOnly":true,"description":"Array of ids of the groups for this user","nullable":true},"home_folder_id":{"type":"string","description":"ID string for user's home folder","nullable":true},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"is_disabled":{"type":"boolean","description":"Account has been disabled","nullable":false},"last_name":{"type":"string","description":"Last name","nullable":true},"locale":{"type":"string","description":"User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example.","nullable":true},"looker_versions":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"Array of strings representing the Looker versions that this user has used (this only goes back as far as '3.54.0')","nullable":true},"models_dir_validated":{"type":"boolean","description":"User's dev workspace has been checked for presence of applicable production projects","nullable":true},"personal_folder_id":{"type":"integer","format":"int64","readOnly":true,"description":"ID of user's personal folder","nullable":true},"presumed_looker_employee":{"type":"boolean","readOnly":true,"description":"User is identified as an employee of Looker","nullable":false},"role_ids":{"type":"array","items":{"type":"integer","format":"int64"},"readOnly":true,"description":"Array of ids of the roles for this user","nullable":true},"sessions":{"type":"array","items":{"$ref":"#/components/schemas/Session"},"readOnly":true,"description":"Active sessions","nullable":true},"ui_state":{"type":"object","additionalProperties":{"type":"string"},"description":"Per user dictionary of undocumented state information owned by the Looker UI.","nullable":true},"verified_looker_employee":{"type":"boolean","readOnly":true,"description":"User is identified as an employee of Looker who has been verified via Looker corporate authentication","nullable":false},"roles_externally_managed":{"type":"boolean","readOnly":true,"description":"User's roles are managed by an external directory like SAML or LDAP and can not be changed directly.","nullable":false},"allow_direct_roles":{"type":"boolean","readOnly":true,"description":"User can be directly assigned a role.","nullable":false},"allow_normal_group_membership":{"type":"boolean","readOnly":true,"description":"User can be a direct member of a normal Looker group.","nullable":false},"allow_roles_from_normal_groups":{"type":"boolean","readOnly":true,"description":"User can inherit roles from a normal Looker group.","nullable":false},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"UserPublic":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"first_name":{"type":"string","readOnly":true,"description":"First Name","nullable":false},"last_name":{"type":"string","readOnly":true,"description":"Last Name","nullable":false},"display_name":{"type":"string","readOnly":true,"description":"Full name for display (available only if both first_name and last_name are set)","nullable":true},"avatar_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"URL for the avatar image (may be generic)","nullable":false},"url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Link to get this item","nullable":true}},"x-looker-status":"stable"},"ApiVersionElement":{"properties":{"version":{"type":"string","readOnly":true,"description":"Version number as it appears in '/api/xxx/' urls","nullable":true},"full_version":{"type":"string","readOnly":true,"description":"Full version number including minor version","nullable":true},"status":{"type":"string","readOnly":true,"description":"Status of this version","nullable":true},"swagger_url":{"type":"string","format":"uri-reference","readOnly":true,"description":"Url for swagger.json for this version","nullable":true}},"x-looker-status":"stable"},"ApiVersion":{"properties":{"looker_release_version":{"type":"string","readOnly":true,"description":"Current Looker release version number","nullable":false},"current_version":{"$ref":"#/components/schemas/ApiVersionElement"},"supported_versions":{"type":"array","items":{"$ref":"#/components/schemas/ApiVersionElement"},"readOnly":true,"description":"Array of versions supported by this Looker instance","nullable":false},"api_server_url":{"type":"string","readOnly":true,"description":"API server base url","nullable":false},"web_server_url":{"type":"string","readOnly":true,"description":"Web server base url","nullable":false}},"x-looker-status":"stable"},"WelcomeEmailTest":{"properties":{"content":{"type":"string","description":"The content that would be sent in the body of a custom welcome email","nullable":true},"subject":{"type":"string","description":"The subject that would be sent for the custom welcome email","nullable":true},"header":{"type":"string","description":"The header that would be sent in the body of a custom welcome email","nullable":true}},"x-looker-status":"stable"},"WhitelabelConfiguration":{"properties":{"id":{"type":"integer","format":"int64","readOnly":true,"description":"Unique Id","nullable":false},"logo_file":{"type":"string","description":"Customer logo image. Expected base64 encoded data (write-only)","nullable":true},"logo_url":{"type":"string","readOnly":true,"description":"Logo image url (read-only)","nullable":true},"favicon_file":{"type":"string","description":"Custom favicon image. Expected base64 encoded data (write-only)","nullable":true},"favicon_url":{"type":"string","readOnly":true,"description":"Favicon image url (read-only)","nullable":true},"default_title":{"type":"string","description":"Default page title","nullable":true},"show_help_menu":{"type":"boolean","description":"Boolean to toggle showing help menus","nullable":false},"show_docs":{"type":"boolean","description":"Boolean to toggle showing docs","nullable":false},"show_email_sub_options":{"type":"boolean","description":"Boolean to toggle showing email subscription options.","nullable":false},"allow_looker_mentions":{"type":"boolean","description":"Boolean to toggle mentions of Looker in emails","nullable":false},"allow_looker_links":{"type":"boolean","description":"Boolean to toggle links to Looker in emails","nullable":false},"custom_welcome_email_advanced":{"type":"boolean","description":"Allow subject line and email heading customization in customized emails”","nullable":false},"setup_mentions":{"type":"boolean","description":"Remove the word Looker from appearing in the account setup page","nullable":false},"alerts_logo":{"type":"boolean","description":"Remove Looker logo from Alerts","nullable":false},"alerts_links":{"type":"boolean","description":"Remove Looker links from Alerts","nullable":false},"folders_mentions":{"type":"boolean","description":"Remove Looker mentions in home folder page when you don’t have any items saved","nullable":false}},"x-looker-status":"stable"},"Workspace":{"properties":{"can":{"type":"object","additionalProperties":{"type":"boolean"},"readOnly":true,"description":"Operations the current user is able to perform on this object","nullable":false},"id":{"type":"string","readOnly":true,"description":"The unique id of this user workspace. Predefined workspace ids include \"production\" and \"dev\"","nullable":false},"projects":{"type":"array","items":{"$ref":"#/components/schemas/Project"},"readOnly":true,"description":"The local state of each project in the workspace","nullable":true}},"x-looker-status":"stable"}}}} \ No newline at end of file +{ + "openapi": "3.0.0", + "info": { + "version": "4.0.21.16", + "x-looker-release-version": "21.16.0", + "title": "Looker API 4.0 (Beta) Reference", + "description": "\nWelcome to the future! API 4.0 co-exists with APIs 3.1 and 3.0. (3.0 should no longer be used.)\nThe \"beta\" tag means updates for API 4.0 may include breaking changes, but as always we will work to minimize them.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\nIt is a replacement for the 'api-docs' page currently provided on Looker instances.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 version was introduced so we can make adjustments to API functions, parameters, and response types to\nfix bugs and inconsistencies. These changes fall outside the bounds of non-breaking additive changes we can\nmake to our stable API 3.1.\n\nOne benefit of these type adjustments in API 4.0 is dramatically better support for strongly\ntyped languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nWhile API 3.1 is still the de-facto Looker API (\"current\", \"stable\", \"default\", etc), the bulk\nof our development activity has shifted to API 4.0, where all new features are added.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://looker.com/docs/r/api/support-policy) for more information.\n\n\n", + "contact": { + "name": "Looker Team", + "url": "https://help.looker.com" + }, + "license": { + "name": "EULA", + "url": "https://localhost:10000/eula" + } + }, + "tags": [ + { + "name": "Alert", + "description": "Alert" + }, + { + "name": "ApiAuth", + "description": "API Authentication" + }, + { + "name": "Auth", + "description": "Manage User Authentication Configuration" + }, + { + "name": "Board", + "description": "Manage Boards" + }, + { + "name": "ColorCollection", + "description": "Manage Color Collections" + }, + { + "name": "Command", + "description": "Manage Commands" + }, + { + "name": "Config", + "description": "Manage General Configuration" + }, + { + "name": "Connection", + "description": "Manage Database Connections" + }, + { + "name": "Content", + "description": "Manage Content" + }, + { + "name": "Dashboard", + "description": "Manage Dashboards" + }, + { + "name": "DataAction", + "description": "Run Data Actions" + }, + { + "name": "Datagroup", + "description": "Manage Datagroups" + }, + { + "name": "Folder", + "description": "Manage Folders" + }, + { + "name": "Group", + "description": "Manage Groups" + }, + { + "name": "Homepage", + "description": "Manage Homepage" + }, + { + "name": "Integration", + "description": "Manage Integrations" + }, + { + "name": "Look", + "description": "Run and Manage Looks" + }, + { + "name": "LookmlModel", + "description": "Manage LookML Models" + }, + { + "name": "Metadata", + "description": "Connection Metadata Features" + }, + { + "name": "Project", + "description": "Manage Projects" + }, + { + "name": "Query", + "description": "Run and Manage Queries" + }, + { + "name": "RenderTask", + "description": "Manage Render Tasks" + }, + { + "name": "Role", + "description": "Manage Roles" + }, + { + "name": "ScheduledPlan", + "description": "Manage Scheduled Plans" + }, + { + "name": "Session", + "description": "Session Information" + }, + { + "name": "Theme", + "description": "Manage Themes" + }, + { + "name": "User", + "description": "Manage Users" + }, + { + "name": "UserAttribute", + "description": "Manage User Attributes" + }, + { + "name": "Workspace", + "description": "Manage Workspaces" + } + ], + "paths": { + "/query_tasks": { + "post": { + "tags": [ + "Query" + ], + "operationId": "create_query_task", + "summary": "Run Query Async", + "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Row limit (may override the limit in the saved query).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "apply_formatting", + "in": "query", + "description": "Apply model-specified formatting to each result.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "apply_vis", + "in": "query", + "description": "Apply visualization options to results.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache", + "in": "query", + "description": "Get results from cache if available.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "image_width", + "in": "query", + "description": "Render width for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "image_height", + "in": "query", + "description": "Render height for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "generate_drill_links", + "in": "query", + "description": "Generate drill links (only applicable to 'json_detail' format.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "force_production", + "in": "query", + "description": "Force use of production models even if the user is in development mode.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache_only", + "in": "query", + "description": "Retrieve any results from cache even if the results have expired.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "path_prefix", + "in": "query", + "description": "Prefix to use for drill links (url encoded).", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "rebuild_pdts", + "in": "query", + "description": "Rebuild PDTS used in query.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "server_table_calcs", + "in": "query", + "description": "Perform table calculations on query results", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "query_task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryTask" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateQueryTask" + } + } + }, + "description": "Query parameters", + "required": true + } + } + }, + "/query_tasks/multi_results": { + "get": { + "tags": [ + "Query" + ], + "operationId": "query_task_multi_results", + "summary": "Get Multiple Async Query Results", + "description": "### Fetch results of multiple async queries\n\nReturns the results of multiple async queries in one request.\n\nFor Query Tasks that are not completed, the response will include the execution status of the Query Task but will not include query results.\nQuery Tasks whose results have expired will have a status of 'expired'.\nIf the user making the API request does not have sufficient privileges to view a Query Task result, the result will have a status of 'missing'\n", + "parameters": [ + { + "name": "query_task_ids", + "in": "query", + "description": "List of Query Task IDs", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Multiple query results", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/query_tasks/{query_task_id}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "query_task", + "summary": "Get Async Query Info", + "description": "### Get Query Task details\n\nUse this function to check the status of an async query task. After the status\nreaches \"Complete\", you can call [query_task_results(query_task_id)](#!/Query/query_task_results) to\nretrieve the results of the query.\n\nUse [create_query_task()](#!/Query/create_query_task) to create an async query task.\n", + "parameters": [ + { + "name": "query_task_id", + "in": "path", + "description": "ID of the Query Task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "query_task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryTask" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/query_tasks/{query_task_id}/results": { + "get": { + "tags": [ + "Query" + ], + "operationId": "query_task_results", + "summary": "Get Async Query Results", + "description": "### Get Async Query Results\n\nReturns the results of an async query task if the query has completed.\n\nIf the query task is still running or waiting to run, this function returns 204 No Content.\n\nIf the query task ID is invalid or the cached results of the query task have expired, this function returns 404 Not Found.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task\nCall query_task_results only after the query task status reaches \"Complete\".\n\nYou can also use [query_task_multi_results()](#!/Query/query_task_multi_results) retrieve the\nresults of multiple async query tasks at the same time.\n\n#### SQL Error Handling:\nIf the query fails due to a SQL db error, how this is communicated depends on the result_format you requested in `create_query_task()`.\n\nFor `json_detail` result_format: `query_task_results()` will respond with HTTP status '200 OK' and db SQL error info\nwill be in the `errors` property of the response object. The 'data' property will be empty.\n\nFor all other result formats: `query_task_results()` will respond with HTTP status `400 Bad Request` and some db SQL error info\nwill be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`.\nThese data formats can only carry row data, and error info is not row data.\n", + "parameters": [ + { + "name": "query_task_id", + "in": "path", + "description": "ID of the Query Task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The query results.", + "content": { + "text": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "204": { + "description": "The query is not finished", + "content": { + "text": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "The Query Task Id was not found or the results have expired.", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/queries/{query_id}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "query", + "summary": "Get Query", + "description": "### Get a previously created query by id.\n\nA Looker query object includes the various parameters that define a database query that has been run or\ncould be run in the future. These parameters include: model, view, fields, filters, pivots, etc.\nQuery *results* are not part of the query object.\n\nQuery objects are unique and immutable. Query objects are created automatically in Looker as users explore data.\nLooker does not delete them; they become part of the query history. When asked to create a query for\nany given set of parameters, Looker will first try to find an existing query object with matching\nparameters and will only create a new object when an appropriate object can not be found.\n\nThis 'get' method is used to get the details about a query for a given id. See the other methods here\nto 'create' and 'run' queries.\n\nNote that some fields like 'filter_config' and 'vis_config' etc are specific to how the Looker UI\nbuilds queries and visualizations and are not generally useful for API use. They are not required when\ncreating new queries and can usually just be ignored.\n\n", + "parameters": [ + { + "name": "query_id", + "in": "path", + "description": "Id of query", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Query" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/queries/slug/{slug}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "query_for_slug", + "summary": "Get Query for Slug", + "description": "### Get the query for a given query slug.\n\nThis returns the query for the 'slug' in a query share URL.\n\nThe 'slug' is a randomly chosen short string that is used as an alternative to the query's id value\nfor use in URLs etc. This method exists as a convenience to help you use the API to 'find' queries that\nhave been created using the Looker UI.\n\nYou can use the Looker explore page to build a query and then choose the 'Share' option to\nshow the share url for the query. Share urls generally look something like 'https://looker.yourcompany/x/vwGSbfc'.\nThe trailing 'vwGSbfc' is the share slug. You can pass that string to this api method to get details about the query.\nThose details include the 'id' that you can use to run the query. Or, you can copy the query body\n(perhaps with your own modification) and use that as the basis to make/run new queries.\n\nThis will also work with slugs from Looker explore urls like\n'https://looker.yourcompany/explore/ecommerce/orders?qid=aogBgL6o3cKK1jN3RoZl5s'. In this case\n'aogBgL6o3cKK1jN3RoZl5s' is the slug.\n", + "parameters": [ + { + "name": "slug", + "in": "path", + "description": "Slug of query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Query" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/queries": { + "post": { + "tags": [ + "Query" + ], + "operationId": "create_query", + "summary": "Create Query", + "description": "### Create a query.\n\nThis allows you to create a new query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Query" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Query" + } + } + }, + "description": "Query", + "required": true + } + } + }, + "/queries/{query_id}/run/{result_format}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "run_query", + "summary": "Run Query", + "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "parameters": [ + { + "name": "query_id", + "in": "path", + "description": "Id of query", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Format of result", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Row limit (may override the limit in the saved query).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "apply_formatting", + "in": "query", + "description": "Apply model-specified formatting to each result.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "apply_vis", + "in": "query", + "description": "Apply visualization options to results.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache", + "in": "query", + "description": "Get results from cache if available.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "image_width", + "in": "query", + "description": "Render width for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "image_height", + "in": "query", + "description": "Render height for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "generate_drill_links", + "in": "query", + "description": "Generate drill links (only applicable to 'json_detail' format.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "force_production", + "in": "query", + "description": "Force use of production models even if the user is in development mode.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache_only", + "in": "query", + "description": "Retrieve any results from cache even if the results have expired.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "path_prefix", + "in": "query", + "description": "Prefix to use for drill links (url encoded).", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "rebuild_pdts", + "in": "query", + "description": "Rebuild PDTS used in query.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "server_table_calcs", + "in": "query", + "description": "Perform table calculations on query results", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Query", + "content": { + "text": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "image/jpeg": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/queries/run/{result_format}": { + "post": { + "tags": [ + "Query" + ], + "operationId": "run_inline_query", + "summary": "Run Inline Query", + "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "parameters": [ + { + "name": "result_format", + "in": "path", + "description": "Format of result", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Row limit (may override the limit in the saved query).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "apply_formatting", + "in": "query", + "description": "Apply model-specified formatting to each result.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "apply_vis", + "in": "query", + "description": "Apply visualization options to results.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache", + "in": "query", + "description": "Get results from cache if available.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "image_width", + "in": "query", + "description": "Render width for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "image_height", + "in": "query", + "description": "Render height for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "generate_drill_links", + "in": "query", + "description": "Generate drill links (only applicable to 'json_detail' format.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "force_production", + "in": "query", + "description": "Force use of production models even if the user is in development mode.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache_only", + "in": "query", + "description": "Retrieve any results from cache even if the results have expired.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "path_prefix", + "in": "query", + "description": "Prefix to use for drill links (url encoded).", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "rebuild_pdts", + "in": "query", + "description": "Rebuild PDTS used in query.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "server_table_calcs", + "in": "query", + "description": "Perform table calculations on query results", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Query Result", + "content": { + "text": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "image/jpeg": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Query" + } + } + }, + "description": "inline query", + "required": true + } + } + }, + "/queries/models/{model_name}/views/{view_name}/run/{result_format}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "run_url_encoded_query", + "summary": "Run Url Encoded Query", + "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/3.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n :fields => \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n :sorts => \"products.count desc 0\",\n :limit => \"500\",\n :query_timezone => \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "parameters": [ + { + "name": "model_name", + "in": "path", + "description": "Model name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "view_name", + "in": "path", + "description": "View name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Format of result", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Query", + "content": { + "text": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "image/jpeg": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/login": { + "post": { + "tags": [ + "ApiAuth" + ], + "operationId": "login", + "summary": "Login", + "description": "### Present client credentials to obtain an authorization token\n\nLooker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://looker.com/docs/r/api/outh2_resource_owner_pc) pattern.\nThe client credentials required for this login must be obtained by creating an API3 key on a user account\nin the Looker Admin console. The API3 key consists of a public `client_id` and a private `client_secret`.\n\nThe access token returned by `login` must be used in the HTTP Authorization header of subsequent\nAPI requests, like this:\n```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```\nReplace \"4QDkCy...\" with the `access_token` value returned by `login`.\nThe word `token` is a string literal and must be included exactly as shown.\n\nThis function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params.\n\nExample of passing credentials in the HTTP request body:\n````\nPOST HTTP /login\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv\n````\n\n### Best Practice:\nAlways pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations.\n\nFor more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API3](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md).\n", + "parameters": [ + { + "name": "client_id", + "in": "query", + "description": "client_id part of API3 Key.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "client_secret", + "in": "query", + "description": "client_secret part of API3 Key.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Access token with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessToken" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none" + } + }, + "/login/{user_id}": { + "post": { + "tags": [ + "ApiAuth" + ], + "operationId": "login_user", + "summary": "Login user", + "description": "### Create an access token that runs as a given user.\n\nThis can only be called by an authenticated admin user. It allows that admin to generate a new\nauthentication token for the user with the given user id. That token can then be used for subsequent\nAPI calls - which are then performed *as* that target user.\n\nThe target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such\ncredentials are created by this call.\n\nThis allows for building systems where api user authentication for an arbitrary number of users is done\noutside of Looker and funneled through a single 'service account' with admin permissions. Note that a\nnew access token is generated on each call. If target users are going to be making numerous API\ncalls in a short period then it is wise to cache this authentication token rather than call this before\neach of those API calls.\n\nSee 'login' for more detail on the access token and how to use it.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "associative", + "in": "query", + "description": "When true (default), API calls using the returned access_token are attributed to the admin user who created the access_token. When false, API activity is attributed to the user the access_token runs as. False requires a looker license.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Access token with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessToken" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none" + } + }, + "/logout": { + "delete": { + "tags": [ + "ApiAuth" + ], + "operationId": "logout", + "summary": "Logout", + "description": "### Logout of the API and invalidate the current access token.\n", + "responses": { + "204": { + "description": "Logged out successfully.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none" + } + }, + "/alerts/search": { + "get": { + "tags": [ + "Alert" + ], + "operationId": "search_alerts", + "summary": "Search Alerts", + "description": "### Search Alerts\n", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "(Optional) Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "(Optional) Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "group_by", + "in": "query", + "description": "(Optional) Dimension by which to order the results(`dashboard` | `owner`)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "(Optional) Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "disabled", + "in": "query", + "description": "(Optional) Filter on returning only enabled or disabled alerts.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "frequency", + "in": "query", + "description": "(Optional) Filter on alert frequency, such as: monthly, weekly, daily, hourly, minutes", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "condition_met", + "in": "query", + "description": "(Optional) Filter on whether the alert has met its condition when it last executed", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "last_run_start", + "in": "query", + "description": "(Optional) Filter on the start range of the last time the alerts were run. Example: 2021-01-01T01:01:01-08:00.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "last_run_end", + "in": "query", + "description": "(Optional) Filter on the start range of the last time the alerts were run. Example: 2021-01-01T01:01:01-08:00.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_owners", + "in": "query", + "description": "(Admin only) (Optional) Filter for all owners.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Alert.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Alert" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/alerts/{alert_id}": { + "get": { + "tags": [ + "Alert" + ], + "operationId": "get_alert", + "summary": "Get an alert", + "description": "### Get an alert by a given alert ID\n", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Alert", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alert" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Alert" + ], + "operationId": "update_alert_field", + "summary": "Update select fields on an alert", + "description": "### Update select alert fields\n# Available fields: `owner_id`, `is_disabled`, `is_public`, `threshold`\n#\n", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "The alert is saved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alert" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alert" + } + } + }, + "description": "Alert", + "required": true + } + }, + "put": { + "tags": [ + "Alert" + ], + "operationId": "update_alert", + "summary": "Update an alert", + "description": "### Update an alert\n# Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n#\n", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "The alert is saved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alert" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alert" + } + } + }, + "description": "Alert", + "required": true + } + }, + "delete": { + "tags": [ + "Alert" + ], + "operationId": "delete_alert", + "summary": "Delete an alert", + "description": "### Delete an alert by a given alert ID\n", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Alert successfully deleted." + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/alerts": { + "post": { + "tags": [ + "Alert" + ], + "operationId": "create_alert", + "summary": "Create an alert", + "description": "### Create a new alert and return details of the newly created object\n\nRequired fields: `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n\nExample Request:\nRun alert on dashboard element '103' at 5am every day. Send an email to 'test@test.com' if inventory for Los Angeles (using dashboard filter `Warehouse Name`) is lower than 1,000\n```\n{\n \"cron\": \"0 5 * * *\",\n \"custom_title\": \"Alert when LA inventory is low\",\n \"dashboard_element_id\": 103,\n \"applied_dashboard_filters\": [\n {\n \"filter_title\": \"Warehouse Name\",\n \"field_name\": \"distribution_centers.name\",\n \"filter_value\": \"Los Angeles CA\",\n \"filter_description\": \"is Los Angeles CA\"\n }\n ],\n \"comparison_type\": \"LESS_THAN\",\n \"destinations\": [\n {\n \"destination_type\": \"EMAIL\",\n \"email_address\": \"test@test.com\"\n }\n ],\n \"field\": {\n \"title\": \"Number on Hand\",\n \"name\": \"inventory_items.number_on_hand\"\n },\n \"is_disabled\": false,\n \"is_public\": true,\n \"threshold\": 1000\n}\n```\n", + "responses": { + "200": { + "description": "The alert is saved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alert" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alert" + } + } + }, + "description": "Alert", + "required": true + } + } + }, + "/alerts/{alert_id}/enqueue": { + "post": { + "tags": [ + "Alert" + ], + "operationId": "enqueue_alert", + "summary": "Enqueue an alert", + "description": "### Enqueue an Alert by ID\n", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "force", + "in": "query", + "description": "Whether to enqueue an alert again if its already running.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "204": { + "description": "Alert successfully added to the queue. Does not indicate it has been run" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/cloud_storage": { + "get": { + "tags": [ + "Config" + ], + "operationId": "cloud_storage_configuration", + "summary": "Get Cloud Storage", + "description": "Get the current Cloud Storage Configuration.\n", + "responses": { + "200": { + "description": "Current Cloud Storage Configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackupConfiguration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_cloud_storage_configuration", + "summary": "Update Cloud Storage", + "description": "Update the current Cloud Storage Configuration.\n", + "responses": { + "200": { + "description": "New state for specified model set.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackupConfiguration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackupConfiguration" + } + } + }, + "description": "Options for Cloud Storage Configuration", + "required": true + } + } + }, + "/color_collections": { + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "all_color_collections", + "summary": "Get all Color Collections", + "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollections", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "ColorCollection" + ], + "operationId": "create_color_collection", + "summary": "Create ColorCollection", + "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + }, + "description": "ColorCollection", + "required": true + } + } + }, + "/color_collections/custom": { + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "color_collections_custom", + "summary": "Get all Custom Color Collections", + "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollections", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/color_collections/standard": { + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "color_collections_standard", + "summary": "Get all Standard Color Collections", + "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollections", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/color_collections/default": { + "put": { + "tags": [ + "ColorCollection" + ], + "operationId": "set_default_color_collection", + "summary": "Set Default Color Collection", + "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "query", + "description": "ID of color collection to set as default", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "default_color_collection", + "summary": "Get Default Color Collection", + "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/color_collections/{collection_id}": { + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "color_collection", + "summary": "Get Color Collection by ID", + "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Color Collection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "ColorCollection" + ], + "operationId": "update_color_collection", + "summary": "Update Custom Color collection", + "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Custom Color Collection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + }, + "description": "ColorCollection", + "required": true + } + }, + "delete": { + "tags": [ + "ColorCollection" + ], + "operationId": "delete_color_collection", + "summary": "Delete ColorCollection", + "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Color Collection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/commands": { + "post": { + "tags": [ + "Command" + ], + "operationId": "create_command", + "summary": "Create a custom command", + "description": "### Create a new command.\n# Required fields: [:name, :linked_content_id, :linked_content_type]\n# `linked_content_type` must be one of [\"dashboard\", \"lookml_dashboard\"]\n#\n", + "responses": { + "200": { + "description": "The command is saved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Command" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Command" + } + } + }, + "description": "Writable command parameters", + "required": true + } + }, + "get": { + "tags": [ + "Command" + ], + "operationId": "get_all_commands", + "summary": "Get All Commands", + "description": "### Get All Commands.\n", + "parameters": [ + { + "name": "content_id", + "in": "query", + "description": "Id of the associated content. This must be accompanied with content_type.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_type", + "in": "query", + "description": "Type of the associated content. This must be accompanied with content_id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Commands", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Command" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/commands/{command_id}": { + "patch": { + "tags": [ + "Command" + ], + "operationId": "update_command", + "summary": "Update a custom command", + "description": "### Update an existing custom command.\n# Optional fields: ['name', 'description']\n#\n", + "parameters": [ + { + "name": "command_id", + "in": "path", + "description": "ID of a command", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "The command is updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Command" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommand" + } + } + }, + "description": "Re-writable command parameters", + "required": true + } + }, + "delete": { + "tags": [ + "Command" + ], + "operationId": "delete_command", + "summary": "Delete a custom command", + "description": "### Delete an existing custom command.\n", + "parameters": [ + { + "name": "command_id", + "in": "path", + "description": "ID of a command", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "The command is deleted." + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_favorite/search": { + "get": { + "tags": [ + "Content" + ], + "operationId": "search_content_favorites", + "summary": "Search Favorite Contents", + "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Match content favorite id(s)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "query", + "description": "Match user id(s).To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Match content metadata id(s).To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "dashboard_id", + "in": "query", + "description": "Match dashboard id(s).To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "look_id", + "in": "query", + "description": "Match look id(s).To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "board_id", + "in": "query", + "description": "Match board id(s).To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Favorite Content", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContentFavorite" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_favorite/{content_favorite_id}": { + "get": { + "tags": [ + "Content" + ], + "operationId": "content_favorite", + "summary": "Get Favorite Content", + "description": "### Get favorite content by its id", + "parameters": [ + { + "name": "content_favorite_id", + "in": "path", + "description": "Id of favorite content", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Favorite Content", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentFavorite" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Content" + ], + "operationId": "delete_content_favorite", + "summary": "Delete Favorite Content", + "description": "### Delete favorite content", + "parameters": [ + { + "name": "content_favorite_id", + "in": "path", + "description": "Id of favorite content", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_favorite": { + "post": { + "tags": [ + "Content" + ], + "operationId": "create_content_favorite", + "summary": "Create Favorite Content", + "description": "### Create favorite content", + "responses": { + "200": { + "description": "Favorite Content", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentFavorite" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentFavorite" + } + } + }, + "description": "Favorite Content", + "required": true + } + } + }, + "/content_metadata": { + "get": { + "tags": [ + "Content" + ], + "operationId": "all_content_metadatas", + "summary": "Get All Content Metadatas", + "description": "### Get information about all content metadata in a space.\n", + "parameters": [ + { + "name": "parent_id", + "in": "query", + "description": "Parent space of content.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Content Metadata", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContentMeta" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_metadata/{content_metadata_id}": { + "patch": { + "tags": [ + "Content" + ], + "operationId": "update_content_metadata", + "summary": "Update Content Metadata", + "description": "### Move a piece of content.\n", + "parameters": [ + { + "name": "content_metadata_id", + "in": "path", + "description": "Id of content metadata", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Content Metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentMeta" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentMeta" + } + } + }, + "description": "Content Metadata", + "required": true + } + }, + "get": { + "tags": [ + "Content" + ], + "operationId": "content_metadata", + "summary": "Get Content Metadata", + "description": "### Get information about an individual content metadata record.\n", + "parameters": [ + { + "name": "content_metadata_id", + "in": "path", + "description": "Id of content metadata", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Content Metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentMeta" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_metadata_access": { + "post": { + "tags": [ + "Content" + ], + "operationId": "create_content_metadata_access", + "summary": "Create Content Metadata Access", + "description": "### Create content metadata access.\n", + "parameters": [ + { + "name": "send_boards_notification_email", + "in": "query", + "description": "Optionally sends notification email when granting access to a board.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Content Metadata Access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentMetaGroupUser" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentMetaGroupUser" + } + } + }, + "description": "Content Metadata Access", + "required": true + } + }, + "get": { + "tags": [ + "Content" + ], + "operationId": "all_content_metadata_accesses", + "summary": "Get All Content Metadata Accesses", + "description": "### All content metadata access records for a content metadata item.\n", + "parameters": [ + { + "name": "content_metadata_id", + "in": "query", + "description": "Id of content metadata", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Content Metadata Access", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContentMetaGroupUser" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_metadata_access/{content_metadata_access_id}": { + "put": { + "tags": [ + "Content" + ], + "operationId": "update_content_metadata_access", + "summary": "Update Content Metadata Access", + "description": "### Update type of access for content metadata.\n", + "parameters": [ + { + "name": "content_metadata_access_id", + "in": "path", + "description": "Id of content metadata access", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Content Metadata Access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentMetaGroupUser" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentMetaGroupUser" + } + } + }, + "description": "Content Metadata Access", + "required": true + } + }, + "delete": { + "tags": [ + "Content" + ], + "operationId": "delete_content_metadata_access", + "summary": "Delete Content Metadata Access", + "description": "### Remove content metadata access.\n", + "parameters": [ + { + "name": "content_metadata_access_id", + "in": "path", + "description": "Id of content metadata access", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_thumbnail/{type}/{resource_id}": { + "get": { + "tags": [ + "Content" + ], + "operationId": "content_thumbnail", + "summary": "Get Content Thumbnail", + "description": "### Get an image representing the contents of a dashboard or look.\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Either dashboard or look", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "resource_id", + "in": "path", + "description": "ID of the dashboard or look to render", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "reload", + "in": "query", + "description": "Whether or not to refresh the rendered image with the latest content", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "format", + "in": "query", + "description": "A value of png produces a thumbnail in PNG format instead of SVG (default)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "width", + "in": "query", + "description": "The width of the image if format is supplied", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "height", + "in": "query", + "description": "The height of the image if format is supplied", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Content thumbnail", + "content": { + "image/svg+xml": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/content_validation": { + "get": { + "tags": [ + "Content" + ], + "operationId": "content_validation", + "summary": "Validate Content", + "description": "### Validate All Content\n\nPerforms validation of all looks and dashboards\nReturns a list of errors found as well as metadata about the content validation run.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Content validation results", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContentValidation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/content_view/search": { + "get": { + "tags": [ + "Content" + ], + "operationId": "search_content_views", + "summary": "Search Content Views", + "description": "### Search Content Views\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "view_count", + "in": "query", + "description": "Match view count", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "group_id", + "in": "query", + "description": "Match Group Id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "look_id", + "in": "query", + "description": "Match look_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "dashboard_id", + "in": "query", + "description": "Match dashboard_id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Match content metadata id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "start_of_week_date", + "in": "query", + "description": "Match start of week date (format is \"YYYY-MM-DD\")", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_time", + "in": "query", + "description": "True if only all time view records should be returned", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "user_id", + "in": "query", + "description": "Match user id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. Use with `offset` to manage pagination of results", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning data", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Content View", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContentView" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/credentials_email/search": { + "get": { + "tags": [ + "User" + ], + "operationId": "search_credentials_email", + "summary": "Search CredentialsEmail", + "description": "### Search email credentials\n\nReturns all credentials_email records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match credentials_email id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "email", + "in": "query", + "description": "Match credentials_email email.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "emails", + "in": "query", + "description": "Find credentials_email that match given emails.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Credentials Email", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialsEmailSearch" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/custom_welcome_email": { + "get": { + "tags": [ + "Config" + ], + "operationId": "custom_welcome_email", + "summary": "Get Custom Welcome Email", + "description": "### Get the current status and content of custom welcome emails\n", + "responses": { + "200": { + "description": "Custom Welcome Email", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomWelcomeEmail" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "deprecated": true, + "x-looker-status": "deprecated", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_custom_welcome_email", + "summary": "Update Custom Welcome Email Content", + "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", + "parameters": [ + { + "name": "send_test_welcome_email", + "in": "query", + "description": "If true a test email with the content from the request will be sent to the current user after saving", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Custom Welcome Email", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomWelcomeEmail" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "deprecated": true, + "x-looker-status": "deprecated", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomWelcomeEmail" + } + } + }, + "description": "Custom Welcome Email setting and value to save", + "required": true + } + } + }, + "/custom_welcome_email_test": { + "put": { + "tags": [ + "Config" + ], + "operationId": "update_custom_welcome_email_test", + "summary": "Send a test welcome email to the currently logged in user with the supplied content ", + "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", + "responses": { + "200": { + "description": "Send Test Welcome Email", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WelcomeEmailTest" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WelcomeEmailTest" + } + } + }, + "description": "Subject, header, and Body of the email to be sent.", + "required": true + } + } + }, + "/dashboards": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "all_dashboards", + "summary": "Get All Dashboards", + "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "dashboards", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardBase" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "create_dashboard", + "summary": "Create Dashboard", + "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title`, `user_id`, and `space_id` are all required fields.\n`Space_id` and `user_id` must contain the id of an existing space or user, respectively.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", + "responses": { + "200": { + "description": "Dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + }, + "description": "Dashboard", + "required": true + } + } + }, + "/dashboards/search": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "search_dashboards", + "summary": "Search Dashboards", + "description": "### Search Dashboards\n\nReturns an **array of dashboard objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Match dashboard id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "query", + "description": "Match dashboard slug.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "title", + "in": "query", + "description": "Match Dashboard title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "description", + "in": "query", + "description": "Match Dashboard description.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_favorite_id", + "in": "query", + "description": "Filter on a content favorite id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "folder_id", + "in": "query", + "description": "Filter on a particular space.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "deleted", + "in": "query", + "description": "Filter on dashboards deleted status.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "query", + "description": "Filter on dashboards created by a particular user.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "view_count", + "in": "query", + "description": "Filter on a particular value of view_count", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Filter on a content favorite id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "curate", + "in": "query", + "description": "Exclude items that exist only in personal spaces other than the users", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "last_viewed_at", + "in": "query", + "description": "Select dashboards based on when they were last viewed", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "Requested page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Results per page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :view_count, :favorite_count, :slug, :content_favorite_id, :content_metadata_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at]", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "dashboards", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboards/{lookml_dashboard_id}/import/{space_id}": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "import_lookml_dashboard", + "summary": "Import LookML Dashboard", + "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", + "parameters": [ + { + "name": "lookml_dashboard_id", + "in": "path", + "description": "Id of LookML dashboard", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "space_id", + "in": "path", + "description": "Id of space to import the dashboard to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "raw_locale", + "in": "query", + "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "201": { + "description": "dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + }, + "description": "Dashboard", + "required": false + } + } + }, + "/dashboards/{lookml_dashboard_id}/sync": { + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "sync_lookml_dashboard", + "summary": "Sync LookML Dashboard", + "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", + "parameters": [ + { + "name": "lookml_dashboard_id", + "in": "path", + "description": "Id of LookML dashboard, in the form 'model::dashboardname'", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "raw_locale", + "in": "query", + "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Ids of all the dashboards that were updated by this operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + }, + "description": "Dashboard", + "required": true + } + } + }, + "/dashboards/{dashboard_id}": { + "delete": { + "tags": [ + "Dashboard" + ], + "operationId": "delete_dashboard", + "summary": "Delete Dashboard", + "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "update_dashboard", + "summary": "Update Dashboard", + "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + }, + "description": "Dashboard", + "required": true + } + }, + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard", + "summary": "Get Dashboard", + "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboards/aggregate_table_lookml/{dashboard_id}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_aggregate_table_lookml", + "summary": "Get Aggregate Table LookML for a dashboard", + "description": "### Get Aggregate Table LookML for Each Query on a Dahboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "JSON for Aggregate Table LookML", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardAggregateTableLookml" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboards/lookml/{dashboard_id}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_lookml", + "summary": "Get lookml of a UDD", + "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "json of dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLookml" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboards/{dashboard_id}/move": { + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "move_dashboard", + "summary": "Move Dashboard", + "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Dashboard id to move.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "folder_id", + "in": "query", + "description": "Folder id to move to.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "201": { + "description": "dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboards/{dashboard_id}/copy": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "copy_dashboard", + "summary": "Copy Dashboard", + "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Dashboard id to copy.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "folder_id", + "in": "query", + "description": "Folder id to copy to.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "201": { + "description": "dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboard_elements/search": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "search_dashboard_elements", + "summary": "Search Dashboard Elements", + "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "query", + "description": "Select elements that refer to a given dashboard id", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "look_id", + "in": "query", + "description": "Select elements that refer to a given look id", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "title", + "in": "query", + "description": "Match the title of element", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "deleted", + "in": "query", + "description": "Select soft-deleted dashboard elements", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by. Sortable fields: [:look_id, :dashboard_id, :deleted, :title]", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard elements", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardElement" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboard_elements/{dashboard_element_id}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_element", + "summary": "Get DashboardElement", + "description": "### Get information about the dashboard element with a specific id.", + "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardElement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardElement" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Dashboard" + ], + "operationId": "delete_dashboard_element", + "summary": "Delete DashboardElement", + "description": "### Delete a dashboard element with a specific id.", + "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "update_dashboard_element", + "summary": "Update DashboardElement", + "description": "### Update the dashboard element with a specific id.", + "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardElement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardElement" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardElement" + } + } + }, + "description": "DashboardElement", + "required": true + } + } + }, + "/dashboards/{dashboard_id}/dashboard_elements": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_dashboard_elements", + "summary": "Get All DashboardElements", + "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardElement", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardElement" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboard_elements": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "create_dashboard_element", + "summary": "Create DashboardElement", + "description": "### Create a dashboard element on the dashboard with a specific id.", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardElement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardElement" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardElement" + } + } + }, + "description": "DashboardElement", + "required": true + } + } + }, + "/dashboard_filters/{dashboard_filter_id}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_filter", + "summary": "Get Dashboard Filter", + "description": "### Get information about the dashboard filters with a specific id.", + "parameters": [ + { + "name": "dashboard_filter_id", + "in": "path", + "description": "Id of dashboard filters", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard Filter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardFilter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Dashboard" + ], + "operationId": "delete_dashboard_filter", + "summary": "Delete Dashboard Filter", + "description": "### Delete a dashboard filter with a specific id.", + "parameters": [ + { + "name": "dashboard_filter_id", + "in": "path", + "description": "Id of dashboard filter", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "update_dashboard_filter", + "summary": "Update Dashboard Filter", + "description": "### Update the dashboard filter with a specific id.", + "parameters": [ + { + "name": "dashboard_filter_id", + "in": "path", + "description": "Id of dashboard filter", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard Filter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardFilter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardFilter" + } + } + }, + "description": "Dashboard Filter", + "required": true + } + } + }, + "/dashboards/{dashboard_id}/dashboard_filters": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_dashboard_filters", + "summary": "Get All Dashboard Filters", + "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard Filter", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardFilter" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboard_filters": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "create_dashboard_filter", + "summary": "Create Dashboard Filter", + "description": "### Create a dashboard filter on the dashboard with a specific id.", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard Filter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardFilter" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDashboardFilter" + } + } + }, + "description": "Dashboard Filter", + "required": true + } + } + }, + "/dashboard_layout_components/{dashboard_layout_component_id}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_layout_component", + "summary": "Get DashboardLayoutComponent", + "description": "### Get information about the dashboard elements with a specific id.", + "parameters": [ + { + "name": "dashboard_layout_component_id", + "in": "path", + "description": "Id of dashboard layout component", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardLayoutComponent", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayoutComponent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "update_dashboard_layout_component", + "summary": "Update DashboardLayoutComponent", + "description": "### Update the dashboard element with a specific id.", + "parameters": [ + { + "name": "dashboard_layout_component_id", + "in": "path", + "description": "Id of dashboard layout component", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardLayoutComponent", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayoutComponent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayoutComponent" + } + } + }, + "description": "DashboardLayoutComponent", + "required": true + } + } + }, + "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_layout_dashboard_layout_components", + "summary": "Get All DashboardLayoutComponents", + "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", + "parameters": [ + { + "name": "dashboard_layout_id", + "in": "path", + "description": "Id of dashboard layout component", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardLayoutComponent", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardLayoutComponent" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboard_layouts/{dashboard_layout_id}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_layout", + "summary": "Get DashboardLayout", + "description": "### Get information about the dashboard layouts with a specific id.", + "parameters": [ + { + "name": "dashboard_layout_id", + "in": "path", + "description": "Id of dashboard layouts", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardLayout", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayout" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Dashboard" + ], + "operationId": "delete_dashboard_layout", + "summary": "Delete DashboardLayout", + "description": "### Delete a dashboard layout with a specific id.", + "parameters": [ + { + "name": "dashboard_layout_id", + "in": "path", + "description": "Id of dashboard layout", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Dashboard" + ], + "operationId": "update_dashboard_layout", + "summary": "Update DashboardLayout", + "description": "### Update the dashboard layout with a specific id.", + "parameters": [ + { + "name": "dashboard_layout_id", + "in": "path", + "description": "Id of dashboard layout", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardLayout", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayout" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayout" + } + } + }, + "description": "DashboardLayout", + "required": true + } + } + }, + "/dashboards/{dashboard_id}/dashboard_layouts": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_dashboard_layouts", + "summary": "Get All DashboardLayouts", + "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardLayout", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardLayout" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dashboard_layouts": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "create_dashboard_layout", + "summary": "Create DashboardLayout", + "description": "### Create a dashboard layout on the dashboard with a specific id.", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardLayout", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayout" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayout" + } + } + }, + "description": "DashboardLayout", + "required": true + } + } + }, + "/data_actions": { + "post": { + "tags": [ + "DataAction" + ], + "operationId": "perform_data_action", + "summary": "Send a Data Action", + "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", + "responses": { + "200": { + "description": "Data Action Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataActionResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataActionRequest" + } + } + }, + "description": "Data Action Request", + "required": true + } + } + }, + "/data_actions/form": { + "post": { + "tags": [ + "DataAction" + ], + "operationId": "fetch_remote_data_action_form", + "summary": "Fetch Remote Data Action Form", + "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", + "responses": { + "200": { + "description": "Data Action Form", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataActionForm" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "description": "Data Action Request", + "required": true + } + } + }, + "/datagroups": { + "get": { + "tags": [ + "Datagroup" + ], + "operationId": "all_datagroups", + "summary": "Get All Datagroups", + "description": "### Get information about all datagroups.\n", + "responses": { + "200": { + "description": "Datagroup", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Datagroup" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/datagroups/{datagroup_id}": { + "get": { + "tags": [ + "Datagroup" + ], + "operationId": "datagroup", + "summary": "Get Datagroup", + "description": "### Get information about a datagroup.\n", + "parameters": [ + { + "name": "datagroup_id", + "in": "path", + "description": "ID of datagroup.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Datagroup", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Datagroup" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Datagroup" + ], + "operationId": "update_datagroup", + "summary": "Update Datagroup", + "description": "### Update a datagroup using the specified params.\n", + "parameters": [ + { + "name": "datagroup_id", + "in": "path", + "description": "ID of datagroup.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Datagroup", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Datagroup" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Datagroup" + } + } + }, + "description": "Datagroup", + "required": true + } + } + }, + "/connections": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_connections", + "summary": "Get All Connections", + "description": "### Get information about all connections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Connection", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DBConnection" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Connection" + ], + "operationId": "create_connection", + "summary": "Create Connection", + "description": "### Create a connection using the specified configuration.\n", + "responses": { + "200": { + "description": "Connection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DBConnection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DBConnection" + } + } + }, + "description": "Connection", + "required": true + } + } + }, + "/connections/{connection_name}": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "connection", + "summary": "Get Connection", + "description": "### Get information about a connection.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Connection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DBConnection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Connection" + ], + "operationId": "update_connection", + "summary": "Update Connection", + "description": "### Update a connection using the specified configuration.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Connection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DBConnection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DBConnection" + } + } + }, + "description": "Connection", + "required": true + } + }, + "delete": { + "tags": [ + "Connection" + ], + "operationId": "delete_connection", + "summary": "Delete Connection", + "description": "### Delete a connection.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/connections/{connection_name}/connection_override/{override_context}": { + "delete": { + "tags": [ + "Connection" + ], + "operationId": "delete_connection_override", + "summary": "Delete Connection Override", + "description": "### Delete a connection override.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "override_context", + "in": "path", + "description": "Context of connection override", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/connections/{connection_name}/test": { + "put": { + "tags": [ + "Connection" + ], + "operationId": "test_connection", + "summary": "Test Connection", + "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tests", + "in": "query", + "description": "Array of names of tests to run", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Test results", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DBConnectionTestResult" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/connections/test": { + "put": { + "tags": [ + "Connection" + ], + "operationId": "test_connection_config", + "summary": "Test Connection Configuration", + "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "parameters": [ + { + "name": "tests", + "in": "query", + "description": "Array of names of tests to run", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Test results", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DBConnectionTestResult" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DBConnection" + } + } + }, + "description": "Connection", + "required": true + } + } + }, + "/projects/{project_id}/manifest/lock_all": { + "post": { + "tags": [ + "Project" + ], + "operationId": "lock_all", + "summary": "Lock All", + "description": " ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project Dependency Manager", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "204": { + "description": "Returns 204 if dependencies successfully installed, otherwise 400 with an error message" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/derived_table/graph/model/{model}": { + "get": { + "tags": [ + "LookmlModel" + ], + "operationId": "graph_derived_tables_for_model", + "summary": "Get Derived Table", + "description": "### Discover information about derived tables\n", + "parameters": [ + { + "name": "model", + "in": "path", + "description": "The name of the Lookml model.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "format", + "in": "query", + "description": "The format of the graph. Valid values are [dot]. Default is `dot`", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "color", + "in": "query", + "description": "Color denoting the build status of the graph. Grey = not built, green = built, yellow = building, red = error.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Derived Table", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DependencyGraph" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/dialect_info": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_dialect_infos", + "summary": "Get All Dialect Infos", + "description": "### Get information about all dialects.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dialect Info", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DialectInfo" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/digest_emails_enabled": { + "get": { + "tags": [ + "Config" + ], + "operationId": "digest_emails_enabled", + "summary": "Get Digest_emails", + "description": "### Retrieve the value for whether or not digest emails is enabled\n", + "responses": { + "200": { + "description": "Digest_emails", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DigestEmails" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_digest_emails_enabled", + "summary": "Update Digest_emails", + "description": "### Update the setting for enabling/disabling digest emails\n", + "responses": { + "200": { + "description": "Digest_emails", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DigestEmails" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DigestEmails" + } + } + }, + "description": "Digest_emails", + "required": true + } + } + }, + "/digest_email_send": { + "post": { + "tags": [ + "Config" + ], + "operationId": "create_digest_email_send", + "summary": "Deliver digest email contents", + "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", + "responses": { + "200": { + "description": "Status of generating and sending the data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DigestEmailSend" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "none", + "x-looker-rate-limited": true + } + }, + "/embed/sso_url": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "create_sso_embed_url", + "summary": "Create SSO Embed Url", + "description": "### Create SSO Embed URL\n\nCreates an SSO embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to this URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed SSO embed URL can only be used once. After it has been used to request a page from the\nLooker server, the URL is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (group_ids property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the group_ids property, or both the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the group_ids, models, and permissions properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nSSO embed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nTo diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the newest active secret defined in the Looker instance.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", + "responses": { + "200": { + "description": "Signed SSO URL", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedUrlResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "none", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedSsoParams" + } + } + }, + "description": "SSO parameters", + "required": true + } + } + }, + "/embed/token_url/me": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "create_embed_url_as_me", + "summary": "Create Embed URL", + "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.looker.com/r/admin/embed/private-embed). Instead of\nof logging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this embed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", + "responses": { + "200": { + "description": "Embed URL", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedUrlResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "none", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedParams" + } + } + }, + "description": "Embed parameters", + "required": true + } + } + }, + "/external_oauth_applications": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_external_oauth_applications", + "summary": "Get All External OAuth Applications", + "description": "### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Application name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "client_id", + "in": "query", + "description": "Application Client ID", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "External OAuth Application", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExternalOauthApplication" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Connection" + ], + "operationId": "create_external_oauth_application", + "summary": "Create External OAuth Application", + "description": "### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "responses": { + "200": { + "description": "External OAuth Application", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalOauthApplication" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalOauthApplication" + } + } + }, + "description": "External OAuth Application", + "required": true + } + } + }, + "/external_oauth_applications/user_state": { + "post": { + "tags": [ + "Connection" + ], + "operationId": "create_oauth_application_user_state", + "summary": "Create Create OAuth user state.", + "description": "### Create OAuth User state.\n", + "responses": { + "200": { + "description": "Created user state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOAuthApplicationUserStateResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOAuthApplicationUserStateRequest" + } + } + }, + "description": "Create OAuth user state.", + "required": true + } + } + }, + "/projects/{project_id}/git_branches": { + "get": { + "tags": [ + "Project" + ], + "operationId": "all_git_branches", + "summary": "Get All Git Branches", + "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Git Branch", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GitBranch" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/git_branch": { + "get": { + "tags": [ + "Project" + ], + "operationId": "git_branch", + "summary": "Get Active Git Branch", + "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Git Branch", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitBranch" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Project" + ], + "operationId": "create_git_branch", + "summary": "Checkout New Git Branch", + "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Git Branch", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitBranch" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitBranch" + } + } + }, + "description": "Git Branch", + "required": true + } + }, + "put": { + "tags": [ + "Project" + ], + "operationId": "update_git_branch", + "summary": "Update Project Git Branch", + "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Git Branch", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitBranch" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitBranch" + } + } + }, + "description": "Git Branch", + "required": true + } + } + }, + "/projects/{project_id}/git_branch/{branch_name}": { + "get": { + "tags": [ + "Project" + ], + "operationId": "find_git_branch", + "summary": "Find a Git Branch", + "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch_name", + "in": "path", + "description": "Branch Name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Git Branch", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitBranch" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Project" + ], + "operationId": "delete_git_branch", + "summary": "Delete a Git Branch", + "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch_name", + "in": "path", + "description": "Branch Name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/groups": { + "get": { + "tags": [ + "Group" + ], + "operationId": "all_groups", + "summary": "Get All Groups", + "description": "### Get information about all groups.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "Requested page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Results per page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ids", + "in": "query", + "description": "Optional of ids to get specific groups.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Id of content metadata to which groups must have access.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "can_add_to_content_metadata", + "in": "query", + "description": "Select only groups that either can/cannot be given access to content.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Group" + ], + "operationId": "create_group", + "summary": "Create Group", + "description": "### Creates a new group (admin only).\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + }, + "description": "Group", + "required": true + } + } + }, + "/groups/search": { + "get": { + "tags": [ + "Group" + ], + "operationId": "search_groups", + "summary": "Search Groups", + "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "id", + "in": "query", + "description": "Match group id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match group name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "external_group_id", + "in": "query", + "description": "Match group external_group_id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "externally_managed", + "in": "query", + "description": "Match group externally_managed.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "externally_orphaned", + "in": "query", + "description": "Match group externally_orphaned.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/groups/search/with_roles": { + "get": { + "tags": [ + "Group" + ], + "operationId": "search_groups_with_roles", + "summary": "Search Groups with Roles", + "description": "### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "id", + "in": "query", + "description": "Match group id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match group name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "external_group_id", + "in": "query", + "description": "Match group external_group_id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "externally_managed", + "in": "query", + "description": "Match group externally_managed.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "externally_orphaned", + "in": "query", + "description": "Match group externally_orphaned.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupSearch" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/groups/search/with_hierarchy": { + "get": { + "tags": [ + "Group" + ], + "operationId": "search_groups_with_hierarchy", + "summary": "Search Groups with Hierarchy", + "description": "### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "id", + "in": "query", + "description": "Match group id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match group name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "external_group_id", + "in": "query", + "description": "Match group external_group_id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "externally_managed", + "in": "query", + "description": "Match group externally_managed.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "externally_orphaned", + "in": "query", + "description": "Match group externally_orphaned.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupHierarchy" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/groups/{group_id}": { + "get": { + "tags": [ + "Group" + ], + "operationId": "group", + "summary": "Get Group", + "description": "### Get information about a group.\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Group" + ], + "operationId": "update_group", + "summary": "Update Group", + "description": "### Updates the a group (admin only).", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + }, + "description": "Group", + "required": true + } + }, + "delete": { + "tags": [ + "Group" + ], + "operationId": "delete_group", + "summary": "Delete Group", + "description": "### Deletes a group (admin only).\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/groups/{group_id}/groups": { + "get": { + "tags": [ + "Group" + ], + "operationId": "all_group_groups", + "summary": "Get All Groups in Group", + "description": "### Get information about all the groups in a group\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "All groups in group.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Group" + ], + "operationId": "add_group_group", + "summary": "Add a Group to Group", + "description": "### Adds a new group to a group.\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Added group.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupIdForGroupInclusion" + } + } + }, + "description": "Group id to add", + "required": true + } + } + }, + "/groups/{group_id}/users": { + "get": { + "tags": [ + "Group" + ], + "operationId": "all_group_users", + "summary": "Get All Users in Group", + "description": "### Get information about all the users directly included in a group.\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "Requested page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Results per page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "All users in group.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Group" + ], + "operationId": "add_group_user", + "summary": "Add a User to Group", + "description": "### Adds a new user to a group.\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Added user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupIdForGroupUserInclusion" + } + } + }, + "description": "User id to add", + "required": true + } + } + }, + "/groups/{group_id}/users/{user_id}": { + "delete": { + "tags": [ + "Group" + ], + "operationId": "delete_group_user", + "summary": "Remove a User from Group", + "description": "### Removes a user from a group.\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "path", + "description": "Id of user to remove from group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "User successfully removed from group" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/groups/{group_id}/groups/{deleting_group_id}": { + "delete": { + "tags": [ + "Group" + ], + "operationId": "delete_group_from_group", + "summary": "Deletes a Group from Group", + "description": "### Removes a group from a group.\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "deleting_group_id", + "in": "path", + "description": "Id of group to delete", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Group successfully deleted" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/groups/{group_id}/attribute_values/{user_attribute_id}": { + "patch": { + "tags": [ + "Group" + ], + "operationId": "update_user_attribute_group_value", + "summary": "Set User Attribute Group Value", + "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Group value object.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } + } + }, + "description": "New value for group.", + "required": true + } + }, + "delete": { + "tags": [ + "Group" + ], + "operationId": "delete_user_attribute_group_value", + "summary": "Delete User Attribute Group Value", + "description": "### Remove a user attribute value from a group.\n", + "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Value successfully unset" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/boards": { + "get": { + "tags": [ + "Board" + ], + "operationId": "all_boards", + "summary": "Get All Boards", + "description": "### Get information about all boards.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Board" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Board" + ], + "operationId": "create_board", + "summary": "Create Board", + "description": "### Create a new board.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Board" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Board" + } + } + }, + "description": "Board", + "required": true + } + } + }, + "/boards/search": { + "get": { + "tags": [ + "Board" + ], + "operationId": "search_boards", + "summary": "Search Boards", + "description": "### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "title", + "in": "query", + "description": "Matches board title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "created_at", + "in": "query", + "description": "Matches the timestamp for when the board was created.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "first_name", + "in": "query", + "description": "The first name of the user who created this board.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "last_name", + "in": "query", + "description": "The last name of the user who created this board.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "favorited", + "in": "query", + "description": "Return favorited boards when true.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "creator_id", + "in": "query", + "description": "Filter on boards created by a particular user.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "The fields to sort the results by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "The page to return.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "The number of items in the returned page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "The number of items to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "The maximum number of items to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "boards", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Board" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/boards/{board_id}": { + "get": { + "tags": [ + "Board" + ], + "operationId": "board", + "summary": "Get Board", + "description": "### Get information about a board.\n", + "parameters": [ + { + "name": "board_id", + "in": "path", + "description": "Id of board", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Board" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Board" + ], + "operationId": "update_board", + "summary": "Update Board", + "description": "### Update a board definition.\n", + "parameters": [ + { + "name": "board_id", + "in": "path", + "description": "Id of board", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Board" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Board" + } + } + }, + "description": "Board", + "required": true + } + }, + "delete": { + "tags": [ + "Board" + ], + "operationId": "delete_board", + "summary": "Delete Board", + "description": "### Delete a board.\n", + "parameters": [ + { + "name": "board_id", + "in": "path", + "description": "Id of board", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/board_items": { + "get": { + "tags": [ + "Board" + ], + "operationId": "all_board_items", + "summary": "Get All Board Items", + "description": "### Get information about all board items.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "board_section_id", + "in": "query", + "description": "Filter to a specific board section", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board Item", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardItem" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Board" + ], + "operationId": "create_board_item", + "summary": "Create Board Item", + "description": "### Create a new board item.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board Item", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardItem" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardItem" + } + } + }, + "description": "Board Item", + "required": true + } + } + }, + "/board_items/{board_item_id}": { + "get": { + "tags": [ + "Board" + ], + "operationId": "board_item", + "summary": "Get Board Item", + "description": "### Get information about a board item.\n", + "parameters": [ + { + "name": "board_item_id", + "in": "path", + "description": "Id of board item", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board Item", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardItem" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Board" + ], + "operationId": "update_board_item", + "summary": "Update Board Item", + "description": "### Update a board item definition.\n", + "parameters": [ + { + "name": "board_item_id", + "in": "path", + "description": "Id of board item", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board Item", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardItem" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardItem" + } + } + }, + "description": "Board Item", + "required": true + } + }, + "delete": { + "tags": [ + "Board" + ], + "operationId": "delete_board_item", + "summary": "Delete Board Item", + "description": "### Delete a board item.\n", + "parameters": [ + { + "name": "board_item_id", + "in": "path", + "description": "Id of board_item", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/primary_homepage_sections": { + "get": { + "tags": [ + "Homepage" + ], + "operationId": "all_primary_homepage_sections", + "summary": "Get All Primary homepage sections", + "description": "### Get information about the primary homepage's sections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Primary homepage section", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HomepageSection" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/board_sections": { + "get": { + "tags": [ + "Board" + ], + "operationId": "all_board_sections", + "summary": "Get All Board sections", + "description": "### Get information about all board sections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board section", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardSection" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Board" + ], + "operationId": "create_board_section", + "summary": "Create Board section", + "description": "### Create a new board section.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardSection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardSection" + } + } + }, + "description": "Board section", + "required": true + } + } + }, + "/board_sections/{board_section_id}": { + "get": { + "tags": [ + "Board" + ], + "operationId": "board_section", + "summary": "Get Board section", + "description": "### Get information about a board section.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardSection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Board" + ], + "operationId": "update_board_section", + "summary": "Update Board section", + "description": "### Update a board section definition.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardSection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardSection" + } + } + }, + "description": "Board section", + "required": true + } + }, + "delete": { + "tags": [ + "Board" + ], + "operationId": "delete_board_section", + "summary": "Delete Board section", + "description": "### Delete a board section.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/integration_hubs": { + "get": { + "tags": [ + "Integration" + ], + "operationId": "all_integration_hubs", + "summary": "Get All Integration Hubs", + "description": "### Get information about all Integration Hubs.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Integration Hub", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Integration" + ], + "operationId": "create_integration_hub", + "summary": "Create Integration Hub", + "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Integration Hub", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + }, + "description": "Integration Hub", + "required": true + } + } + }, + "/integration_hubs/{integration_hub_id}": { + "get": { + "tags": [ + "Integration" + ], + "operationId": "integration_hub", + "summary": "Get Integration Hub", + "description": "### Get information about a Integration Hub.\n", + "parameters": [ + { + "name": "integration_hub_id", + "in": "path", + "description": "Id of Integration Hub", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Integration Hub", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Integration" + ], + "operationId": "update_integration_hub", + "summary": "Update Integration Hub", + "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", + "parameters": [ + { + "name": "integration_hub_id", + "in": "path", + "description": "Id of Integration Hub", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Integration Hub", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + }, + "description": "Integration Hub", + "required": true + } + }, + "delete": { + "tags": [ + "Integration" + ], + "operationId": "delete_integration_hub", + "summary": "Delete Integration Hub", + "description": "### Delete a Integration Hub.\n", + "parameters": [ + { + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { + "post": { + "tags": [ + "Integration" + ], + "operationId": "accept_integration_hub_legal_agreement", + "summary": "Accept Integration Hub Legal Agreement", + "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", + "parameters": [ + { + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Integration hub", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/integrations": { + "get": { + "tags": [ + "Integration" + ], + "operationId": "all_integrations", + "summary": "Get All Integrations", + "description": "### Get information about all Integrations.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "integration_hub_id", + "in": "query", + "description": "Filter to a specific provider", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Integration", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Integration" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/integrations/{integration_id}": { + "get": { + "tags": [ + "Integration" + ], + "operationId": "integration", + "summary": "Get Integration", + "description": "### Get information about a Integration.\n", + "parameters": [ + { + "name": "integration_id", + "in": "path", + "description": "Id of integration", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Integration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Integration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Integration" + ], + "operationId": "update_integration", + "summary": "Update Integration", + "description": "### Update parameters on a Integration.\n", + "parameters": [ + { + "name": "integration_id", + "in": "path", + "description": "Id of integration", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Integration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Integration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Integration" + } + } + }, + "description": "Integration", + "required": true + } + } + }, + "/integrations/{integration_id}/form": { + "post": { + "tags": [ + "Integration" + ], + "operationId": "fetch_integration_form", + "summary": "Fetch Remote Integration Form", + "description": "Returns the Integration form for presentation to the user.", + "parameters": [ + { + "name": "integration_id", + "in": "path", + "description": "Id of integration", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Data Action Form", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataActionForm" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "description": "Integration Form Request", + "required": false + } + } + }, + "/integrations/{integration_id}/test": { + "post": { + "tags": [ + "Integration" + ], + "operationId": "test_integration", + "summary": "Test integration", + "description": "Tests the integration to make sure all the settings are working.", + "parameters": [ + { + "name": "integration_id", + "in": "path", + "description": "Id of integration", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Test Result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationTestResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/internal_help_resources_content": { + "get": { + "tags": [ + "Config" + ], + "operationId": "internal_help_resources_content", + "summary": "Get Internal Help Resources Content", + "description": "### Set the menu item name and content for internal help resources\n", + "responses": { + "200": { + "description": "Internal Help Resources Content", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalHelpResourcesContent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_internal_help_resources_content", + "summary": "Update internal help resources content", + "description": "Update internal help resources content\n", + "responses": { + "200": { + "description": "Internal Help Resources Content", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalHelpResourcesContent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalHelpResourcesContent" + } + } + }, + "description": "Internal Help Resources Content", + "required": true + } + } + }, + "/internal_help_resources_enabled": { + "get": { + "tags": [ + "Config" + ], + "operationId": "internal_help_resources", + "summary": "Get Internal Help Resources", + "description": "### Get and set the options for internal help resources\n", + "responses": { + "200": { + "description": "Internal Help Resources", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalHelpResources" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/internal_help_resources": { + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_internal_help_resources", + "summary": "Update internal help resources configuration", + "description": "Update internal help resources settings\n", + "responses": { + "200": { + "description": "Custom Welcome Email", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalHelpResources" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalHelpResources" + } + } + }, + "description": "Custom Welcome Email", + "required": true + } + } + }, + "/ldap_config": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "ldap_config", + "summary": "Get LDAP Configuration", + "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", + "responses": { + "200": { + "description": "LDAP Configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_ldap_config", + "summary": "Update LDAP Configuration", + "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", + "responses": { + "200": { + "description": "New state for LDAP Configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + }, + "description": "LDAP Config", + "required": true + } + } + }, + "/ldap_config/test_connection": { + "put": { + "tags": [ + "Auth" + ], + "operationId": "test_ldap_config_connection", + "summary": "Test LDAP Connection", + "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n", + "responses": { + "200": { + "description": "Result info.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfigTestResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + }, + "description": "LDAP Config", + "required": true + } + } + }, + "/ldap_config/test_auth": { + "put": { + "tags": [ + "Auth" + ], + "operationId": "test_ldap_config_auth", + "summary": "Test LDAP Auth", + "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\n", + "responses": { + "200": { + "description": "Result info.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfigTestResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + }, + "description": "LDAP Config", + "required": true + } + } + }, + "/ldap_config/test_user_info": { + "put": { + "tags": [ + "Auth" + ], + "operationId": "test_ldap_config_user_info", + "summary": "Test LDAP User Info", + "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user without needing to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full info for the user from the LDAP server without actually authenticating the user. So, user password is not required.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\n", + "responses": { + "200": { + "description": "Result info.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfigTestResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + }, + "description": "LDAP Config", + "required": true + } + } + }, + "/ldap_config/test_user_auth": { + "put": { + "tags": [ + "Auth" + ], + "operationId": "test_ldap_config_user_auth", + "summary": "Test LDAP User Auth", + "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\n", + "responses": { + "200": { + "description": "Result info.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfigTestResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + }, + "description": "LDAP Config", + "required": true + } + } + }, + "/legacy_features": { + "get": { + "tags": [ + "Config" + ], + "operationId": "all_legacy_features", + "summary": "Get All Legacy Features", + "description": "### Get all legacy features.\n", + "responses": { + "200": { + "description": "Legacy Feature", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LegacyFeature" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/legacy_features/{legacy_feature_id}": { + "get": { + "tags": [ + "Config" + ], + "operationId": "legacy_feature", + "summary": "Get Legacy Feature", + "description": "### Get information about the legacy feature with a specific id.\n", + "parameters": [ + { + "name": "legacy_feature_id", + "in": "path", + "description": "id of legacy feature", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Legacy Feature", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LegacyFeature" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_legacy_feature", + "summary": "Update Legacy Feature", + "description": "### Update information about the legacy feature with a specific id.\n", + "parameters": [ + { + "name": "legacy_feature_id", + "in": "path", + "description": "id of legacy feature", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Legacy Feature", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LegacyFeature" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LegacyFeature" + } + } + }, + "description": "Legacy Feature", + "required": true + } + } + }, + "/locales": { + "get": { + "tags": [ + "Config" + ], + "operationId": "all_locales", + "summary": "Get All Locales", + "description": "### Get a list of locales that Looker supports.\n", + "responses": { + "200": { + "description": "Locale", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Locale" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/looks": { + "get": { + "tags": [ + "Look" + ], + "operationId": "all_looks", + "summary": "Get All Looks", + "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Look", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Look" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Look" + ], + "operationId": "create_look", + "summary": "Create Look", + "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + }, + "description": "Look", + "required": true + } + } + }, + "/looks/search": { + "get": { + "tags": [ + "Look" + ], + "operationId": "search_looks", + "summary": "Search Looks", + "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Match look id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "title", + "in": "query", + "description": "Match Look title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "description", + "in": "query", + "description": "Match Look description.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_favorite_id", + "in": "query", + "description": "Select looks with a particular content favorite id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "folder_id", + "in": "query", + "description": "Select looks in a particular folder.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "query", + "description": "Select looks created by a particular user.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "view_count", + "in": "query", + "description": "Select looks with particular view_count value", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "deleted", + "in": "query", + "description": "Select soft-deleted looks", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "query_id", + "in": "query", + "description": "Select looks that reference a particular query by query_id", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "curate", + "in": "query", + "description": "Exclude items that exist only in personal spaces other than the users", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "last_viewed_at", + "in": "query", + "description": "Select looks based on when they were last viewed", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "Requested page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Results per page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort results by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :updated_at, :last_updater_id, :view_count, :favorite_count, :content_favorite_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :query_id]", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "looks", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Look" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/looks/{look_id}": { + "get": { + "tags": [ + "Look" + ], + "operationId": "look", + "summary": "Get Look", + "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Look" + ], + "operationId": "update_look", + "summary": "Update Look", + "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nIn API 3.1 and later, you can pass `deleted: true` as a parameter to [search_looks()](#!/3.1/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + }, + "description": "Look", + "required": true + } + }, + "delete": { + "tags": [ + "Look" + ], + "operationId": "delete_look", + "summary": "Delete Look", + "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/looks/{look_id}/run/{result_format}": { + "get": { + "tags": [ + "Look" + ], + "operationId": "run_look", + "summary": "Run Look", + "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Format of result", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Row limit (may override the limit in the saved query).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "apply_formatting", + "in": "query", + "description": "Apply model-specified formatting to each result.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "apply_vis", + "in": "query", + "description": "Apply visualization options to results.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache", + "in": "query", + "description": "Get results from cache if available.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "image_width", + "in": "query", + "description": "Render width for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "image_height", + "in": "query", + "description": "Render height for image formats.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "generate_drill_links", + "in": "query", + "description": "Generate drill links (only applicable to 'json_detail' format.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "force_production", + "in": "query", + "description": "Force use of production models even if the user is in development mode.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "cache_only", + "in": "query", + "description": "Retrieve any results from cache even if the results have expired.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "path_prefix", + "in": "query", + "description": "Prefix to use for drill links (url encoded).", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "rebuild_pdts", + "in": "query", + "description": "Rebuild PDTS used in query.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "server_table_calcs", + "in": "query", + "description": "Perform table calculations on query results", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Look", + "content": { + "text": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "image/jpeg": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/looks/{look_id}/copy": { + "post": { + "tags": [ + "Look" + ], + "operationId": "copy_look", + "summary": "Copy Look", + "description": "### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Look id to copy.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "folder_id", + "in": "query", + "description": "Folder id to copy to.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + }, + "201": { + "description": "look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Look" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/looks/{look_id}/move": { + "patch": { + "tags": [ + "Look" + ], + "operationId": "move_look", + "summary": "Move Look", + "description": "### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Look id to move.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "folder_id", + "in": "query", + "description": "Folder id to move to.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + }, + "201": { + "description": "look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Look" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/lookml_models": { + "get": { + "tags": [ + "LookmlModel" + ], + "operationId": "all_lookml_models", + "summary": "Get All LookML Models", + "description": "### Get information about all lookml models.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (can be used with offset)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (Defaults to 0 if not set when limit is used)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "LookML Model", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "LookmlModel" + ], + "operationId": "create_lookml_model", + "summary": "Create LookML Model", + "description": "### Create a lookml model using the specified configuration.\n", + "responses": { + "200": { + "description": "LookML Model", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookmlModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookmlModel" + } + } + }, + "description": "LookML Model", + "required": true + } + } + }, + "/lookml_models/{lookml_model_name}": { + "get": { + "tags": [ + "LookmlModel" + ], + "operationId": "lookml_model", + "summary": "Get LookML Model", + "description": "### Get information about a lookml model.\n", + "parameters": [ + { + "name": "lookml_model_name", + "in": "path", + "description": "Name of lookml model.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "LookML Model", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookmlModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "LookmlModel" + ], + "operationId": "update_lookml_model", + "summary": "Update LookML Model", + "description": "### Update a lookml model using the specified configuration.\n", + "parameters": [ + { + "name": "lookml_model_name", + "in": "path", + "description": "Name of lookml model.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "LookML Model", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookmlModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookmlModel" + } + } + }, + "description": "LookML Model", + "required": true + } + }, + "delete": { + "tags": [ + "LookmlModel" + ], + "operationId": "delete_lookml_model", + "summary": "Delete LookML Model", + "description": "### Delete a lookml model.\n", + "parameters": [ + { + "name": "lookml_model_name", + "in": "path", + "description": "Name of lookml model.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/lookml_models/{lookml_model_name}/explores/{explore_name}": { + "get": { + "tags": [ + "LookmlModel" + ], + "operationId": "lookml_model_explore", + "summary": "Get LookML Model Explore", + "description": "### Get information about a lookml model explore.\n", + "parameters": [ + { + "name": "lookml_model_name", + "in": "path", + "description": "Name of lookml model.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "explore_name", + "in": "path", + "description": "Name of explore.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "LookML Model Explore", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookmlModelExplore" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/merge_queries/{merge_query_id}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "merge_query", + "summary": "Get Merge Query", + "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", + "parameters": [ + { + "name": "merge_query_id", + "in": "path", + "description": "Merge Query Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Merge Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MergeQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/merge_queries": { + "post": { + "tags": [ + "Query" + ], + "operationId": "create_merge_query", + "summary": "Create Merge Query", + "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Merge Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MergeQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MergeQuery" + } + } + }, + "description": "Merge Query", + "required": false + } + } + }, + "/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "model_fieldname_suggestions", + "summary": "Model field name suggestions", + "description": "### Field name suggestions for a model and view\n\n", + "parameters": [ + { + "name": "model_name", + "in": "path", + "description": "Name of model", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "view_name", + "in": "path", + "description": "Name of view", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "field_name", + "in": "path", + "description": "Name of field to use for suggestions", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "term", + "in": "query", + "description": "Search term", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filters", + "in": "query", + "description": "Suggestion filters", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Model view field suggestions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelFieldSuggestions" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/models/{model_name}": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "get_model", + "summary": "Get a single model", + "description": "### Get a single model\n\n", + "parameters": [ + { + "name": "model_name", + "in": "path", + "description": "Name of model", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "A Model", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Model" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/connections/{connection_name}/databases": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "connection_databases", + "summary": "List accessible databases to this connection", + "description": "### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Database names", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/connections/{connection_name}/features": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "connection_features", + "summary": "Metadata features supported by this connection", + "description": "### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Connection features", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionFeatures" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/connections/{connection_name}/schemas": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "connection_schemas", + "summary": "Get schemas for a connection", + "description": "### Get the list of schemas and tables for a connection\n\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "database", + "in": "query", + "description": "For dialects that support multiple databases, optionally identify which to use", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cache", + "in": "query", + "description": "True to use fetch from cache, false to load fresh", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Schemas for connection", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Schema" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/connections/{connection_name}/tables": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "connection_tables", + "summary": "Get tables for a connection", + "description": "### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "database", + "in": "query", + "description": "Optional. Name of database to use for the query, only if applicable", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "schema_name", + "in": "query", + "description": "Optional. Return only tables for this schema", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cache", + "in": "query", + "description": "True to fetch from cache, false to load fresh", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Schemas and tables for connection", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaTables" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/connections/{connection_name}/columns": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "connection_columns", + "summary": "Get columns for a connection", + "description": "### Get the columns (and therefore also the tables) in a specific schema\n\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "database", + "in": "query", + "description": "For dialects that support multiple databases, optionally identify which to use", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "schema_name", + "in": "query", + "description": "Name of schema to use.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cache", + "in": "query", + "description": "True to fetch from cache, false to load fresh", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "table_limit", + "in": "query", + "description": "limits the tables per schema returned", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "table_names", + "in": "query", + "description": "only fetch columns for a given (comma-separated) list of tables", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Columns schema for connection", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaColumns" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/connections/{connection_name}/search_columns": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "connection_search_columns", + "summary": "Search a connection for columns", + "description": "### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "column_name", + "in": "query", + "description": "Column name to find", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Column names matching search pattern", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnSearch" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/connections/{connection_name}/cost_estimate": { + "post": { + "tags": [ + "Metadata" + ], + "operationId": "connection_cost_estimate", + "summary": "Estimate costs for a connection", + "description": "### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Connection cost estimates", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CostEstimate" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCostEstimate" + } + } + }, + "description": "SQL statement to estimate", + "required": true + } + } + }, + "/mobile/settings": { + "get": { + "tags": [ + "Config" + ], + "operationId": "mobile_settings", + "summary": "Get Mobile_Settings", + "description": "### Get all mobile settings.\n", + "responses": { + "200": { + "description": "Mobile_Settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MobileSettings" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/model_sets/search": { + "get": { + "tags": [ + "Role" + ], + "operationId": "search_model_sets", + "summary": "Search Model Sets", + "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match model set id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match model set name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_access", + "in": "query", + "description": "Match model sets by all_access status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "built_in", + "in": "query", + "description": "Match model sets by built_in status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Model Set", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelSet" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/model_sets/{model_set_id}": { + "get": { + "tags": [ + "Role" + ], + "operationId": "model_set", + "summary": "Get Model Set", + "description": "### Get information about the model set with a specific id.\n", + "parameters": [ + { + "name": "model_set_id", + "in": "path", + "description": "Id of model set", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Specified model set.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelSet" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Role" + ], + "operationId": "delete_model_set", + "summary": "Delete Model Set", + "description": "### Delete the model set with a specific id.\n", + "parameters": [ + { + "name": "model_set_id", + "in": "path", + "description": "id of model set", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Model set succssfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Role" + ], + "operationId": "update_model_set", + "summary": "Update Model Set", + "description": "### Update information about the model set with a specific id.\n", + "parameters": [ + { + "name": "model_set_id", + "in": "path", + "description": "id of model set", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "New state for specified model set.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelSet" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelSet" + } + } + }, + "description": "ModelSet", + "required": true + } + } + }, + "/model_sets": { + "get": { + "tags": [ + "Role" + ], + "operationId": "all_model_sets", + "summary": "Get All Model Sets", + "description": "### Get information about all model sets.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "All model sets.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelSet" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Role" + ], + "operationId": "create_model_set", + "summary": "Create Model Set", + "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", + "responses": { + "200": { + "description": "Newly created ModelSet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelSet" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelSet" + } + } + }, + "description": "ModelSet", + "required": true + } + } + }, + "/oauth_client_apps": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "all_oauth_client_apps", + "summary": "Get All OAuth Client Apps", + "description": "### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OAuth Client App", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/oauth_client_apps/{client_guid}": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "oauth_client_app", + "summary": "Get OAuth Client App", + "description": "### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OAuth Client App", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Auth" + ], + "operationId": "delete_oauth_client_app", + "summary": "Delete OAuth Client App", + "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\n### Note: this deletion cannot be undone.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Auth" + ], + "operationId": "register_oauth_client_app", + "summary": "Register OAuth App", + "description": "### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OAuth Client App", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + }, + "description": "OAuth Client App", + "required": true + } + }, + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_oauth_client_app", + "summary": "Update OAuth App", + "description": "### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OAuth Client App", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + }, + "description": "OAuth Client App", + "required": true + } + } + }, + "/oauth_client_apps/{client_guid}/tokens": { + "delete": { + "tags": [ + "Auth" + ], + "operationId": "invalidate_tokens", + "summary": "Invalidate Tokens", + "description": "### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of the application", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/oauth_client_apps/{client_guid}/users/{user_id}": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "activate_app_user", + "summary": "Activate OAuth App User", + "description": "### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "path", + "description": "The id of the user to enable use of this app", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OAuth Client App", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "204": { + "description": "Deleted" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Auth" + ], + "operationId": "deactivate_app_user", + "summary": "Deactivate OAuth App User", + "description": "### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "path", + "description": "The id of the user to enable use of this app", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/oidc_config": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "oidc_config", + "summary": "Get OIDC Configuration", + "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n", + "responses": { + "200": { + "description": "OIDC Configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OIDCConfig" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_oidc_config", + "summary": "Update OIDC Configuration", + "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n", + "responses": { + "200": { + "description": "New state for OIDC Configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OIDCConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OIDCConfig" + } + } + }, + "description": "OIDC Config", + "required": true + } + } + }, + "/oidc_test_configs/{test_slug}": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "oidc_test_config", + "summary": "Get OIDC Test Configuration", + "description": "### Get a OIDC test configuration by test_slug.\n", + "parameters": [ + { + "name": "test_slug", + "in": "path", + "description": "Slug of test config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OIDC test config.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OIDCConfig" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Auth" + ], + "operationId": "delete_oidc_test_config", + "summary": "Delete OIDC Test Configuration", + "description": "### Delete a OIDC test configuration.\n", + "parameters": [ + { + "name": "test_slug", + "in": "path", + "description": "Slug of test config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Test config succssfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/oidc_test_configs": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "create_oidc_test_config", + "summary": "Create OIDC Test Configuration", + "description": "### Create a OIDC test configuration.\n", + "responses": { + "200": { + "description": "OIDC test config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OIDCConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OIDCConfig" + } + } + }, + "description": "OIDC test config", + "required": true + } + } + }, + "/password_config": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "password_config", + "summary": "Get Password Config", + "description": "### Get password config.\n", + "responses": { + "200": { + "description": "Password Config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_password_config", + "summary": "Update Password Config", + "description": "### Update password config.\n", + "responses": { + "200": { + "description": "Password Config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordConfig" + } + } + }, + "description": "Password Config", + "required": true + } + } + }, + "/password_config/force_password_reset_at_next_login_for_all_users": { + "put": { + "tags": [ + "Auth" + ], + "operationId": "force_password_reset_at_next_login_for_all_users", + "summary": "Force password reset", + "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n", + "responses": { + "200": { + "description": "Password Config", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/permissions": { + "get": { + "tags": [ + "Role" + ], + "operationId": "all_permissions", + "summary": "Get All Permissions", + "description": "### Get all supported permissions.\n", + "responses": { + "200": { + "description": "Permission", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Permission" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/permission_sets/search": { + "get": { + "tags": [ + "Role" + ], + "operationId": "search_permission_sets", + "summary": "Search Permission Sets", + "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match permission set id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match permission set name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_access", + "in": "query", + "description": "Match permission sets by all_access status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "built_in", + "in": "query", + "description": "Match permission sets by built_in status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Permission Set", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionSet" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/permission_sets/{permission_set_id}": { + "get": { + "tags": [ + "Role" + ], + "operationId": "permission_set", + "summary": "Get Permission Set", + "description": "### Get information about the permission set with a specific id.\n", + "parameters": [ + { + "name": "permission_set_id", + "in": "path", + "description": "Id of permission set", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Permission Set", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionSet" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Role" + ], + "operationId": "delete_permission_set", + "summary": "Delete Permission Set", + "description": "### Delete the permission set with a specific id.\n", + "parameters": [ + { + "name": "permission_set_id", + "in": "path", + "description": "Id of permission set", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Role" + ], + "operationId": "update_permission_set", + "summary": "Update Permission Set", + "description": "### Update information about the permission set with a specific id.\n", + "parameters": [ + { + "name": "permission_set_id", + "in": "path", + "description": "id of permission set", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Permission Set", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionSet" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionSet" + } + } + }, + "description": "Permission Set", + "required": true + } + } + }, + "/permission_sets": { + "get": { + "tags": [ + "Role" + ], + "operationId": "all_permission_sets", + "summary": "Get All Permission Sets", + "description": "### Get information about all permission sets.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Permission Set", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionSet" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Role" + ], + "operationId": "create_permission_set", + "summary": "Create Permission Set", + "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\n", + "responses": { + "200": { + "description": "Permission Set", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionSet" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionSet" + } + } + }, + "description": "Permission Set", + "required": true + } + } + }, + "/projects/{project_id}/deploy_ref_to_production": { + "post": { + "tags": [ + "Project" + ], + "operationId": "deploy_ref_to_production", + "summary": "Deploy Remote Branch or Ref to Production", + "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch", + "in": "query", + "description": "Branch to deploy to production", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ref", + "in": "query", + "description": "Ref to deploy to production", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "204": { + "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/deploy_to_production": { + "post": { + "tags": [ + "Project" + ], + "operationId": "deploy_to_production", + "summary": "Deploy To Production", + "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "204": { + "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/reset_to_production": { + "post": { + "tags": [ + "Project" + ], + "operationId": "reset_project_to_production", + "summary": "Reset To Production", + "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "204": { + "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/reset_to_remote": { + "post": { + "tags": [ + "Project" + ], + "operationId": "reset_project_to_remote", + "summary": "Reset To Remote", + "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "204": { + "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects": { + "get": { + "tags": [ + "Project" + ], + "operationId": "all_projects", + "summary": "Get All Projects", + "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Project" + ], + "operationId": "create_project", + "summary": "Create Project", + "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + }, + "description": "Project", + "required": true + } + } + }, + "/projects/{project_id}": { + "get": { + "tags": [ + "Project" + ], + "operationId": "project", + "summary": "Get Project", + "description": "### Get A Project\n\nReturns the project with the given project id\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Project" + ], + "operationId": "update_project", + "summary": "Update Project", + "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + }, + "description": "Project", + "required": true + } + } + }, + "/projects/{project_id}/manifest": { + "get": { + "tags": [ + "Project" + ], + "operationId": "manifest", + "summary": "Get Manifest", + "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Manifest", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Manifest" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/git/deploy_key": { + "post": { + "tags": [ + "Project" + ], + "operationId": "create_git_deploy_key", + "summary": "Create Deploy Key", + "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "get": { + "tags": [ + "Project" + ], + "operationId": "git_deploy_key", + "summary": "Git Deploy Key", + "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The text of the public key portion of the deploy_key", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/validate": { + "post": { + "tags": [ + "Project" + ], + "operationId": "validate_project", + "summary": "Validate Project", + "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project validation results", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectValidation" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "get": { + "tags": [ + "Project" + ], + "operationId": "project_validation_results", + "summary": "Cached Project Validation Results", + "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project validation results", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectValidationCache" + } + } + } + }, + "204": { + "description": "Deleted" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/current_workspace": { + "get": { + "tags": [ + "Project" + ], + "operationId": "project_workspace", + "summary": "Get Project Workspace", + "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project Workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectWorkspace" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/files": { + "get": { + "tags": [ + "Project" + ], + "operationId": "all_project_files", + "summary": "Get All Project Files", + "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project File", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectFile" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/files/file": { + "get": { + "tags": [ + "Project" + ], + "operationId": "project_file", + "summary": "Get Project File", + "description": "### Get Project File Info\n\nReturns information about a file in the project\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "file_id", + "in": "query", + "description": "File Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project File", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectFile" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/git_connection_tests": { + "get": { + "tags": [ + "Project" + ], + "operationId": "all_git_connection_tests", + "summary": "Get All Git Connection Tests", + "description": "### Get All Git Connection Tests\n\ndev mode required.\n - Call `update_session` to select the 'dev' workspace.\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote_url", + "in": "query", + "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Git Connection Test", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GitConnectionTest" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/git_connection_tests/{test_id}": { + "get": { + "tags": [ + "Project" + ], + "operationId": "run_git_connection_test", + "summary": "Run Git Connection Test", + "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "test_id", + "in": "path", + "description": "Test Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "remote_url", + "in": "query", + "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "use_production", + "in": "query", + "description": "(Optional: leave blank for dev credentials) Whether to use git production credentials.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Git Connection Test Result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitConnectionTestResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/lookml_tests": { + "get": { + "tags": [ + "Project" + ], + "operationId": "all_lookml_tests", + "summary": "Get All LookML Tests", + "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "file_id", + "in": "query", + "description": "File Id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "LookML Test", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlTest" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/lookml_tests/run": { + "get": { + "tags": [ + "Project" + ], + "operationId": "run_lookml_test", + "summary": "Run LookML Test", + "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "file_id", + "in": "query", + "description": "File Name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "test", + "in": "query", + "description": "Test Name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "model", + "in": "query", + "description": "Model Name", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "LookML Test Results", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlTestResult" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{project_id}/tag": { + "post": { + "tags": [ + "Project" + ], + "operationId": "tag_ref", + "summary": "Tag Ref", + "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n\nThis is an internal-only, undocumented route.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "commit_sha", + "in": "query", + "description": "(Optional): Commit Sha to Tag", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tag_name", + "in": "query", + "description": "Tag Name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tag_message", + "in": "query", + "description": "(Optional): Tag Message", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Project", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "204": { + "description": "Returns 204 if tagging a ref was successful, otherwise 400 with an error message" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + }, + "description": "Project", + "required": true + } + } + }, + "/render_tasks/looks/{look_id}/{result_format}": { + "post": { + "tags": [ + "RenderTask" + ], + "operationId": "create_look_render_task", + "summary": "Create Look Render Task", + "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look to render", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: png, or jpg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Render Task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenderTask" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/render_tasks/queries/{query_id}/{result_format}": { + "post": { + "tags": [ + "RenderTask" + ], + "operationId": "create_query_render_task", + "summary": "Create Query Render Task", + "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "query_id", + "in": "path", + "description": "Id of the query to render", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: png or jpg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Render Task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenderTask" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/render_tasks/dashboards/{dashboard_id}/{result_format}": { + "post": { + "tags": [ + "RenderTask" + ], + "operationId": "create_dashboard_render_task", + "summary": "Create Dashboard Render Task", + "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard to render. The ID can be a LookML dashboard also.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: pdf, png, or jpg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pdf_paper_size", + "in": "query", + "description": "Paper size for pdf. Value can be one of: [\"letter\",\"legal\",\"tabloid\",\"a0\",\"a1\",\"a2\",\"a3\",\"a4\",\"a5\"]", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pdf_landscape", + "in": "query", + "description": "Whether to render pdf in landscape paper orientation", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "long_tables", + "in": "query", + "description": "Whether or not to expand table vis to full length", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Render Task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenderTask" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDashboardRenderTask" + } + } + }, + "description": "Dashboard render task parameters", + "required": true + } + } + }, + "/render_tasks/{render_task_id}": { + "get": { + "tags": [ + "RenderTask" + ], + "operationId": "render_task", + "summary": "Get Render Task", + "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "render_task_id", + "in": "path", + "description": "Id of render task", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Render Task", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenderTask" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/render_tasks/{render_task_id}/results": { + "get": { + "tags": [ + "RenderTask" + ], + "operationId": "render_task_results", + "summary": "Render Task Results", + "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", + "parameters": [ + { + "name": "render_task_id", + "in": "path", + "description": "Id of render task", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Document or image", + "content": { + "image/jpeg": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "application/pdf": { + "schema": { + "type": "string" + } + } + } + }, + "202": { + "description": "Accepted" + }, + "400": { + "description": "Bad Request", + "content": { + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/pdf": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/pdf": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/projects/{root_project_id}/credential/{credential_id}": { + "put": { + "tags": [ + "Project" + ], + "operationId": "update_repository_credential", + "summary": "Create Repository Credential", + "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", + "parameters": [ + { + "name": "root_project_id", + "in": "path", + "description": "Root Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "credential_id", + "in": "path", + "description": "Credential Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RepositoryCredential" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RepositoryCredential" + } + } + }, + "description": "Remote Project Information", + "required": true + } + }, + "delete": { + "tags": [ + "Project" + ], + "operationId": "delete_repository_credential", + "summary": "Delete Repository Credential", + "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", + "parameters": [ + { + "name": "root_project_id", + "in": "path", + "description": "Root Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "credential_id", + "in": "path", + "description": "Credential Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/projects/{root_project_id}/credentials": { + "get": { + "tags": [ + "Project" + ], + "operationId": "get_all_repository_credentials", + "summary": "Get All Repository Credentials", + "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", + "parameters": [ + { + "name": "root_project_id", + "in": "path", + "description": "Root Project Id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository Credential", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RepositoryCredential" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/roles": { + "get": { + "tags": [ + "Role" + ], + "operationId": "all_roles", + "summary": "Get All Roles", + "description": "### Get information about all roles.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ids", + "in": "query", + "description": "Optional list of ids to get specific roles.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + ], + "responses": { + "200": { + "description": "Role", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Role" + ], + "operationId": "create_role", + "summary": "Create Role", + "description": "### Create a role with the specified information.\n", + "responses": { + "200": { + "description": "Role", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + }, + "description": "Role", + "required": true + } + } + }, + "/roles/search": { + "get": { + "tags": [ + "Role" + ], + "operationId": "search_roles", + "summary": "Search Roles", + "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match role id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match role name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "built_in", + "in": "query", + "description": "Match roles by built_in status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Role", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/roles/search/with_user_count": { + "get": { + "tags": [ + "Role" + ], + "operationId": "search_roles_with_user_count", + "summary": "Search Roles with User Count", + "description": "### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match role id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match role name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "built_in", + "in": "query", + "description": "Match roles by built_in status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Role", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSearch" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/roles/{role_id}": { + "get": { + "tags": [ + "Role" + ], + "operationId": "role", + "summary": "Get Role", + "description": "### Get information about the role with a specific id.\n", + "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Role", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Role" + ], + "operationId": "delete_role", + "summary": "Delete Role", + "description": "### Delete the role with a specific id.\n", + "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Role" + ], + "operationId": "update_role", + "summary": "Update Role", + "description": "### Update information about the role with a specific id.\n", + "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Role", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + }, + "description": "Role", + "required": true + } + } + }, + "/roles/{role_id}/groups": { + "get": { + "tags": [ + "Role" + ], + "operationId": "role_groups", + "summary": "Get Role Groups", + "description": "### Get information about all the groups with the role that has a specific id.\n", + "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Groups with role.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "put": { + "tags": [ + "Role" + ], + "operationId": "set_role_groups", + "summary": "Update Role Groups", + "description": "### Set all groups for a role, removing all existing group associations from that role.\n", + "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "Id of Role", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Groups with role.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "description": "Array of Group Ids", + "required": true + } + } + }, + "/roles/{role_id}/users": { + "get": { + "tags": [ + "Role" + ], + "operationId": "role_users", + "summary": "Get Role Users", + "description": "### Get information about all the users with the role that has a specific id.\n", + "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "direct_association_only", + "in": "query", + "description": "Get only users associated directly with the role: exclude those only associated through groups.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Users with role.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "put": { + "tags": [ + "Role" + ], + "operationId": "set_role_users", + "summary": "Update Role Users", + "description": "### Set all the users of the role with a specific id.\n", + "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Users with role.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "description": "array of user ids for role", + "required": true + } + } + }, + "/running_queries": { + "get": { + "tags": [ + "Query" + ], + "operationId": "all_running_queries", + "summary": "Get All Running Queries", + "description": "Get information about all running queries.\n", + "responses": { + "200": { + "description": "Running Queries.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RunningQueries" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/running_queries/{query_task_id}": { + "delete": { + "tags": [ + "Query" + ], + "operationId": "kill_query", + "summary": "Kill Running Query", + "description": "Kill a query with a specific query_task_id.\n", + "parameters": [ + { + "name": "query_task_id", + "in": "path", + "description": "Query task id.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Query successfully killed.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/saml_config": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "saml_config", + "summary": "Get SAML Configuration", + "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n", + "responses": { + "200": { + "description": "SAML Configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlConfig" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_saml_config", + "summary": "Update SAML Configuration", + "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n", + "responses": { + "200": { + "description": "New state for SAML Configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlConfig" + } + } + }, + "description": "SAML Config", + "required": true + } + } + }, + "/saml_test_configs/{test_slug}": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "saml_test_config", + "summary": "Get SAML Test Configuration", + "description": "### Get a SAML test configuration by test_slug.\n", + "parameters": [ + { + "name": "test_slug", + "in": "path", + "description": "Slug of test config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SAML test config.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlConfig" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Auth" + ], + "operationId": "delete_saml_test_config", + "summary": "Delete SAML Test Configuration", + "description": "### Delete a SAML test configuration.\n", + "parameters": [ + { + "name": "test_slug", + "in": "path", + "description": "Slug of test config", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Test config succssfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/saml_test_configs": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "create_saml_test_config", + "summary": "Create SAML Test Configuration", + "description": "### Create a SAML test configuration.\n", + "responses": { + "200": { + "description": "SAML test config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlConfig" + } + } + }, + "description": "SAML test config", + "required": true + } + } + }, + "/parse_saml_idp_metadata": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "parse_saml_idp_metadata", + "summary": "Parse SAML IdP XML", + "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n", + "responses": { + "200": { + "description": "Parse result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlMetadataParseResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "description": "SAML IdP metadata xml", + "required": true + } + } + }, + "/fetch_and_parse_saml_idp_metadata": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "fetch_and_parse_saml_idp_metadata", + "summary": "Parse SAML IdP Url", + "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n", + "responses": { + "200": { + "description": "Parse result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SamlMetadataParseResult" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "description": "SAML IdP metadata public url", + "required": true + } + } + }, + "/scheduled_plans/space/{space_id}": { + "get": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "scheduled_plans_for_space", + "summary": "Scheduled Plans for Space", + "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", + "parameters": [ + { + "name": "space_id", + "in": "path", + "description": "Space Id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/scheduled_plans/{scheduled_plan_id}": { + "delete": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "delete_scheduled_plan", + "summary": "Delete Scheduled Plan", + "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", + "parameters": [ + { + "name": "scheduled_plan_id", + "in": "path", + "description": "Scheduled Plan Id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + }, + "patch": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "update_scheduled_plan", + "summary": "Update Scheduled Plan", + "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "parameters": [ + { + "name": "scheduled_plan_id", + "in": "path", + "description": "Scheduled Plan Id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + }, + "description": "Scheduled Plan", + "required": true + } + }, + "get": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "scheduled_plan", + "summary": "Get Scheduled Plan", + "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", + "parameters": [ + { + "name": "scheduled_plan_id", + "in": "path", + "description": "Scheduled Plan Id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/scheduled_plans": { + "post": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "create_scheduled_plan", + "summary": "Create Scheduled Plan", + "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://looker.com/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + }, + "description": "Scheduled Plan", + "required": true + } + }, + "get": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "all_scheduled_plans", + "summary": "Get All Scheduled Plans", + "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/scheduled_plans/run_once": { + "post": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "scheduled_plan_run_once", + "summary": "Run Scheduled Plan Once", + "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + }, + "description": "Scheduled Plan", + "required": true + } + } + }, + "/scheduled_plans/look/{look_id}": { + "get": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "scheduled_plans_for_look", + "summary": "Scheduled Plans for Look", + "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Look Id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the look", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/scheduled_plans/dashboard/{dashboard_id}": { + "get": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "scheduled_plans_for_dashboard", + "summary": "Scheduled Plans for Dashboard", + "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Dashboard Id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the dashboard", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { + "get": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "scheduled_plans_for_lookml_dashboard", + "summary": "Scheduled Plans for LookML Dashboard", + "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "parameters": [ + { + "name": "lookml_dashboard_id", + "in": "path", + "description": "LookML Dashboard Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the dashboard", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/scheduled_plans/{scheduled_plan_id}/run_once": { + "post": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "scheduled_plan_run_once_by_id", + "summary": "Run Scheduled Plan Once by Id", + "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", + "parameters": [ + { + "name": "scheduled_plan_id", + "in": "path", + "description": "Id of schedule plan to copy and run", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WriteScheduledPlan" + } + } + }, + "description": "Property values to apply to the newly copied scheduled plan before running it", + "required": false + } + } + }, + "/session_config": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "session_config", + "summary": "Get Session Config", + "description": "### Get session config.\n", + "responses": { + "200": { + "description": "Session Config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_session_config", + "summary": "Update Session Config", + "description": "### Update session config.\n", + "responses": { + "200": { + "description": "Session Config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionConfig" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionConfig" + } + } + }, + "description": "Session Config", + "required": true + } + } + }, + "/session": { + "get": { + "tags": [ + "Session" + ], + "operationId": "session", + "summary": "Get Session", + "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", + "responses": { + "200": { + "description": "Session", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiSession" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Session" + ], + "operationId": "update_session", + "summary": "Update Session", + "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", + "responses": { + "200": { + "description": "Session", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiSession" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiSession" + } + } + }, + "description": "Session", + "required": true + } + } + }, + "/setting": { + "patch": { + "tags": [ + "Config" + ], + "operationId": "set_setting", + "summary": "Set Setting", + "description": "### Configure Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n - custom_welcome_email\n\nSee the `Setting` type for more information on the specific values that can be configured.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Looker Settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Setting" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Setting" + } + } + }, + "description": "Looker Setting Configuration", + "required": true + } + }, + "get": { + "tags": [ + "Config" + ], + "operationId": "get_setting", + "summary": "Get Setting", + "description": "### Get Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - whitelabel_configuration\n - custom_welcome_email\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Looker Settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Setting" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/folders/search": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "search_folders", + "summary": "Search Folders", + "description": "Search for folders by creator id, parent id, name, etc", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "Requested page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Results per page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Match Space title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match Space id", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "parent_id", + "in": "query", + "description": "Filter on a children of a particular folder.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "creator_id", + "in": "query", + "description": "Filter on folder created by a particular user.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "is_shared_root", + "in": "query", + "description": "Match is shared root", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "folders", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/folders/{folder_id}": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "folder", + "summary": "Get Folder", + "description": "### Get information about the folder with a specific id.", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Folder", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Folder" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Folder" + ], + "operationId": "delete_folder", + "summary": "Delete Folder", + "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Folder" + ], + "operationId": "update_folder", + "summary": "Update Folder", + "description": "### Update the folder with a specific id.", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Folder", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Folder" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateFolder" + } + } + }, + "description": "Folder parameters", + "required": true + } + } + }, + "/folders": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "all_folders", + "summary": "Get All Folders", + "description": "### Get information about all folders.\n\nIn API 3.x, this will not return empty personal folders, unless they belong to the calling user.\nIn API 4.0+, all personal folders will be returned.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Folder", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Folder" + ], + "operationId": "create_folder", + "summary": "Create Folder", + "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", + "responses": { + "200": { + "description": "Folder", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Folder" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateFolder" + } + } + }, + "description": "Folder parameters", + "required": true + } + } + }, + "/folders/{folder_id}/children": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "folder_children", + "summary": "Get Folder Children", + "description": "### Get the children of a folder.", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "Requested page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Results per page.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Folders", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/folders/{folder_id}/children/search": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "folder_children_search", + "summary": "Search Folder Children", + "description": "### Search the children of a folder", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Match folder name.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Folders", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/folders/{folder_id}/parent": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "folder_parent", + "summary": "Get Folder Parent", + "description": "### Get the parent of a folder", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Folder", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Folder" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/folders/{folder_id}/ancestors": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "folder_ancestors", + "summary": "Get Folder Ancestors", + "description": "### Get the ancestors of a folder", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Folders", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/folders/{folder_id}/looks": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "folder_looks", + "summary": "Get Folder Looks", + "description": "### Get all looks in a folder.\nIn API 3.x, this will return all looks in a folder, including looks in the trash.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Looks", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/folders/{folder_id}/dashboards": { + "get": { + "tags": [ + "Folder" + ], + "operationId": "folder_dashboards", + "summary": "Get Folder Dashboards", + "description": "### Get the dashboards in a folder", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/sql_queries/{slug}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "sql_query", + "summary": "Get SQL Runner Query", + "description": "Get a SQL Runner query.", + "parameters": [ + { + "name": "slug", + "in": "path", + "description": "slug of query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SQL Runner Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqlQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/sql_queries": { + "post": { + "tags": [ + "Query" + ], + "operationId": "create_sql_query", + "summary": "Create SQL Runner Query", + "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", + "responses": { + "200": { + "description": "SQL Runner Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqlQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqlQueryCreate" + } + } + }, + "description": "SQL Runner Query", + "required": true + } + } + }, + "/sql_queries/{slug}/run/{result_format}": { + "post": { + "tags": [ + "Query" + ], + "operationId": "run_sql_query", + "summary": "Run SQL Runner Query", + "description": "Execute a SQL Runner query in a given result_format.", + "parameters": [ + { + "name": "slug", + "in": "path", + "description": "slug of query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"json_label\"]", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "download", + "in": "query", + "description": "Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SQL Runner Query", + "content": { + "text": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "image/jpeg": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/themes": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "all_themes", + "summary": "Get All Themes", + "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Themes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Theme" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Theme" + ], + "operationId": "create_theme", + "summary": "Create Theme", + "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://looker.com/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "responses": { + "200": { + "description": "Theme", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + }, + "description": "Theme", + "required": true + } + } + }, + "/themes/search": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "search_themes", + "summary": "Search Themes", + "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Match theme id.", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Match theme name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "begin_at", + "in": "query", + "description": "Timestamp for activation.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_at", + "in": "query", + "description": "Timestamp for expiration.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Themes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Theme" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/themes/default": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "default_theme", + "summary": "Get Default Theme", + "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", + "parameters": [ + { + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Theme", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "put": { + "tags": [ + "Theme" + ], + "operationId": "set_default_theme", + "summary": "Set Default Theme", + "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of theme to set as default", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Theme", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/themes/active": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "active_themes", + "summary": "Get Active Themes", + "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n\n", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of theme", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Themes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Theme" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/themes/theme_or_default": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "theme_or_default", + "summary": "Get Theme or Default", + "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of theme", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Theme", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/themes/validate": { + "post": { + "tags": [ + "Theme" + ], + "operationId": "validate_theme", + "summary": "Validate Theme", + "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "responses": { + "200": { + "description": "Theme validation results", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "204": { + "description": "No errors detected with the theme", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + }, + "description": "Theme", + "required": true + } + } + }, + "/themes/{theme_id}": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "theme", + "summary": "Get Theme", + "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "parameters": [ + { + "name": "theme_id", + "in": "path", + "description": "Id of theme", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Theme", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Theme" + ], + "operationId": "update_theme", + "summary": "Update Theme", + "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "parameters": [ + { + "name": "theme_id", + "in": "path", + "description": "Id of theme", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Theme", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Theme" + } + } + }, + "description": "Theme", + "required": true + } + }, + "delete": { + "tags": [ + "Theme" + ], + "operationId": "delete_theme", + "summary": "Delete Theme", + "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "parameters": [ + { + "name": "theme_id", + "in": "path", + "description": "Id of theme", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/timezones": { + "get": { + "tags": [ + "Config" + ], + "operationId": "all_timezones", + "summary": "Get All Timezones", + "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", + "responses": { + "200": { + "description": "Timezone", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/ssh_servers": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_ssh_servers", + "summary": "Get All SSH Servers", + "description": "### Get information about all SSH Servers.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SSH Server", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SshServer" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Connection" + ], + "operationId": "create_ssh_server", + "summary": "Create SSH Server", + "description": "### Create an SSH Server.\n", + "responses": { + "200": { + "description": "SSH Server", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshServer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshServer" + } + } + }, + "description": "SSH Server", + "required": true + } + } + }, + "/ssh_server/{ssh_server_id}": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "ssh_server", + "summary": "Get SSH Server", + "description": "### Get information about an SSH Server.\n", + "parameters": [ + { + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SSH Server", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshServer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Connection" + ], + "operationId": "update_ssh_server", + "summary": "Update SSH Server", + "description": "### Update an SSH Server.\n", + "parameters": [ + { + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SSH Server", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshServer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshServer" + } + } + }, + "description": "SSH Server", + "required": true + } + }, + "delete": { + "tags": [ + "Connection" + ], + "operationId": "delete_ssh_server", + "summary": "Delete SSH Server", + "description": "### Delete an SSH Server.\n", + "parameters": [ + { + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/ssh_server/{ssh_server_id}/test": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "test_ssh_server", + "summary": "Test SSH Server", + "description": "### Test the SSH Server\n", + "parameters": [ + { + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Test SSH Server", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshServer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/ssh_tunnels": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_ssh_tunnels", + "summary": "Get All SSH Tunnels", + "description": "### Get information about all SSH Tunnels.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SSH Tunnel", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SshTunnel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "Connection" + ], + "operationId": "create_ssh_tunnel", + "summary": "Create SSH Tunnel", + "description": "### Create an SSH Tunnel\n", + "responses": { + "200": { + "description": "SSH Tunnel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } + }, + "description": "SSH Tunnel", + "required": true + } + } + }, + "/ssh_tunnel/{ssh_tunnel_id}": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "ssh_tunnel", + "summary": "Get SSH Tunnel", + "description": "### Get information about an SSH Tunnel.\n", + "parameters": [ + { + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SSH Tunnel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "Connection" + ], + "operationId": "update_ssh_tunnel", + "summary": "Update SSH Tunnel", + "description": "### Update an SSH Tunnel\n", + "parameters": [ + { + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SSH Tunnel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } + }, + "description": "SSH Tunnel", + "required": true + } + }, + "delete": { + "tags": [ + "Connection" + ], + "operationId": "delete_ssh_tunnel", + "summary": "Delete SSH Tunnel", + "description": "### Delete an SSH Tunnel\n", + "parameters": [ + { + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/ssh_tunnel/{ssh_tunnel_id}/test": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "test_ssh_tunnel", + "summary": "Test SSH Tunnel", + "description": "### Test the SSH Tunnel\n", + "parameters": [ + { + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Test SSH Tunnel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/ssh_public_key": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "ssh_public_key", + "summary": "Get SSH Public Key", + "description": "### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n", + "responses": { + "200": { + "description": "SSH Public Key", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshPublicKey" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/user_attributes": { + "get": { + "tags": [ + "UserAttribute" + ], + "operationId": "all_user_attributes", + "summary": "Get All User Attributes", + "description": "### Get information about all user attributes.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to order the results by. Sortable fields include: name, label", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "User Attribute", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttribute" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "UserAttribute" + ], + "operationId": "create_user_attribute", + "summary": "Create User Attribute", + "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "User Attribute", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttribute" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttribute" + } + } + }, + "description": "User Attribute", + "required": true + } + } + }, + "/user_attributes/{user_attribute_id}": { + "get": { + "tags": [ + "UserAttribute" + ], + "operationId": "user_attribute", + "summary": "Get User Attribute", + "description": "### Get information about a user attribute.\n", + "parameters": [ + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "User Attribute", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttribute" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "UserAttribute" + ], + "operationId": "update_user_attribute", + "summary": "Update User Attribute", + "description": "### Update a user attribute definition.\n", + "parameters": [ + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "User Attribute", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttribute" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttribute" + } + } + }, + "description": "User Attribute", + "required": true + } + }, + "delete": { + "tags": [ + "UserAttribute" + ], + "operationId": "delete_user_attribute", + "summary": "Delete User Attribute", + "description": "### Delete a user attribute (admin only).\n", + "parameters": [ + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user_attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/user_attributes/{user_attribute_id}/group_values": { + "get": { + "tags": [ + "UserAttribute" + ], + "operationId": "all_user_attribute_group_values", + "summary": "Get User Attribute Group Values", + "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", + "parameters": [ + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "All group values for attribute.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "UserAttribute" + ], + "operationId": "set_user_attribute_group_values", + "summary": "Set User Attribute Group Values", + "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", + "parameters": [ + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Array of group values.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } + } + } + }, + "description": "Array of group values.", + "required": true + } + } + }, + "/user_login_lockouts": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "all_user_login_lockouts", + "summary": "Get All User Login Lockouts", + "description": "### Get currently locked-out users.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "User Login Lockout", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserLoginLockout" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/user_login_lockouts/search": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "search_user_login_lockouts", + "summary": "Search User Login Lockouts", + "description": "### Search currently locked-out users.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "Return only page N of paginated results", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Return N rows of data per page", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "auth_type", + "in": "query", + "description": "Auth type user is locked out for (email, ldap, totp, api)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "full_name", + "in": "query", + "description": "Match name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "email", + "in": "query", + "description": "Match email", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "remote_id", + "in": "query", + "description": "Match remote LDAP ID", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "User Login Lockout", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserLoginLockout" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/user_login_lockout/{key}": { + "delete": { + "tags": [ + "Auth" + ], + "operationId": "delete_user_login_lockout", + "summary": "Delete User Login Lockout", + "description": "### Removes login lockout for the associated user.\n", + "parameters": [ + { + "name": "key", + "in": "path", + "description": "The key associated with the locked user", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/user": { + "get": { + "tags": [ + "User" + ], + "operationId": "me", + "summary": "Get Current User", + "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Current user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users": { + "get": { + "tags": [ + "User" + ], + "operationId": "all_users", + "summary": "Get All Users", + "description": "### Get information about all users.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ids", + "in": "query", + "description": "Optional list of ids to get specific users.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + ], + "responses": { + "200": { + "description": "All users.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "User" + ], + "operationId": "create_user", + "summary": "Create User", + "description": "### Create a user with the specified information.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Created User", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "description": "User", + "required": false + } + } + }, + "/users/search": { + "get": { + "tags": [ + "User" + ], + "operationId": "search_users", + "summary": "Search Users", + "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match User Id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "first_name", + "in": "query", + "description": "Match First name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "last_name", + "in": "query", + "description": "Match Last name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "verified_looker_employee", + "in": "query", + "description": "Search for user accounts associated with Looker employees", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "embed_user", + "in": "query", + "description": "Search for only embed users", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "email", + "in": "query", + "description": "Search for the user with this email address", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "is_disabled", + "in": "query", + "description": "Search for disabled user accounts", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Search for users who have access to this content_metadata item", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "group_id", + "in": "query", + "description": "Search for users who are direct members of this group", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Matching users.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/users/search/names/{pattern}": { + "get": { + "tags": [ + "User" + ], + "operationId": "search_users_names", + "summary": "Search User Names", + "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", + "parameters": [ + { + "name": "pattern", + "in": "path", + "description": "Pattern to match", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "Match User Id", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "first_name", + "in": "query", + "description": "Match First name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "last_name", + "in": "query", + "description": "Match Last name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "verified_looker_employee", + "in": "query", + "description": "Match Verified Looker employee", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "email", + "in": "query", + "description": "Match Email Address", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "is_disabled", + "in": "query", + "description": "Include or exclude disabled accounts in the results", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Matching users.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}": { + "get": { + "tags": [ + "User" + ], + "operationId": "user", + "summary": "Get User by Id", + "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Specified user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "patch": { + "tags": [ + "User" + ], + "operationId": "update_user", + "summary": "Update User", + "description": "### Update information about the user with a specific id.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "New state for specified user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "description": "User", + "required": true + } + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user", + "summary": "Delete User", + "description": "### Delete the user with a specific id.\n\n**DANGER** this will delete the user and all looks and other information owned by the user.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "User successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/credential/{credential_type}/{credential_id}": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_for_credential", + "summary": "Get User by Credential Id", + "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\n", + "parameters": [ + { + "name": "credential_type", + "in": "path", + "description": "Type name of credential", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "credential_id", + "in": "path", + "description": "Id of credential", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Specified user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_email": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_email", + "summary": "Get Email/Password Credential", + "description": "### Email/password login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Email/Password Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmail" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "User" + ], + "operationId": "create_user_credentials_email", + "summary": "Create Email/Password Credential", + "description": "### Email/password login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Email/Password Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmail" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmail" + } + } + }, + "description": "Email/Password Credential", + "required": true + } + }, + "patch": { + "tags": [ + "User" + ], + "operationId": "update_user_credentials_email", + "summary": "Update Email/Password Credential", + "description": "### Email/password login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Email/Password Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmail" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmail" + } + } + }, + "description": "Email/Password Credential", + "required": true + } + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_email", + "summary": "Delete Email/Password Credential", + "description": "### Email/password login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_totp": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_totp", + "summary": "Get Two-Factor Credential", + "description": "### Two-factor login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Two-Factor Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsTotp" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "User" + ], + "operationId": "create_user_credentials_totp", + "summary": "Create Two-Factor Credential", + "description": "### Two-factor login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Two-Factor Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsTotp" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsTotp" + } + } + }, + "description": "Two-Factor Credential", + "required": false + } + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_totp", + "summary": "Delete Two-Factor Credential", + "description": "### Two-factor login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_ldap": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_ldap", + "summary": "Get LDAP Credential", + "description": "### LDAP login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "LDAP Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsLDAP" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_ldap", + "summary": "Delete LDAP Credential", + "description": "### LDAP login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_google": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_google", + "summary": "Get Google Auth Credential", + "description": "### Google authentication login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Google Auth Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsGoogle" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_google", + "summary": "Delete Google Auth Credential", + "description": "### Google authentication login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_saml": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_saml", + "summary": "Get Saml Auth Credential", + "description": "### Saml authentication login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Saml Auth Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsSaml" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_saml", + "summary": "Delete Saml Auth Credential", + "description": "### Saml authentication login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_oidc": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_oidc", + "summary": "Get OIDC Auth Credential", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OIDC Auth Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsOIDC" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_oidc", + "summary": "Delete OIDC Auth Credential", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_api3/{credentials_api3_id}": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_api3", + "summary": "Get API 3 Credential", + "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "Id of API 3 Credential", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "API 3 Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsApi3" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_api3", + "summary": "Delete API 3 Credential", + "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "id of API 3 Credential", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_api3": { + "get": { + "tags": [ + "User" + ], + "operationId": "all_user_credentials_api3s", + "summary": "Get All API 3 Credentials", + "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "API 3 Credential", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialsApi3" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "post": { + "tags": [ + "User" + ], + "operationId": "create_user_credentials_api3", + "summary": "Create API 3 Credential", + "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "API 3 Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsApi3" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsApi3" + } + } + }, + "description": "API 3 Credential", + "required": false + } + } + }, + "/users/{user_id}/credentials_embed/{credentials_embed_id}": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_embed", + "summary": "Get Embedding Credential", + "description": "### Embed login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "credentials_embed_id", + "in": "path", + "description": "Id of Embedding Credential", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Embedding Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmbed" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_embed", + "summary": "Delete Embedding Credential", + "description": "### Embed login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "credentials_embed_id", + "in": "path", + "description": "id of Embedding Credential", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_embed": { + "get": { + "tags": [ + "User" + ], + "operationId": "all_user_credentials_embeds", + "summary": "Get All Embedding Credentials", + "description": "### Embed login information for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Embedding Credential", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialsEmbed" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_looker_openid": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_looker_openid", + "summary": "Get Looker OpenId Credential", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Looker OpenId Credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsLookerOpenid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_looker_openid", + "summary": "Delete Looker OpenId Credential", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/sessions/{session_id}": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_session", + "summary": "Get Web Login Session", + "description": "### Web login session for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "session_id", + "in": "path", + "description": "Id of Web Login Session", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Web Login Session", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Session" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_session", + "summary": "Delete Web Login Session", + "description": "### Web login session for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "session_id", + "in": "path", + "description": "id of Web Login Session", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/sessions": { + "get": { + "tags": [ + "User" + ], + "operationId": "all_user_sessions", + "summary": "Get All Web Login Sessions", + "description": "### Web login session for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Web Login Session", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Session" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_email/password_reset": { + "post": { + "tags": [ + "User" + ], + "operationId": "create_user_credentials_email_password_reset", + "summary": "Create Password Reset Token", + "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "expires", + "in": "query", + "description": "Expiring token.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "email/password credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmail" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/roles": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_roles", + "summary": "Get User Roles", + "description": "### Get information about roles of a given user\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "direct_association_only", + "in": "query", + "description": "Get only roles associated directly with the user: exclude those only associated through groups.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Roles of user.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "put": { + "tags": [ + "User" + ], + "operationId": "set_user_roles", + "summary": "Set User Roles", + "description": "### Set roles of the user with a specific id.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Roles of user.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "description": "array of roles ids for user", + "required": true + } + } + }, + "/users/{user_id}/attribute_values": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_attribute_user_values", + "summary": "Get User Attribute Values", + "description": "### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_attribute_ids", + "in": "query", + "description": "Specific user attributes to request. Omit or leave blank to request all user attributes.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + }, + { + "name": "all_values", + "in": "query", + "description": "If true, returns all values in the search path instead of just the first value found. Useful for debugging group precedence.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "include_unset", + "in": "query", + "description": "If true, returns an empty record for each requested attribute that has no user, group, or default value.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Value of user attribute.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeWithValue" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/attribute_values/{user_attribute_id}": { + "patch": { + "tags": [ + "User" + ], + "operationId": "set_user_attribute_user_value", + "summary": "Set User Attribute User Value", + "description": "### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "User attribute value.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttributeWithValue" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttributeWithValue" + } + } + }, + "description": "New attribute value for user.", + "required": true + } + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_attribute_user_value", + "summary": "Delete User Attribute User Value", + "description": "### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Deleted" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/credentials_email/send_password_reset": { + "post": { + "tags": [ + "User" + ], + "operationId": "send_user_credentials_email_password_reset", + "summary": "Send Password Reset Token", + "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "email/password credential", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsEmail" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/users/{user_id}/update_emails": { + "post": { + "tags": [ + "User" + ], + "operationId": "wipeout_user_emails", + "summary": "Wipeout User Emails", + "description": "### Change a disabled user's email addresses\n\nAllows the admin to change the email addresses for all the user's\nassociated credentials. Will overwrite all associated email addresses with\nthe value supplied in the 'email' body param.\nThe user's 'is_disabled' status must be true.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "New state for specified user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserEmailOnly" + } + } + }, + "description": null, + "required": true + } + } + }, + "/users/embed_user": { + "post": { + "tags": [ + "User" + ], + "operationId": "create_embed_user", + "summary": "Create an embed user from an external user ID", + "description": "Create an embed user from an external user ID\n", + "responses": { + "200": { + "description": "Created embed user", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserPublic" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateEmbedUserRequest" + } + } + }, + "description": null, + "required": true + } + } + }, + "/vector_thumbnail/{type}/{resource_id}": { + "get": { + "tags": [ + "Content" + ], + "operationId": "vector_thumbnail", + "summary": "Get Vector Thumbnail", + "description": "### Get a vector image representing the contents of a dashboard or look.\n\n# DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail)\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Either dashboard or look", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "resource_id", + "in": "path", + "description": "ID of the dashboard or look to render", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "reload", + "in": "query", + "description": "Whether or not to refresh the rendered image with the latest content", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Vector thumbnail", + "content": { + "image/svg+xml": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "deprecated": true, + "x-looker-status": "deprecated", + "x-looker-activity-type": "db_query" + } + }, + "/versions": { + "get": { + "tags": [ + "Config" + ], + "operationId": "versions", + "summary": "Get ApiVersion", + "description": "### Get information about all API versions supported by this Looker instance.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ApiVersion", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiVersion" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none" + } + }, + "/api_spec/{api_version}/{specification}": { + "get": { + "tags": [ + "Config" + ], + "operationId": "api_spec", + "summary": "Get an API specification", + "description": "### Get an API specification for this Looker instance.\n\nThe specification is returned as a JSON document in Swagger 2.x format\n", + "parameters": [ + { + "name": "api_version", + "in": "path", + "description": "API version", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "specification", + "in": "path", + "description": "Specification name. Typically, this is \"swagger.json\"", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "API specification", + "content": { + "application/json": { + "schema": { + "type": "any", + "format": "any" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "none" + } + }, + "/whitelabel_configuration": { + "get": { + "tags": [ + "Config" + ], + "operationId": "whitelabel_configuration", + "summary": "Get Whitelabel configuration", + "description": "### This feature is enabled only by special license.\n### Gets the whitelabel configuration, which includes hiding documentation links, custom favicon uploading, etc.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Whitelabel configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WhitelabelConfiguration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "deprecated": true, + "x-looker-status": "deprecated", + "x-looker-activity-type": "non_query" + }, + "put": { + "tags": [ + "Config" + ], + "operationId": "update_whitelabel_configuration", + "summary": "Update Whitelabel configuration", + "description": "### Update the whitelabel configuration\n", + "responses": { + "200": { + "description": "Whitelabel configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WhitelabelConfiguration" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "deprecated": true, + "x-looker-status": "deprecated", + "x-looker-activity-type": "non_query", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WhitelabelConfiguration" + } + } + }, + "description": "Whitelabel configuration", + "required": true + } + } + }, + "/workspaces": { + "get": { + "tags": [ + "Workspace" + ], + "operationId": "all_workspaces", + "summary": "Get All Workspaces", + "description": "### Get All Workspaces\n\nReturns all workspaces available to the calling user.\n", + "responses": { + "200": { + "description": "Workspace", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Workspace" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/workspaces/{workspace_id}": { + "get": { + "tags": [ + "Workspace" + ], + "operationId": "workspace", + "summary": "Get Workspace", + "description": "### Get A Workspace\n\nReturns information about a workspace such as the git status and selected branches\nof all projects available to the caller's user account.\n\nA workspace defines which versions of project files will be used to evaluate expressions\nand operations that use model definitions - operations such as running queries or rendering dashboards.\nEach project has its own git repository, and each project in a workspace may be configured to reference\nparticular branch or revision within their respective repositories.\n\nThere are two predefined workspaces available: \"production\" and \"dev\".\n\nThe production workspace is shared across all Looker users. Models in the production workspace are read-only.\nChanging files in production is accomplished by modifying files in a git branch and using Pull Requests\nto merge the changes from the dev branch into the production branch, and then telling\nLooker to sync with production.\n\nThe dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect\nthat user, and only when the dev workspace is selected as the active workspace for the API session.\n(See set_session_workspace()).\n\nThe dev workspace is NOT unique to an API session. Two applications accessing the Looker API using\nthe same user account will see the same files in the dev workspace. To avoid collisions between\nAPI clients it's best to have each client login with API3 credentials for a different user account.\n\nChanges made to files in a dev workspace are persistent across API sessions. It's a good\nidea to commit any changes you've made to the git repository, but not strictly required. Your modified files\nreside in a special user-specific directory on the Looker server and will still be there when you login in again\nlater and use update_session(workspace_id: \"dev\") to select the dev workspace for the new API session.\n", + "parameters": [ + { + "name": "workspace_id", + "in": "path", + "description": "Id of the workspace ", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workspace" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + } + }, + "servers": [ + { + "url": "https://localhost:20000/api/4.0" + } + ], + "components": { + "requestBodies": {}, + "schemas": { + "Error": { + "properties": { + "message": { + "type": "string", + "readOnly": true, + "description": "Error details", + "nullable": true + }, + "documentation_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Documentation link", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "message", + "documentation_url" + ] + }, + "DashboardBase": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_favorite_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content Favorite Id", + "nullable": true + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description", + "nullable": true + }, + "hidden": { + "type": "boolean", + "readOnly": true, + "description": "Is Hidden", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "model": { + "$ref": "#/components/schemas/LookModel" + }, + "query_timezone": { + "type": "string", + "readOnly": true, + "description": "Timezone in which the Dashboard will run by default.", + "nullable": true + }, + "readonly": { + "type": "boolean", + "readOnly": true, + "description": "Is Read-only", + "nullable": false + }, + "refresh_interval": { + "type": "string", + "readOnly": true, + "description": "Refresh Interval, as a time duration phrase like \"2 hours 30 minutes\". A number with no time units will be interpreted as whole seconds.", + "nullable": true + }, + "refresh_interval_to_i": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Refresh Interval in milliseconds", + "nullable": true + }, + "folder": { + "$ref": "#/components/schemas/FolderBase" + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Dashboard Title", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User", + "nullable": true + }, + "slug": { + "type": "string", + "readOnly": true, + "description": "Content Metadata Slug", + "nullable": true + }, + "preferred_viewer": { + "type": "string", + "readOnly": true, + "description": "The preferred route for viewing this dashboard (ie: dashboards or dashboards-next)", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "HomepageSection": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time at which this section was created.", + "nullable": true + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "Time at which this section was deleted.", + "nullable": true + }, + "detail_url": { + "type": "string", + "readOnly": true, + "description": "A URL pointing to a page showing further information about the content in the section.", + "nullable": true + }, + "homepage_id": { + "type": "integer", + "format": "int64", + "description": "Id reference to parent homepage", + "nullable": true + }, + "homepage_items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HomepageItem" + }, + "readOnly": true, + "description": "Items in the homepage section", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "is_header": { + "type": "boolean", + "readOnly": true, + "description": "Is this a header section (has no items)", + "nullable": false + }, + "item_order": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "ids of the homepage items in the order they should be displayed", + "nullable": true + }, + "title": { + "type": "string", + "description": "Name of row", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time at which this section was last updated.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description of the content found in this section.", + "nullable": true + }, + "visible_item_order": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "readOnly": true, + "description": "ids of the homepage items the user can see in the order they should be displayed", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "HomepageItem": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_created_by": { + "type": "string", + "readOnly": true, + "description": "Name of user who created the content this item is based on", + "nullable": true + }, + "content_favorite_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content favorite id associated with the item this content is based on", + "nullable": true + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content metadata id associated with the item this content is based on", + "nullable": true + }, + "content_updated_at": { + "type": "string", + "readOnly": true, + "description": "Last time the content that this item is based on was updated", + "nullable": true + }, + "custom_description": { + "type": "string", + "description": "Custom description entered by the user, if present", + "nullable": true + }, + "custom_image_data_base64": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) base64 encoded image data", + "nullable": true + }, + "custom_image_url": { + "type": "string", + "readOnly": true, + "description": "Custom image_url entered by the user, if present", + "nullable": true + }, + "custom_title": { + "type": "string", + "description": "Custom title entered by the user, if present", + "nullable": true + }, + "custom_url": { + "type": "string", + "description": "Custom url entered by the user, if present", + "nullable": true + }, + "dashboard_id": { + "type": "integer", + "format": "int64", + "description": "Dashboard to base this item on", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "The actual description for display", + "nullable": true + }, + "favorite_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times content has been favorited, if present", + "nullable": true + }, + "homepage_section_id": { + "type": "integer", + "format": "int64", + "description": "Associated Homepage Section", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "image_url": { + "type": "string", + "readOnly": true, + "description": "The actual image_url for display", + "nullable": true + }, + "location": { + "type": "string", + "readOnly": true, + "description": "The container folder name of the content", + "nullable": true + }, + "look_id": { + "type": "integer", + "format": "int64", + "description": "Look to base this item on", + "nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "description": "LookML Dashboard to base this item on", + "nullable": true + }, + "order": { + "type": "integer", + "format": "int64", + "description": "An arbitrary integer representing the sort order within the section", + "nullable": true + }, + "section_fetch_time": { + "type": "number", + "format": "float", + "readOnly": true, + "description": "Number of seconds it took to fetch the section this item is in", + "nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "The actual title for display", + "nullable": true + }, + "url": { + "type": "string", + "readOnly": true, + "description": "The actual url for display", + "nullable": true + }, + "use_custom_description": { + "type": "boolean", + "description": "Whether the custom description should be used instead of the content description, if the item is associated with content", + "nullable": false + }, + "use_custom_image": { + "type": "boolean", + "description": "Whether the custom image should be used instead of the content image, if the item is associated with content", + "nullable": false + }, + "use_custom_title": { + "type": "boolean", + "description": "Whether the custom title should be used instead of the content title, if the item is associated with content", + "nullable": false + }, + "use_custom_url": { + "type": "boolean", + "description": "Whether the custom url should be used instead of the content url, if the item is associated with content", + "nullable": false + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times content has been viewed, if present", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ValidationError": { + "properties": { + "message": { + "type": "string", + "readOnly": true, + "description": "Error details", + "nullable": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ValidationErrorDetail" + }, + "readOnly": true, + "description": "Error detail array", + "nullable": true + }, + "documentation_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Documentation link", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "message", + "documentation_url" + ] + }, + "ValidationErrorDetail": { + "properties": { + "field": { + "type": "string", + "readOnly": true, + "description": "Field with error", + "nullable": true + }, + "code": { + "type": "string", + "readOnly": true, + "description": "Error code", + "nullable": true + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Error info message", + "nullable": true + }, + "documentation_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Documentation link", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "documentation_url" + ] + }, + "AccessToken": { + "properties": { + "access_token": { + "type": "string", + "readOnly": true, + "description": "Access Token used for API calls", + "nullable": false + }, + "token_type": { + "type": "string", + "readOnly": true, + "description": "Type of Token", + "nullable": false + }, + "expires_in": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of seconds before the token expires", + "nullable": false + }, + "refresh_token": { + "type": "string", + "readOnly": true, + "description": "Refresh token which can be used to obtain a new access token", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "AlertFieldFilter": { + "properties": { + "field_name": { + "type": "string", + "description": "Field Name. Has format `.`", + "nullable": false + }, + "field_value": { + "type": "any", + "format": "any", + "description": "Field Value. Depends on the type of field - numeric or string. For [location](https://docs.looker.com/reference/field-reference/dimension-type-reference#location) type, it's a list of floats. Example `[1.0, 56.0]`", + "nullable": false + }, + "filter_value": { + "type": "string", + "description": "Filter Value. Usually null except for [location](https://docs.looker.com/reference/field-reference/dimension-type-reference#location) type. It'll be a string of lat,long ie `'1.0,56.0'`", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "AlertAppliedDashboardFilter": { + "properties": { + "filter_title": { + "type": "string", + "description": "Field Title. Refer to `DashboardFilter.title` in [DashboardFilter](#!/types/DashboardFilter). Example `Name`", + "nullable": true + }, + "field_name": { + "type": "string", + "description": "Field Name. Refer to `DashboardFilter.dimension` in [DashboardFilter](#!/types/DashboardFilter). Example `distribution_centers.name`", + "nullable": false + }, + "filter_value": { + "type": "string", + "description": "Field Value. [Filter Expressions](https://docs.looker.com/reference/filter-expressions). Example `Los Angeles CA`", + "nullable": false + }, + "filter_description": { + "type": "string", + "readOnly": true, + "description": "Human Readable Filter Description. This may be null or auto-generated. Example `is Los Angeles CA`", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "AlertField": { + "properties": { + "title": { + "type": "string", + "description": "Field's title. Usually auto-generated to reflect field name and its filters", + "nullable": false + }, + "name": { + "type": "string", + "description": "Field's name. Has the format `.` Refer to [docs](https://docs.looker.com/sharing-and-publishing/creating-alerts) for more details", + "nullable": false + }, + "filter": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AlertFieldFilter" + }, + "description": "(Optional / Advance Use) List of fields filter. This further restricts the alert to certain dashboard element's field values. This can be used on top of dashboard filters `applied_dashboard_filters`. To keep thing simple, it's suggested to just use dashboard filters. Example: `{ 'title': '12 Number on Hand', 'name': 'inventory_items.number_on_hand', 'filter': [{ 'field_name': 'inventory_items.id', 'field_value': 12, 'filter_value': null }] }`", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "AlertConditionState": { + "properties": { + "previous_time_series_id": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) The second latest time string the alert has seen.", + "nullable": true + }, + "latest_time_series_id": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Latest time string the alert has seen.", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "Alert": { + "properties": { + "applied_dashboard_filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AlertAppliedDashboardFilter" + }, + "description": "Filters coming from the dashboard that are applied. Example `[{ \"filter_title\": \"Name\", \"field_name\": \"distribution_centers.name\", \"filter_value\": \"Los Angeles CA\" }]`", + "nullable": true + }, + "comparison_type": { + "type": "string", + "enum": [ + "EQUAL_TO", + "GREATER_THAN", + "GREATER_THAN_OR_EQUAL_TO", + "LESS_THAN", + "LESS_THAN_OR_EQUAL_TO", + "INCREASES_BY", + "DECREASES_BY", + "CHANGES_BY" + ], + "description": "This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: \"EQUAL_TO\", \"GREATER_THAN\", \"GREATER_THAN_OR_EQUAL_TO\", \"LESS_THAN\", \"LESS_THAN_OR_EQUAL_TO\", \"INCREASES_BY\", \"DECREASES_BY\", \"CHANGES_BY\".", + "nullable": false + }, + "cron": { + "type": "string", + "description": "Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals", + "nullable": false + }, + "custom_title": { + "type": "string", + "description": "An optional, user-defined title for the alert", + "nullable": true + }, + "dashboard_element_id": { + "type": "integer", + "format": "int64", + "description": "ID of the dashboard element associated with the alert. Refer to [dashboard_element()](#!/Dashboard/DashboardElement)", + "nullable": true + }, + "description": { + "type": "string", + "description": "An optional description for the alert. This supplements the title", + "nullable": true + }, + "destinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AlertDestination" + }, + "description": "Array of destinations to send alerts to. Must be the same type of destination. Example `[{ \"destination_type\": \"EMAIL\", \"email_address\": \"test@test.com\" }]`", + "nullable": true + }, + "field": { + "$ref": "#/components/schemas/AlertField" + }, + "followed": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the user follows this alert.", + "nullable": true + }, + "followable": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the alert is followable", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the alert", + "nullable": false + }, + "is_disabled": { + "type": "boolean", + "description": "Whether or not the alert is disabled", + "nullable": false + }, + "is_public": { + "type": "boolean", + "description": "Whether or not the alert is public", + "nullable": false + }, + "investigative_content_type": { + "type": "string", + "enum": [ + "dashboard" + ], + "description": "The type of the investigative content Valid values are: \"dashboard\".", + "nullable": true + }, + "investigative_content_id": { + "type": "string", + "description": "The ID of the investigative content. For dashboards, this will be the dashboard ID", + "nullable": true + }, + "investigative_content_title": { + "type": "string", + "readOnly": true, + "description": "The title of the investigative content.", + "nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "description": "ID of the LookML dashboard associated with the alert", + "nullable": true + }, + "lookml_link_id": { + "type": "string", + "description": "ID of the LookML dashboard element associated with the alert", + "nullable": true + }, + "owner_id": { + "type": "integer", + "format": "int64", + "description": "User id of alert owner", + "nullable": false + }, + "owner_display_name": { + "type": "string", + "readOnly": true, + "description": "Alert owner's display name", + "nullable": true + }, + "threshold": { + "type": "number", + "format": "double", + "description": "Value of the alert threshold", + "nullable": false + }, + "time_series_condition_state": { + "$ref": "#/components/schemas/AlertConditionState" + } + }, + "x-looker-status": "beta" + }, + "AlertDestination": { + "properties": { + "destination_type": { + "type": "string", + "enum": [ + "EMAIL", + "ACTION_HUB" + ], + "description": "Type of destination that the alert will be sent to Valid values are: \"EMAIL\", \"ACTION_HUB\".", + "nullable": false + }, + "email_address": { + "type": "string", + "description": "Email address for the 'email' type", + "nullable": true + }, + "action_hub_integration_id": { + "type": "string", + "description": "Action hub integration id for the 'action_hub' type. [Integration](#!/types/Integration)", + "nullable": true + }, + "action_hub_form_params_json": { + "type": "string", + "description": "Action hub form params json for the 'action_hub' type [IntegrationParam](#!/types/IntegrationParam)", + "nullable": true + } + }, + "x-looker-status": "beta", + "required": [ + "destination_type" + ] + }, + "ApiSession": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "workspace_id": { + "type": "string", + "description": "The id of active workspace for this session", + "nullable": true + }, + "sudo_user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The id of the actual user in the case when this session represents one user sudo'ing as another", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "BackupConfiguration": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "type": { + "type": "string", + "description": "Type of backup: looker-s3 or custom-s3", + "nullable": true + }, + "custom_s3_bucket": { + "type": "string", + "description": "Name of bucket for custom-s3 backups", + "nullable": true + }, + "custom_s3_bucket_region": { + "type": "string", + "description": "Name of region where the bucket is located", + "nullable": true + }, + "custom_s3_key": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) AWS S3 key used for custom-s3 backups", + "nullable": true + }, + "custom_s3_secret": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) AWS S3 secret used for custom-s3 backups", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "BoardItem": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_created_by": { + "type": "string", + "readOnly": true, + "description": "Name of user who created the content this item is based on", + "nullable": true + }, + "content_favorite_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content favorite id associated with the item this content is based on", + "nullable": true + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content metadata id associated with the item this content is based on", + "nullable": true + }, + "content_updated_at": { + "type": "string", + "readOnly": true, + "description": "Last time the content that this item is based on was updated", + "nullable": true + }, + "custom_description": { + "type": "string", + "description": "Custom description entered by the user, if present", + "nullable": true + }, + "custom_title": { + "type": "string", + "description": "Custom title entered by the user, if present", + "nullable": true + }, + "custom_url": { + "type": "string", + "description": "Custom url entered by the user, if present", + "nullable": true + }, + "dashboard_id": { + "type": "integer", + "format": "int64", + "description": "Dashboard to base this item on", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "The actual description for display", + "nullable": true + }, + "favorite_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times content has been favorited, if present", + "nullable": true + }, + "board_section_id": { + "type": "integer", + "format": "int64", + "description": "Associated Board Section", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "image_url": { + "type": "string", + "readOnly": true, + "description": "The actual image_url for display", + "nullable": true + }, + "location": { + "type": "string", + "readOnly": true, + "description": "The container folder name of the content", + "nullable": true + }, + "look_id": { + "type": "integer", + "format": "int64", + "description": "Look to base this item on", + "nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "description": "LookML Dashboard to base this item on", + "nullable": true + }, + "order": { + "type": "integer", + "format": "int64", + "description": "An arbitrary integer representing the sort order within the section", + "nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "The actual title for display", + "nullable": true + }, + "url": { + "type": "string", + "readOnly": true, + "description": "Relative url for the associated content", + "nullable": false + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times content has been viewed, if present", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "Board": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of associated content_metadata record", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Date of board creation", + "nullable": true + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "Date of board deletion", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description of the board", + "nullable": true + }, + "board_sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardSection" + }, + "readOnly": true, + "description": "Sections of the board", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "section_order": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "ids of the board sections in the order they should be displayed", + "nullable": true + }, + "title": { + "type": "string", + "description": "Title of the board", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Date of last board update", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "User id of board creator", + "nullable": true + }, + "primary_homepage": { + "type": "boolean", + "readOnly": true, + "description": "Whether the board is the primary homepage or not", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "BoardSection": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time at which this section was created.", + "nullable": true + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "description": "Time at which this section was deleted.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description of the content found in this section.", + "nullable": true + }, + "board_id": { + "type": "integer", + "format": "int64", + "description": "Id reference to parent board", + "nullable": true + }, + "board_items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardItem" + }, + "readOnly": true, + "description": "Items in the board section", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "item_order": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "ids of the board items in the order they should be displayed", + "nullable": true + }, + "visible_item_order": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "readOnly": true, + "description": "ids of the homepage items the user can see in the order they should be displayed", + "nullable": true + }, + "title": { + "type": "string", + "description": "Name of row", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time at which this section was last updated.", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "ColorStop": { + "properties": { + "color": { + "type": "string", + "description": "CSS color string", + "nullable": false + }, + "offset": { + "type": "integer", + "format": "int64", + "description": "Offset in continuous palette (0 to 100)", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ContinuousPalette": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Unique identity string", + "nullable": false + }, + "label": { + "type": "string", + "description": "Label for palette", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type of palette", + "nullable": false + }, + "stops": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorStop" + }, + "description": "Array of ColorStops in the palette", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "DiscretePalette": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Unique identity string", + "nullable": false + }, + "label": { + "type": "string", + "description": "Label for palette", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type of palette", + "nullable": false + }, + "colors": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of colors in the palette", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ColorCollection": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "label": { + "type": "string", + "description": "Label of color collection", + "nullable": false + }, + "categoricalPalettes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DiscretePalette" + }, + "description": "Array of categorical palette definitions", + "nullable": false + }, + "sequentialPalettes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContinuousPalette" + }, + "description": "Array of discrete palette definitions", + "nullable": false + }, + "divergingPalettes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContinuousPalette" + }, + "description": "Array of diverging palette definitions", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Command": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of the command record", + "nullable": false + }, + "author_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of the command author", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of the command", + "nullable": false + }, + "description": { + "type": "string", + "description": "Description of the command", + "nullable": true + }, + "linked_content_id": { + "type": "string", + "description": "Id of the content associated with the command", + "nullable": false + }, + "linked_content_type": { + "type": "string", + "enum": [ + "dashboard", + "lookml_dashboard" + ], + "description": "Name of the command Valid values are: \"dashboard\", \"lookml_dashboard\".", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "UpdateCommand": { + "properties": { + "name": { + "type": "string", + "description": "Name of the command", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description of the command", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "ContentFavorite": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "user_id": { + "type": "integer", + "format": "int64", + "description": "User Id which owns this ContentFavorite", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "description": "Content Metadata Id associated with this ContentFavorite", + "nullable": false + }, + "look_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of a look", + "nullable": true + }, + "dashboard_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of a dashboard", + "nullable": true + }, + "look": { + "$ref": "#/components/schemas/LookBasic" + }, + "dashboard": { + "$ref": "#/components/schemas/DashboardBase" + }, + "board_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of a board", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentMetaGroupUser": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "content_metadata_id": { + "type": "string", + "readOnly": true, + "description": "Id of associated Content Metadata", + "nullable": true + }, + "permission_type": { + "type": "string", + "readOnly": true, + "enum": [ + "view", + "edit" + ], + "description": "Type of permission: \"view\" or \"edit\" Valid values are: \"view\", \"edit\".", + "nullable": true + }, + "group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of associated group", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of associated user", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentMeta": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name or title of underlying content", + "nullable": true + }, + "parent_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of Parent Content", + "nullable": true + }, + "dashboard_id": { + "type": "string", + "readOnly": true, + "description": "Id of associated dashboard when content_type is \"dashboard\"", + "nullable": true + }, + "look_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of associated look when content_type is \"look\"", + "nullable": true + }, + "folder_id": { + "type": "string", + "readOnly": true, + "description": "Id of associated folder when content_type is \"space\"", + "nullable": true + }, + "content_type": { + "type": "string", + "readOnly": true, + "description": "Content Type (\"dashboard\", \"look\", or \"folder\")", + "nullable": true + }, + "inherits": { + "type": "boolean", + "description": "Whether content inherits its access levels from parent", + "nullable": false + }, + "inheriting_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of Inherited Content", + "nullable": true + }, + "slug": { + "type": "string", + "readOnly": true, + "description": "Content Slug", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentValidation": { + "properties": { + "content_with_errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContentValidatorError" + }, + "readOnly": true, + "description": "A list of content errors", + "nullable": true + }, + "computation_time": { + "type": "number", + "format": "float", + "readOnly": true, + "description": "Duration of content validation in seconds", + "nullable": true + }, + "total_looks_validated": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of looks validated", + "nullable": true + }, + "total_dashboard_elements_validated": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of dashboard elements validated", + "nullable": true + }, + "total_dashboard_filters_validated": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of dashboard filters validated", + "nullable": true + }, + "total_scheduled_plans_validated": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of scheduled plans validated", + "nullable": true + }, + "total_alerts_validated": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of alerts validated", + "nullable": true + }, + "total_explores_validated": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of explores used across all content validated", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentValidatorError": { + "properties": { + "look": { + "$ref": "#/components/schemas/ContentValidationLook" + }, + "dashboard": { + "$ref": "#/components/schemas/ContentValidationDashboard" + }, + "dashboard_element": { + "$ref": "#/components/schemas/ContentValidationDashboardElement" + }, + "dashboard_filter": { + "$ref": "#/components/schemas/ContentValidationDashboardFilter" + }, + "scheduled_plan": { + "$ref": "#/components/schemas/ContentValidationScheduledPlan" + }, + "alert": { + "$ref": "#/components/schemas/ContentValidationAlert" + }, + "lookml_dashboard": { + "$ref": "#/components/schemas/ContentValidationLookMLDashboard" + }, + "lookml_dashboard_element": { + "$ref": "#/components/schemas/ContentValidationLookMLDashboardElement" + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContentValidationError" + }, + "readOnly": true, + "description": "A list of errors found for this piece of content", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "An id unique to this piece of content for this validation run", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ContentValidationFolder": { + "properties": { + "name": { + "type": "string", + "description": "Unique Name", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "name" + ] + }, + "ContentValidationLook": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "title": { + "type": "string", + "description": "Look Title", + "nullable": true + }, + "short_url": { + "type": "string", + "readOnly": true, + "description": "Short Url", + "nullable": true + }, + "folder": { + "$ref": "#/components/schemas/ContentValidationFolder" + } + }, + "x-looker-status": "stable" + }, + "ContentValidationDashboard": { + "properties": { + "description": { + "type": "string", + "description": "Description", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "folder": { + "$ref": "#/components/schemas/ContentValidationFolder" + }, + "title": { + "type": "string", + "description": "Dashboard Title", + "nullable": true + }, + "url": { + "type": "string", + "readOnly": true, + "description": "Relative URL of the dashboard", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentValidationDashboardElement": { + "properties": { + "body_text": { + "type": "string", + "description": "Text tile body text", + "nullable": true + }, + "dashboard_id": { + "type": "string", + "description": "Id of Dashboard", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "look_id": { + "type": "string", + "description": "Id Of Look", + "nullable": true + }, + "note_display": { + "type": "string", + "description": "Note Display", + "nullable": true + }, + "note_state": { + "type": "string", + "description": "Note State", + "nullable": true + }, + "note_text": { + "type": "string", + "description": "Note Text", + "nullable": true + }, + "note_text_as_html": { + "type": "string", + "readOnly": true, + "description": "Note Text as Html", + "nullable": true + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Id Of Query", + "nullable": true + }, + "subtitle_text": { + "type": "string", + "description": "Text tile subtitle text", + "nullable": true + }, + "title": { + "type": "string", + "description": "Title of dashboard element", + "nullable": true + }, + "title_hidden": { + "type": "boolean", + "description": "Whether title is hidden", + "nullable": false + }, + "title_text": { + "type": "string", + "description": "Text tile title", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentValidationError": { + "properties": { + "message": { + "type": "string", + "readOnly": true, + "description": "Error message", + "nullable": true + }, + "field_name": { + "type": "string", + "readOnly": true, + "description": "Name of the field involved in the error", + "nullable": true + }, + "model_name": { + "type": "string", + "readOnly": true, + "description": "Name of the model involved in the error", + "nullable": true + }, + "explore_name": { + "type": "string", + "readOnly": true, + "description": "Name of the explore involved in the error", + "nullable": true + }, + "removable": { + "type": "boolean", + "readOnly": true, + "description": "Whether this validation error is removable", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ContentValidationDashboardFilter": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "dashboard_id": { + "type": "string", + "readOnly": true, + "description": "Id of Dashboard", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of filter", + "nullable": true + }, + "title": { + "type": "string", + "description": "Title of filter", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type of filter: one of date, number, string, or field", + "nullable": true + }, + "default_value": { + "type": "string", + "description": "Default value of filter", + "nullable": true + }, + "model": { + "type": "string", + "description": "Model of filter (required if type = field)", + "nullable": true + }, + "explore": { + "type": "string", + "description": "Explore of filter (required if type = field)", + "nullable": true + }, + "dimension": { + "type": "string", + "description": "Dimension of filter (required if type = field)", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentValidationScheduledPlan": { + "properties": { + "name": { + "type": "string", + "description": "Name of this scheduled plan", + "nullable": true + }, + "look_id": { + "type": "integer", + "format": "int64", + "description": "Id of a look", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ContentValidationAlert": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "ID of the alert", + "nullable": false + }, + "lookml_dashboard_id": { + "type": "string", + "description": "ID of the LookML dashboard associated with the alert", + "nullable": true + }, + "lookml_link_id": { + "type": "string", + "description": "ID of the LookML dashboard element associated with the alert", + "nullable": true + }, + "custom_title": { + "type": "string", + "description": "An optional, user-defined title for the alert", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentValidationLookMLDashboard": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "ID of the LookML Dashboard", + "nullable": false + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Title of the LookML Dashboard", + "nullable": true + }, + "space_id": { + "type": "string", + "readOnly": true, + "description": "ID of Space", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentValidationLookMLDashboardElement": { + "properties": { + "lookml_link_id": { + "type": "string", + "readOnly": true, + "description": "Link ID of the LookML Dashboard Element", + "nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Title of the LookML Dashboard Element", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ContentView": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "look_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of viewed Look", + "nullable": true + }, + "dashboard_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of the viewed Dashboard", + "nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Name or title of underlying content", + "nullable": true + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content metadata id of the Look or Dashboard", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of user content was viewed by", + "nullable": true + }, + "group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of group content was viewed by", + "nullable": true + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times piece of content was viewed", + "nullable": true + }, + "favorite_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times piece of content was favorited", + "nullable": true + }, + "last_viewed_at": { + "type": "string", + "readOnly": true, + "description": "Date the piece of content was last viewed", + "nullable": true + }, + "start_of_week_date": { + "type": "string", + "readOnly": true, + "description": "Week start date for the view and favorite count during that given week", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CreateEmbedUserRequest": { + "properties": { + "external_user_id": { + "type": "string", + "nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "external_user_id" + ] + }, + "CreateOAuthApplicationUserStateRequest": { + "properties": { + "user_id": { + "type": "string", + "nullable": false + }, + "oauth_application_id": { + "type": "string", + "nullable": false + }, + "access_token": { + "type": "string", + "nullable": false + }, + "access_token_expires_at": { + "type": "string", + "format": "date-time", + "nullable": false + }, + "refresh_token": { + "type": "string", + "nullable": true + }, + "refresh_token_expires_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "x-looker-status": "beta", + "required": [ + "user_id", + "oauth_application_id", + "access_token", + "access_token_expires_at" + ] + }, + "CreateOAuthApplicationUserStateResponse": { + "properties": { + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "User Id", + "nullable": false + }, + "oauth_application_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "OAuth Application ID", + "nullable": false + } + }, + "x-looker-status": "beta", + "required": [ + "user_id", + "oauth_application_id" + ] + }, + "CredentialsApi3": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "client_id": { + "type": "string", + "readOnly": true, + "description": "API key client_id", + "nullable": true + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsEmail": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "email": { + "type": "string", + "description": "EMail address used for user login", + "nullable": true + }, + "forced_password_reset_at_next_login": { + "type": "boolean", + "description": "Force the user to change their password upon their next login", + "nullable": false + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "password_reset_url": { + "type": "string", + "readOnly": true, + "description": "Url with one-time use secret token that the user can use to reset password", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + }, + "user_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this user", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsEmailSearch": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "email": { + "type": "string", + "description": "EMail address used for user login", + "nullable": true + }, + "forced_password_reset_at_next_login": { + "type": "boolean", + "description": "Force the user to change their password upon their next login", + "nullable": false + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "password_reset_url": { + "type": "string", + "readOnly": true, + "description": "Url with one-time use secret token that the user can use to reset password", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + }, + "user_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this user", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "CredentialsEmbed": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "external_group_id": { + "type": "string", + "readOnly": true, + "description": "Embedder's id for a group to which this user was added during the most recent login", + "nullable": true + }, + "external_user_id": { + "type": "string", + "readOnly": true, + "description": "Embedder's unique id for the user", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsGoogle": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "domain": { + "type": "string", + "readOnly": true, + "description": "Google domain", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "EMail address", + "nullable": true + }, + "google_user_id": { + "type": "string", + "readOnly": true, + "description": "Google's Unique ID for this user", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsLDAP": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "EMail address", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "ldap_dn": { + "type": "string", + "readOnly": true, + "description": "LDAP Distinguished name for this user (as-of the last login)", + "nullable": true + }, + "ldap_id": { + "type": "string", + "readOnly": true, + "description": "LDAP Unique ID for this user", + "nullable": true + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsLookerOpenid": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "EMail address used for user login", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "logged_in_ip": { + "type": "string", + "readOnly": true, + "description": "IP address of client for most recent login using credential", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + }, + "user_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this user", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsOIDC": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "EMail address", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "oidc_user_id": { + "type": "string", + "readOnly": true, + "description": "OIDC OP's Unique ID for this user", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsSaml": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "EMail address", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "saml_user_id": { + "type": "string", + "readOnly": true, + "description": "Saml IdP's Unique ID for this user", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CredentialsTotp": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "verified": { + "type": "boolean", + "readOnly": true, + "description": "User has verified", + "nullable": false + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CustomWelcomeEmail": { + "properties": { + "enabled": { + "type": "boolean", + "description": "If true, custom email content will replace the default body of welcome emails", + "nullable": false + }, + "content": { + "type": "string", + "description": "The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed.", + "nullable": true + }, + "subject": { + "type": "string", + "description": "The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", + "nullable": true + }, + "header": { + "type": "string", + "description": "The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DashboardAggregateTableLookml": { + "properties": { + "dashboard_id": { + "type": "string", + "readOnly": true, + "description": "Dashboard Id", + "nullable": true + }, + "aggregate_table_lookml": { + "type": "string", + "readOnly": true, + "description": "Aggregate Table LookML", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DashboardAppearance": { + "properties": { + "page_side_margins": { + "type": "integer", + "format": "int64", + "description": "Page margin (side) width", + "nullable": true + }, + "page_background_color": { + "type": "string", + "description": "Background color for the dashboard", + "nullable": true + }, + "tile_title_alignment": { + "type": "string", + "description": "Title alignment on dashboard tiles", + "nullable": true + }, + "tile_space_between": { + "type": "integer", + "format": "int64", + "description": "Space between tiles", + "nullable": true + }, + "tile_background_color": { + "type": "string", + "description": "Background color for tiles", + "nullable": true + }, + "tile_shadow": { + "type": "boolean", + "description": "Tile shadow on/off", + "nullable": true + }, + "key_color": { + "type": "string", + "description": "Key color", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DashboardElement": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "body_text": { + "type": "string", + "description": "Text tile body text", + "nullable": true + }, + "body_text_as_html": { + "type": "string", + "readOnly": true, + "description": "Text tile body text as Html", + "nullable": true + }, + "dashboard_id": { + "type": "string", + "description": "Id of Dashboard", + "nullable": true + }, + "edit_uri": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only).", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "look": { + "$ref": "#/components/schemas/LookWithQuery" + }, + "look_id": { + "type": "string", + "description": "Id Of Look", + "nullable": true + }, + "lookml_link_id": { + "type": "string", + "readOnly": true, + "description": "LookML link ID", + "nullable": true + }, + "merge_result_id": { + "type": "string", + "description": "ID of merge result", + "nullable": true + }, + "note_display": { + "type": "string", + "description": "Note Display", + "nullable": true + }, + "note_state": { + "type": "string", + "description": "Note State", + "nullable": true + }, + "note_text": { + "type": "string", + "description": "Note Text", + "nullable": true + }, + "note_text_as_html": { + "type": "string", + "readOnly": true, + "description": "Note Text as Html", + "nullable": true + }, + "query": { + "$ref": "#/components/schemas/Query" + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Id Of Query", + "nullable": true + }, + "refresh_interval": { + "type": "string", + "description": "Refresh Interval", + "nullable": true + }, + "refresh_interval_to_i": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Refresh Interval as integer", + "nullable": true + }, + "result_maker": { + "$ref": "#/components/schemas/ResultMakerWithIdVisConfigAndDynamicFields" + }, + "result_maker_id": { + "type": "integer", + "format": "int64", + "description": "ID of the ResultMakerLookup entry.", + "nullable": true + }, + "subtitle_text": { + "type": "string", + "description": "Text tile subtitle text", + "nullable": true + }, + "title": { + "type": "string", + "description": "Title of dashboard element", + "nullable": true + }, + "title_hidden": { + "type": "boolean", + "description": "Whether title is hidden", + "nullable": false + }, + "title_text": { + "type": "string", + "description": "Text tile title", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type", + "nullable": true + }, + "alert_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Count of Alerts associated to a dashboard element", + "nullable": true + }, + "title_text_as_html": { + "type": "string", + "readOnly": true, + "description": "Text tile title text as Html", + "nullable": true + }, + "subtitle_text_as_html": { + "type": "string", + "readOnly": true, + "description": "Text tile subtitle text as Html", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DashboardFilter": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "dashboard_id": { + "type": "string", + "readOnly": true, + "description": "Id of Dashboard", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of filter", + "nullable": true + }, + "title": { + "type": "string", + "description": "Title of filter", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type of filter: one of date, number, string, or field", + "nullable": true + }, + "default_value": { + "type": "string", + "description": "Default value of filter", + "nullable": true + }, + "model": { + "type": "string", + "description": "Model of filter (required if type = field)", + "nullable": true + }, + "explore": { + "type": "string", + "description": "Explore of filter (required if type = field)", + "nullable": true + }, + "dimension": { + "type": "string", + "description": "Dimension of filter (required if type = field)", + "nullable": true + }, + "field": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Field information", + "nullable": true + }, + "row": { + "type": "integer", + "format": "int64", + "description": "Display order of this filter relative to other filters", + "nullable": true + }, + "listens_to_filters": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of listeners for faceted filters", + "nullable": true + }, + "allow_multiple_values": { + "type": "boolean", + "description": "Whether the filter allows multiple filter values (deprecated in the latest version of dashboards)", + "nullable": false + }, + "required": { + "type": "boolean", + "description": "Whether the filter requires a value to run the dashboard", + "nullable": false + }, + "ui_config": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "The visual configuration for this filter. Used to set up how the UI for this filter should appear.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CreateDashboardFilter": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "dashboard_id": { + "type": "string", + "description": "Id of Dashboard", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of filter", + "nullable": true + }, + "title": { + "type": "string", + "description": "Title of filter", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type of filter: one of date, number, string, or field", + "nullable": true + }, + "default_value": { + "type": "string", + "description": "Default value of filter", + "nullable": true + }, + "model": { + "type": "string", + "description": "Model of filter (required if type = field)", + "nullable": true + }, + "explore": { + "type": "string", + "description": "Explore of filter (required if type = field)", + "nullable": true + }, + "dimension": { + "type": "string", + "description": "Dimension of filter (required if type = field)", + "nullable": true + }, + "field": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Field information", + "nullable": true + }, + "row": { + "type": "integer", + "format": "int64", + "description": "Display order of this filter relative to other filters", + "nullable": true + }, + "listens_to_filters": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of listeners for faceted filters", + "nullable": true + }, + "allow_multiple_values": { + "type": "boolean", + "description": "Whether the filter allows multiple filter values (deprecated in the latest version of dashboards)", + "nullable": false + }, + "required": { + "type": "boolean", + "description": "Whether the filter requires a value to run the dashboard", + "nullable": false + }, + "ui_config": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "The visual configuration for this filter. Used to set up how the UI for this filter should appear.", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "dashboard_id", + "name", + "title", + "type" + ] + }, + "DashboardLayoutComponent": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "dashboard_layout_id": { + "type": "string", + "description": "Id of Dashboard Layout", + "nullable": true + }, + "dashboard_element_id": { + "type": "string", + "description": "Id Of Dashboard Element", + "nullable": true + }, + "row": { + "type": "integer", + "format": "int64", + "description": "Row", + "nullable": true + }, + "column": { + "type": "integer", + "format": "int64", + "description": "Column", + "nullable": true + }, + "width": { + "type": "integer", + "format": "int64", + "description": "Width", + "nullable": true + }, + "height": { + "type": "integer", + "format": "int64", + "description": "Height", + "nullable": true + }, + "deleted": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the dashboard layout component is deleted", + "nullable": false + }, + "element_title": { + "type": "string", + "readOnly": true, + "description": "Dashboard element title, extracted from the Dashboard Element.", + "nullable": true + }, + "element_title_hidden": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the dashboard element title is displayed.", + "nullable": false + }, + "vis_type": { + "type": "string", + "readOnly": true, + "description": "Visualization type, extracted from a query's vis_config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DashboardLayout": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "dashboard_id": { + "type": "string", + "description": "Id of Dashboard", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type", + "nullable": true + }, + "active": { + "type": "boolean", + "description": "Is Active", + "nullable": false + }, + "column_width": { + "type": "integer", + "format": "int64", + "description": "Column Width", + "nullable": true + }, + "width": { + "type": "integer", + "format": "int64", + "description": "Width", + "nullable": true + }, + "deleted": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the dashboard layout is deleted.", + "nullable": false + }, + "dashboard_title": { + "type": "string", + "readOnly": true, + "description": "Title extracted from the dashboard this layout represents.", + "nullable": true + }, + "dashboard_layout_components": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardLayoutComponent" + }, + "readOnly": true, + "description": "Components", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DashboardLookml": { + "properties": { + "dashboard_id": { + "type": "string", + "readOnly": true, + "description": "Id of Dashboard", + "nullable": true + }, + "lookml": { + "type": "string", + "readOnly": true, + "description": "lookml of UDD", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Dashboard": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_favorite_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content Favorite Id", + "nullable": true + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description", + "nullable": true + }, + "hidden": { + "type": "boolean", + "description": "Is Hidden", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "model": { + "$ref": "#/components/schemas/LookModel" + }, + "query_timezone": { + "type": "string", + "description": "Timezone in which the Dashboard will run by default.", + "nullable": true + }, + "readonly": { + "type": "boolean", + "readOnly": true, + "description": "Is Read-only", + "nullable": false + }, + "refresh_interval": { + "type": "string", + "description": "Refresh Interval, as a time duration phrase like \"2 hours 30 minutes\". A number with no time units will be interpreted as whole seconds.", + "nullable": true + }, + "refresh_interval_to_i": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Refresh Interval in milliseconds", + "nullable": true + }, + "folder": { + "$ref": "#/components/schemas/FolderBase" + }, + "title": { + "type": "string", + "description": "Dashboard Title", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User", + "nullable": true + }, + "slug": { + "type": "string", + "description": "Content Metadata Slug", + "nullable": true + }, + "preferred_viewer": { + "type": "string", + "description": "The preferred route for viewing this dashboard (ie: dashboards or dashboards-next)", + "nullable": true + }, + "alert_sync_with_dashboard_filter_enabled": { + "type": "boolean", + "description": "Enables alerts to keep in sync with dashboard filter changes - only available in Enhanced Alerts (beta)", + "nullable": false + }, + "background_color": { + "type": "string", + "description": "Background color", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Dashboard was created.", + "nullable": true + }, + "crossfilter_enabled": { + "type": "boolean", + "description": "Enables crossfiltering in dashboards - only available in dashboards-next (beta)", + "nullable": false + }, + "dashboard_elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardElement" + }, + "readOnly": true, + "description": "Elements", + "nullable": true + }, + "dashboard_filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardFilter" + }, + "readOnly": true, + "description": "Filters", + "nullable": true + }, + "dashboard_layouts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardLayout" + }, + "readOnly": true, + "description": "Layouts", + "nullable": true + }, + "deleted": { + "type": "boolean", + "description": "Whether or not a dashboard is 'soft' deleted.", + "nullable": false + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Dashboard was 'soft' deleted.", + "nullable": true + }, + "deleter_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User that 'soft' deleted the dashboard.", + "nullable": true + }, + "edit_uri": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Relative path of URI of LookML file to edit the dashboard (LookML dashboard only).", + "nullable": true + }, + "favorite_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times favorited", + "nullable": true + }, + "filters_bar_collapsed": { + "type": "boolean", + "description": "Sets the default state of the filters bar to collapsed or open", + "nullable": false + }, + "last_accessed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time the dashboard was last accessed", + "nullable": true + }, + "last_viewed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time last viewed in the Looker web UI", + "nullable": true + }, + "load_configuration": { + "type": "string", + "description": "configuration option that governs how dashboard loading will happen.", + "nullable": true + }, + "lookml_link_id": { + "type": "string", + "description": "Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match.", + "nullable": true + }, + "show_filters_bar": { + "type": "boolean", + "description": "Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access)", + "nullable": false + }, + "show_title": { + "type": "boolean", + "description": "Show title", + "nullable": false + }, + "folder_id": { + "type": "string", + "description": "Id of folder", + "nullable": true + }, + "text_tile_text_color": { + "type": "string", + "description": "Color of text on text tiles", + "nullable": true + }, + "tile_background_color": { + "type": "string", + "description": "Tile background color", + "nullable": true + }, + "tile_text_color": { + "type": "string", + "description": "Tile text color", + "nullable": true + }, + "title_color": { + "type": "string", + "description": "Title color", + "nullable": true + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times viewed in the Looker web UI", + "nullable": true + }, + "appearance": { + "$ref": "#/components/schemas/DashboardAppearance" + }, + "url": { + "type": "string", + "readOnly": true, + "description": "Relative URL of the dashboard", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DataActionFormField": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name", + "nullable": true + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Human-readable label", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description of field", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Type of field.", + "nullable": true + }, + "default": { + "type": "string", + "readOnly": true, + "description": "Default value of the field.", + "nullable": true + }, + "oauth_url": { + "type": "string", + "readOnly": true, + "description": "The URL for an oauth link, if type is 'oauth_link'.", + "nullable": true + }, + "interactive": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not a field supports interactive forms.", + "nullable": false + }, + "required": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the field is required. This is a user-interface hint. A user interface displaying this form should not submit it without a value for this field. The action server must also perform this validation.", + "nullable": false + }, + "options": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataActionFormSelectOption" + }, + "readOnly": true, + "description": "If the form type is 'select', a list of options to be selected from.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DataActionForm": { + "properties": { + "state": { + "$ref": "#/components/schemas/DataActionUserState" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataActionFormField" + }, + "readOnly": true, + "description": "Array of form fields.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DataActionFormSelectOption": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name", + "nullable": true + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Human-readable label", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DataActionRequest": { + "properties": { + "action": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "The JSON describing the data action. This JSON should be considered opaque and should be passed through unmodified from the query result it came from.", + "nullable": true + }, + "form_values": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User input for any form values the data action might use.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DataActionResponse": { + "properties": { + "webhook_id": { + "type": "string", + "readOnly": true, + "description": "ID of the webhook event that sent this data action. In some error conditions, this may be null.", + "nullable": true + }, + "success": { + "type": "boolean", + "readOnly": true, + "description": "Whether the data action was successful.", + "nullable": false + }, + "refresh_query": { + "type": "boolean", + "readOnly": true, + "description": "When true, indicates that the client should refresh (rerun) the source query because the data may have been changed by the action.", + "nullable": false + }, + "validation_errors": { + "$ref": "#/components/schemas/ValidationError" + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Optional message returned by the data action server describing the state of the action that took place. This can be used to implement custom failure messages. If a failure is related to a particular form field, the server should send back a validation error instead. The Looker web UI does not currently display any message if the action indicates 'success', but may do so in the future.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DataActionUserState": { + "properties": { + "data": { + "type": "string", + "readOnly": true, + "description": "User state data", + "nullable": true + }, + "refresh_time": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Time in seconds until the state needs to be refreshed", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Datagroup": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "UNIX timestamp at which this entry was created.", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique ID of the datagroup", + "nullable": false + }, + "model_name": { + "type": "string", + "readOnly": true, + "description": "Name of the model containing the datagroup. Unique when combined with name.", + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of the datagroup. Unique when combined with model_name.", + "nullable": true + }, + "stale_before": { + "type": "integer", + "format": "int64", + "description": "UNIX timestamp before which cache entries are considered stale. Cannot be in the future.", + "nullable": true + }, + "trigger_check_at": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "UNIX timestamp at which this entry trigger was last checked.", + "nullable": true + }, + "trigger_error": { + "type": "string", + "readOnly": true, + "description": "The message returned with the error of the last trigger check.", + "nullable": true + }, + "trigger_value": { + "type": "string", + "readOnly": true, + "description": "The value of the trigger when last checked.", + "nullable": true + }, + "triggered_at": { + "type": "integer", + "format": "int64", + "description": "UNIX timestamp at which this entry became triggered. Cannot be in the future.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DBConnectionBase": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of the connection. Also used as the unique identifier", + "nullable": false + }, + "dialect": { + "$ref": "#/components/schemas/Dialect" + }, + "snippets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Snippet" + }, + "readOnly": true, + "description": "SQL Runner snippets for this connection", + "nullable": false + }, + "pdts_enabled": { + "type": "boolean", + "readOnly": true, + "description": "True if PDTs are enabled on this connection", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "DBConnection": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of the connection. Also used as the unique identifier", + "nullable": false + }, + "dialect": { + "$ref": "#/components/schemas/Dialect" + }, + "snippets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Snippet" + }, + "readOnly": true, + "description": "SQL Runner snippets for this connection", + "nullable": false + }, + "pdts_enabled": { + "type": "boolean", + "readOnly": true, + "description": "True if PDTs are enabled on this connection", + "nullable": false + }, + "host": { + "type": "string", + "description": "Host name/address of server", + "nullable": true + }, + "port": { + "type": "integer", + "format": "int64", + "description": "Port number on server", + "nullable": true + }, + "username": { + "type": "string", + "description": "Username for server authentication", + "nullable": true + }, + "password": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Password for server authentication", + "nullable": true + }, + "uses_oauth": { + "type": "boolean", + "readOnly": true, + "description": "Whether the connection uses OAuth for authentication.", + "nullable": false + }, + "certificate": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).", + "nullable": true + }, + "file_type": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Certificate keyfile type - .json or .p12", + "nullable": true + }, + "database": { + "type": "string", + "description": "Database name", + "nullable": true + }, + "db_timezone": { + "type": "string", + "description": "Time zone of database", + "nullable": true + }, + "query_timezone": { + "type": "string", + "description": "Timezone to use in queries", + "nullable": true + }, + "schema": { + "type": "string", + "description": "Scheme name", + "nullable": true + }, + "max_connections": { + "type": "integer", + "format": "int64", + "description": "Maximum number of concurrent connection to use", + "nullable": true + }, + "max_billing_gigabytes": { + "type": "string", + "description": "Maximum size of query in GBs (BigQuery only, can be a user_attribute name)", + "nullable": true + }, + "ssl": { + "type": "boolean", + "description": "Use SSL/TLS when connecting to server", + "nullable": false + }, + "verify_ssl": { + "type": "boolean", + "description": "Verify the SSL", + "nullable": false + }, + "tmp_db_name": { + "type": "string", + "description": "Name of temporary database (if used)", + "nullable": true + }, + "jdbc_additional_params": { + "type": "string", + "description": "Additional params to add to JDBC connection string", + "nullable": true + }, + "pool_timeout": { + "type": "integer", + "format": "int64", + "description": "Connection Pool Timeout, in seconds", + "nullable": true + }, + "dialect_name": { + "type": "string", + "description": "(Read/Write) SQL Dialect name", + "nullable": true + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Creation date for this connection", + "nullable": true + }, + "user_id": { + "type": "string", + "readOnly": true, + "description": "Id of user who last modified this connection configuration", + "nullable": true + }, + "example": { + "type": "boolean", + "readOnly": true, + "description": "Is this an example connection?", + "nullable": false + }, + "user_db_credentials": { + "type": "boolean", + "description": "(Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password", + "nullable": true + }, + "user_attribute_fields": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Fields whose values map to user attribute names", + "nullable": true + }, + "maintenance_cron": { + "type": "string", + "description": "Cron string specifying when maintenance such as PDT trigger checks and drops should be performed", + "nullable": true + }, + "last_regen_at": { + "type": "string", + "readOnly": true, + "description": "Unix timestamp at start of last completed PDT trigger check process", + "nullable": true + }, + "last_reap_at": { + "type": "string", + "readOnly": true, + "description": "Unix timestamp at start of last completed PDT reap process", + "nullable": true + }, + "sql_runner_precache_tables": { + "type": "boolean", + "description": "Precache tables in the SQL Runner", + "nullable": false + }, + "sql_writing_with_info_schema": { + "type": "boolean", + "description": "Fetch Information Schema For SQL Writing", + "nullable": false + }, + "after_connect_statements": { + "type": "string", + "description": "SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature", + "nullable": true + }, + "pdt_context_override": { + "$ref": "#/components/schemas/DBConnectionOverride" + }, + "managed": { + "type": "boolean", + "readOnly": true, + "description": "Is this connection created and managed by Looker", + "nullable": false + }, + "tunnel_id": { + "type": "string", + "description": "The Id of the ssh tunnel this connection uses", + "x-looker-undocumented": false, + "nullable": true + }, + "pdt_concurrency": { + "type": "integer", + "format": "int64", + "description": "Maximum number of threads to use to build PDTs in parallel", + "nullable": true + }, + "disable_context_comment": { + "type": "boolean", + "description": "When disable_context_comment is true comment will not be added to SQL", + "nullable": true + }, + "oauth_application_id": { + "type": "integer", + "format": "int64", + "description": "An External OAuth Application to use for authenticating to the database", + "nullable": true + }, + "always_retry_failed_builds": { + "type": "boolean", + "description": "When true, error PDTs will be retried every regenerator cycle", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DBConnectionOverride": { + "properties": { + "context": { + "type": "string", + "description": "Context in which to override (`pdt` is the only allowed value)", + "nullable": false + }, + "host": { + "type": "string", + "description": "Host name/address of server", + "nullable": true + }, + "port": { + "type": "string", + "description": "Port number on server", + "nullable": true + }, + "username": { + "type": "string", + "description": "Username for server authentication", + "nullable": true + }, + "password": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Password for server authentication", + "nullable": true + }, + "has_password": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the password is overridden in this context", + "nullable": false + }, + "certificate": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).", + "nullable": true + }, + "file_type": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Certificate keyfile type - .json or .p12", + "nullable": true + }, + "database": { + "type": "string", + "description": "Database name", + "nullable": true + }, + "schema": { + "type": "string", + "description": "Scheme name", + "nullable": true + }, + "jdbc_additional_params": { + "type": "string", + "description": "Additional params to add to JDBC connection string", + "nullable": true + }, + "after_connect_statements": { + "type": "string", + "description": "SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DBConnectionTestResult": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "connection_string": { + "type": "string", + "readOnly": true, + "description": "JDBC connection string. (only populated in the 'connect' test)", + "nullable": true + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Result message of test", + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of test", + "nullable": true + }, + "status": { + "type": "string", + "readOnly": true, + "description": "Result code of test", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "DelegateOauthTest": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Delegate Oauth Connection Name", + "nullable": false + }, + "installation_target_id": { + "type": "string", + "readOnly": true, + "description": "The ID of the installation target. For Slack, this would be workspace id.", + "nullable": false + }, + "installation_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Installation ID", + "nullable": false + }, + "success": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the test was successful", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "DependencyGraph": { + "properties": { + "graph_text": { + "type": "string", + "readOnly": true, + "description": "The graph structure in the dot language that can be rendered into an image.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "DialectInfo": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "default_max_connections": { + "type": "string", + "readOnly": true, + "description": "Default number max connections", + "nullable": true + }, + "default_port": { + "type": "string", + "readOnly": true, + "description": "Default port number", + "nullable": true + }, + "installed": { + "type": "boolean", + "readOnly": true, + "description": "Is the supporting driver installed", + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "description": "The human-readable label of the connection", + "nullable": true + }, + "label_for_database_equivalent": { + "type": "string", + "readOnly": true, + "description": "What the dialect calls the equivalent of a normal SQL table", + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "description": "The name of the dialect", + "nullable": true + }, + "supported_options": { + "$ref": "#/components/schemas/DialectInfoOptions" + } + }, + "x-looker-status": "stable" + }, + "DialectInfoOptions": { + "properties": { + "additional_params": { + "type": "boolean", + "readOnly": true, + "description": "Has additional params support", + "nullable": false + }, + "auth": { + "type": "boolean", + "readOnly": true, + "description": "Has auth support", + "nullable": false + }, + "host": { + "type": "boolean", + "readOnly": true, + "description": "Has host support", + "nullable": false + }, + "oauth_credentials": { + "type": "boolean", + "readOnly": true, + "description": "Has support for a service account", + "nullable": false + }, + "project_name": { + "type": "boolean", + "readOnly": true, + "description": "Has project name support", + "nullable": false + }, + "schema": { + "type": "boolean", + "readOnly": true, + "description": "Has schema support", + "nullable": false + }, + "ssl": { + "type": "boolean", + "readOnly": true, + "description": "Has SSL support", + "nullable": false + }, + "timezone": { + "type": "boolean", + "readOnly": true, + "description": "Has timezone support", + "nullable": false + }, + "tmp_table": { + "type": "boolean", + "readOnly": true, + "description": "Has tmp table support", + "nullable": false + }, + "username_required": { + "type": "boolean", + "readOnly": true, + "description": "Username is required", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Dialect": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "The name of the dialect", + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "description": "The human-readable label of the connection", + "nullable": false + }, + "supports_cost_estimate": { + "type": "boolean", + "readOnly": true, + "description": "Whether the dialect supports query cost estimates", + "nullable": false + }, + "persistent_table_indexes": { + "type": "string", + "readOnly": true, + "description": "PDT index columns", + "nullable": false + }, + "persistent_table_sortkeys": { + "type": "string", + "readOnly": true, + "description": "PDT sortkey columns", + "nullable": false + }, + "persistent_table_distkey": { + "type": "string", + "readOnly": true, + "description": "PDT distkey column", + "nullable": false + }, + "supports_streaming": { + "type": "boolean", + "readOnly": true, + "description": "Suports streaming results", + "nullable": false + }, + "automatically_run_sql_runner_snippets": { + "type": "boolean", + "readOnly": true, + "description": "Should SQL Runner snippets automatically be run", + "nullable": false + }, + "connection_tests": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Array of names of the tests that can be run on a connection using this dialect", + "nullable": false + }, + "supports_inducer": { + "type": "boolean", + "readOnly": true, + "description": "Is supported with the inducer (i.e. generate from sql)", + "nullable": false + }, + "supports_multiple_databases": { + "type": "boolean", + "readOnly": true, + "description": "Can multiple databases be accessed from a connection using this dialect", + "nullable": false + }, + "supports_persistent_derived_tables": { + "type": "boolean", + "readOnly": true, + "description": "Whether the dialect supports allowing Looker to build persistent derived tables", + "nullable": false + }, + "has_ssl_support": { + "type": "boolean", + "readOnly": true, + "description": "Does the database have client SSL support settable through the JDBC string explicitly?", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "DigestEmailSend": { + "properties": { + "configuration_delivered": { + "type": "boolean", + "description": "True if content was successfully generated and delivered", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "DigestEmails": { + "properties": { + "is_enabled": { + "type": "boolean", + "description": "Whether or not digest emails are enabled", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "EmbedParams": { + "properties": { + "target_url": { + "type": "string", + "format": "uri-reference", + "description": "The complete URL of the Looker UI page to display in the embed context. For example, to display the dashboard with id 34, `target_url` would look like: `https://mycompany.looker.com:9999/dashboards/34`. `target_uri` MUST contain a scheme (HTTPS), domain name, and URL path. Port must be included if it is required to reach the Looker server from browser clients. If the Looker instance is behind a load balancer or other proxy, `target_uri` must be the public-facing domain name and port required to reach the Looker instance, not the actual internal network machine name of the Looker instance.", + "nullable": false + }, + "session_length": { + "type": "integer", + "format": "int64", + "description": "Number of seconds the SSO embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).", + "nullable": true + }, + "force_logout_login": { + "type": "boolean", + "description": "When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true.", + "nullable": false + } + }, + "x-looker-status": "beta", + "required": [ + "target_url" + ] + }, + "EmbedSsoParams": { + "properties": { + "target_url": { + "type": "string", + "format": "uri-reference", + "description": "The complete URL of the Looker UI page to display in the embed context. For example, to display the dashboard with id 34, `target_url` would look like: `https://mycompany.looker.com:9999/dashboards/34`. `target_uri` MUST contain a scheme (HTTPS), domain name, and URL path. Port must be included if it is required to reach the Looker server from browser clients. If the Looker instance is behind a load balancer or other proxy, `target_uri` must be the public-facing domain name and port required to reach the Looker instance, not the actual internal network machine name of the Looker instance.", + "nullable": false + }, + "session_length": { + "type": "integer", + "format": "int64", + "description": "Number of seconds the SSO embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).", + "nullable": true + }, + "force_logout_login": { + "type": "boolean", + "description": "When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true.", + "nullable": false + }, + "external_user_id": { + "type": "string", + "description": "A value from an external system that uniquely identifies the embed user. Since the user_ids of Looker embed users may change with every embed session, external_user_id provides a way to assign a known, stable user identifier across multiple embed sessions.", + "nullable": true + }, + "first_name": { + "type": "string", + "description": "First name of the embed user. Defaults to 'Embed' if not specified", + "nullable": true + }, + "last_name": { + "type": "string", + "description": "Last name of the embed user. Defaults to 'User' if not specified", + "nullable": true + }, + "user_timezone": { + "type": "string", + "description": "Sets the user timezone for the embed user session, if the User Specific Timezones setting is enabled in the Looker admin settings. A value of `null` forces the embed user to use the Looker Application Default Timezone. You MUST omit this property from the request if the User Specific Timezones setting is disabled. Timezone values are validated against the IANA Timezone standard and can be seen in the Application Time Zone dropdown list on the Looker General Settings admin page.", + "nullable": true + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of Looker permission names to grant to the embed user. Requested permissions will be filtered to permissions allowed for embed sessions.", + "nullable": true + }, + "models": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of model names that the embed user may access", + "nullable": true + }, + "group_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "List of Looker group ids in which to enroll the embed user", + "nullable": true + }, + "external_group_id": { + "type": "string", + "description": "A unique value identifying an embed-exclusive group. Multiple embed users using the same `external_group_id` value will be able to share Looker content with each other. Content and embed users associated with the `external_group_id` will not be accessible to normal Looker users or embed users not associated with this `external_group_id`.", + "nullable": true + }, + "user_attributes": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "A dictionary of name-value pairs associating a Looker user attribute name with a value.", + "nullable": true + }, + "secret_id": { + "type": "integer", + "format": "int64", + "description": "Id of the embed secret to use to sign this SSO url. If specified, the value must be an id of a valid (active) secret defined in the Looker instance. If not specified, the URL will be signed with the newest active embed secret defined in the Looker instance.", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "target_url" + ] + }, + "EmbedUrlResponse": { + "properties": { + "url": { + "type": "string", + "readOnly": true, + "description": "The embed URL. Any modification to this string will make the URL unusable.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ExternalOauthApplication": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of this OAuth Application", + "nullable": false + }, + "name": { + "type": "string", + "description": "The name of this application. For Snowflake connections, this should be the name of the host database.", + "nullable": false + }, + "client_id": { + "type": "string", + "description": "The OAuth Client ID for this application", + "nullable": false + }, + "client_secret": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) The OAuth Client Secret for this application", + "nullable": false + }, + "dialect_name": { + "type": "string", + "description": "The database dialect for this application.", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Creation time for this application", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "FolderBase": { + "properties": { + "name": { + "type": "string", + "description": "Unique Name", + "nullable": false + }, + "parent_id": { + "type": "string", + "description": "Id of Parent. If the parent id is null, this is a root-level entry", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time the folder was created", + "nullable": true + }, + "creator_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "User Id of Creator", + "nullable": true + }, + "child_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Children Count", + "nullable": true + }, + "external_id": { + "type": "string", + "readOnly": true, + "description": "Embedder's Id if this folder was autogenerated as an embedding shared folder via 'external_group_id' in an SSO embed login", + "nullable": true + }, + "is_embed": { + "type": "boolean", + "readOnly": true, + "description": "Folder is an embed folder", + "nullable": false + }, + "is_embed_shared_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root embed shared folder", + "nullable": false + }, + "is_embed_users_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root embed users folder", + "nullable": false + }, + "is_personal": { + "type": "boolean", + "readOnly": true, + "description": "Folder is a user's personal folder", + "nullable": false + }, + "is_personal_descendant": { + "type": "boolean", + "readOnly": true, + "description": "Folder is descendant of a user's personal folder", + "nullable": false + }, + "is_shared_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root shared folder", + "nullable": false + }, + "is_users_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root user folder", + "nullable": false + }, + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "name" + ] + }, + "CreateFolder": { + "properties": { + "name": { + "type": "string", + "description": "Unique Name", + "nullable": false + }, + "parent_id": { + "type": "string", + "description": "Id of Parent. If the parent id is null, this is a root-level entry", + "nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "name", + "parent_id" + ] + }, + "UpdateFolder": { + "properties": { + "name": { + "type": "string", + "description": "Unique Name", + "nullable": false + }, + "parent_id": { + "type": "string", + "description": "Id of Parent. If the parent id is null, this is a root-level entry", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Folder": { + "properties": { + "name": { + "type": "string", + "description": "Unique Name", + "nullable": false + }, + "parent_id": { + "type": "string", + "description": "Id of Parent. If the parent id is null, this is a root-level entry", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time the space was created", + "nullable": true + }, + "creator_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "User Id of Creator", + "nullable": true + }, + "child_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Children Count", + "nullable": true + }, + "external_id": { + "type": "string", + "readOnly": true, + "description": "Embedder's Id if this folder was autogenerated as an embedding shared folder via 'external_group_id' in an SSO embed login", + "nullable": true + }, + "is_embed": { + "type": "boolean", + "readOnly": true, + "description": "Folder is an embed folder", + "nullable": false + }, + "is_embed_shared_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root embed shared folder", + "nullable": false + }, + "is_embed_users_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root embed users folder", + "nullable": false + }, + "is_personal": { + "type": "boolean", + "readOnly": true, + "description": "Folder is a user's personal folder", + "nullable": false + }, + "is_personal_descendant": { + "type": "boolean", + "readOnly": true, + "description": "Folder is descendant of a user's personal folder", + "nullable": false + }, + "is_shared_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root shared folder", + "nullable": false + }, + "is_users_root": { + "type": "boolean", + "readOnly": true, + "description": "Folder is the root user folder", + "nullable": false + }, + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "dashboards": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardBase" + }, + "readOnly": true, + "description": "Dashboards", + "nullable": true + }, + "looks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookWithDashboards" + }, + "readOnly": true, + "description": "Looks", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "name" + ] + }, + "GitBranch": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "name": { + "type": "string", + "description": "The short name on the local. Updating `name` results in `git checkout `", + "nullable": true + }, + "remote": { + "type": "string", + "readOnly": true, + "description": "The name of the remote", + "nullable": true + }, + "remote_name": { + "type": "string", + "readOnly": true, + "description": "The short name on the remote", + "nullable": true + }, + "error": { + "type": "string", + "readOnly": true, + "description": "Name of error", + "nullable": true + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Message describing an error if present", + "nullable": true + }, + "owner_name": { + "type": "string", + "readOnly": true, + "description": "Name of the owner of a personal branch", + "nullable": true + }, + "readonly": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not this branch is readonly", + "nullable": false + }, + "personal": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not this branch is a personal branch - readonly for all developers except the owner", + "nullable": false + }, + "is_local": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not a local ref exists for the branch", + "nullable": false + }, + "is_remote": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not a remote ref exists for the branch", + "nullable": false + }, + "is_production": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not this is the production branch", + "nullable": false + }, + "ahead_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of commits the local branch is ahead of the remote", + "nullable": true + }, + "behind_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of commits the local branch is behind the remote", + "nullable": true + }, + "commit_at": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "UNIX timestamp at which this branch was last committed.", + "nullable": true + }, + "ref": { + "type": "string", + "description": "The resolved ref of this branch. Updating `ref` results in `git reset --hard ``.", + "nullable": true + }, + "remote_ref": { + "type": "string", + "readOnly": true, + "description": "The resolved ref of this branch remote.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "GitConnectionTest": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Human readable string describing the test", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "A short string, uniquely naming this test", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "GitConnectionTestResult": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "A short string, uniquely naming this test", + "nullable": false + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Additional data from the test", + "nullable": true + }, + "status": { + "type": "string", + "readOnly": true, + "description": "Either 'pass' or 'fail'", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "GitStatus": { + "properties": { + "action": { + "type": "string", + "readOnly": true, + "description": "Git action: add, delete, etc", + "nullable": true + }, + "conflict": { + "type": "boolean", + "readOnly": true, + "description": "When true, changes to the local file conflict with the remote repository", + "nullable": false + }, + "revertable": { + "type": "boolean", + "readOnly": true, + "description": "When true, the file can be reverted to an earlier state", + "nullable": false + }, + "text": { + "type": "string", + "readOnly": true, + "description": "Git description of the action", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "GroupIdForGroupInclusion": { + "properties": { + "group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of group", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Group": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "can_add_to_content_metadata": { + "type": "boolean", + "description": "Group can be used in content access controls", + "nullable": false + }, + "contains_current_user": { + "type": "boolean", + "readOnly": true, + "description": "Currently logged in user is group member", + "nullable": false + }, + "external_group_id": { + "type": "string", + "readOnly": true, + "description": "External Id group if embed group", + "nullable": true + }, + "externally_managed": { + "type": "boolean", + "readOnly": true, + "description": "Group membership controlled outside of Looker", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "include_by_default": { + "type": "boolean", + "readOnly": true, + "description": "New users are added to this group by default", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of group", + "nullable": true + }, + "user_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of users included in this group", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "GroupSearch": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "can_add_to_content_metadata": { + "type": "boolean", + "description": "Group can be used in content access controls", + "nullable": false + }, + "contains_current_user": { + "type": "boolean", + "readOnly": true, + "description": "Currently logged in user is group member", + "nullable": false + }, + "external_group_id": { + "type": "string", + "readOnly": true, + "description": "External Id group if embed group", + "nullable": true + }, + "externally_managed": { + "type": "boolean", + "readOnly": true, + "description": "Group membership controlled outside of Looker", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "include_by_default": { + "type": "boolean", + "readOnly": true, + "description": "New users are added to this group by default", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of group", + "nullable": true + }, + "user_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of users included in this group", + "nullable": true + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "readOnly": true, + "description": "Roles assigned to group", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "GroupHierarchy": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "can_add_to_content_metadata": { + "type": "boolean", + "description": "Group can be used in content access controls", + "nullable": false + }, + "contains_current_user": { + "type": "boolean", + "readOnly": true, + "description": "Currently logged in user is group member", + "nullable": false + }, + "external_group_id": { + "type": "string", + "readOnly": true, + "description": "External Id group if embed group", + "nullable": true + }, + "externally_managed": { + "type": "boolean", + "readOnly": true, + "description": "Group membership controlled outside of Looker", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "include_by_default": { + "type": "boolean", + "readOnly": true, + "description": "New users are added to this group by default", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of group", + "nullable": true + }, + "user_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of users included in this group", + "nullable": true + }, + "parent_group_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "readOnly": true, + "description": "IDs of parents of this group", + "nullable": true + }, + "role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "readOnly": true, + "description": "Role IDs assigned to group", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "GroupIdForGroupUserInclusion": { + "properties": { + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of user", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ImportedProject": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Dependency name", + "nullable": true + }, + "url": { + "type": "string", + "readOnly": true, + "description": "Url for a remote dependency", + "nullable": true + }, + "ref": { + "type": "string", + "readOnly": true, + "description": "Ref for a remote dependency", + "nullable": true + }, + "is_remote": { + "type": "boolean", + "readOnly": true, + "description": "Flag signifying if a dependency is remote or local", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "IntegrationHub": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the hub.", + "nullable": false + }, + "url": { + "type": "string", + "description": "URL of the hub.", + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Label of the hub.", + "nullable": false + }, + "official": { + "type": "boolean", + "readOnly": true, + "description": "Whether this hub is a first-party integration hub operated by Looker.", + "nullable": false + }, + "fetch_error_message": { + "type": "string", + "readOnly": true, + "description": "An error message, present if the integration hub metadata could not be fetched. If this is present, the integration hub is unusable.", + "nullable": true + }, + "authorization_token": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) An authorization key that will be sent to the integration hub on every request.", + "nullable": true + }, + "has_authorization_token": { + "type": "boolean", + "readOnly": true, + "description": "Whether the authorization_token is set for the hub.", + "nullable": false + }, + "legal_agreement_signed": { + "type": "boolean", + "readOnly": true, + "description": "Whether the legal agreement message has been signed by the user. This only matters if legal_agreement_required is true.", + "nullable": false + }, + "legal_agreement_required": { + "type": "boolean", + "readOnly": true, + "description": "Whether the legal terms for the integration hub are required before use.", + "nullable": false + }, + "legal_agreement_text": { + "type": "string", + "readOnly": true, + "description": "The legal agreement text for this integration hub.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Integration": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "ID of the integration.", + "nullable": false + }, + "integration_hub_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the integration hub.", + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Label for the integration.", + "nullable": false + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description of the integration.", + "nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Whether the integration is available to users.", + "nullable": false + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IntegrationParam" + }, + "description": "Array of params for the integration.", + "nullable": false + }, + "supported_formats": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "enum": [ + "txt", + "csv", + "inline_json", + "json", + "json_label", + "json_detail", + "json_detail_lite_stream", + "xlsx", + "html", + "wysiwyg_pdf", + "assembled_pdf", + "wysiwyg_png", + "csv_zip" + ], + "description": "A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: \"txt\", \"csv\", \"inline_json\", \"json\", \"json_label\", \"json_detail\", \"json_detail_lite_stream\", \"xlsx\", \"html\", \"wysiwyg_pdf\", \"assembled_pdf\", \"wysiwyg_png\", \"csv_zip\".", + "nullable": false + }, + "supported_action_types": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "enum": [ + "cell", + "query", + "dashboard" + ], + "description": "A list of action types the integration supports. Valid values are: \"cell\", \"query\", \"dashboard\".", + "nullable": false + }, + "supported_formattings": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "enum": [ + "formatted", + "unformatted" + ], + "description": "A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"formatted\", \"unformatted\".", + "nullable": false + }, + "supported_visualization_formattings": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "enum": [ + "apply", + "noapply" + ], + "description": "A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"apply\", \"noapply\".", + "nullable": false + }, + "supported_download_settings": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "enum": [ + "push", + "url" + ], + "description": "A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: \"push\", \"url\".", + "nullable": false + }, + "icon_url": { + "type": "string", + "readOnly": true, + "description": "URL to an icon for the integration.", + "nullable": true + }, + "uses_oauth": { + "type": "boolean", + "readOnly": true, + "description": "Whether the integration uses oauth.", + "nullable": true + }, + "required_fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IntegrationRequiredField" + }, + "readOnly": true, + "description": "A list of descriptions of required fields that this integration is compatible with. If there are multiple entries in this list, the integration requires more than one field. If unspecified, no fields will be required.", + "nullable": false + }, + "delegate_oauth": { + "type": "boolean", + "readOnly": true, + "description": "Whether the integration uses delegate oauth, which allows federation between an integration installation scope specific entity (like org, group, and team, etc.) and Looker.", + "nullable": true + }, + "installed_delegate_oauth_targets": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "Whether the integration is available to users.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "IntegrationParam": { + "properties": { + "name": { + "type": "string", + "description": "Name of the parameter.", + "nullable": true + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Label of the parameter.", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Short description of the parameter.", + "nullable": true + }, + "required": { + "type": "boolean", + "readOnly": true, + "description": "Whether the parameter is required to be set to use the destination. If unspecified, this defaults to false.", + "nullable": false + }, + "has_value": { + "type": "boolean", + "readOnly": true, + "description": "Whether the parameter has a value set.", + "nullable": false + }, + "value": { + "type": "string", + "description": "The current value of the parameter. Always null if the value is sensitive. When writing, null values will be ignored. Set the value to an empty string to clear it.", + "nullable": true + }, + "user_attribute_name": { + "type": "string", + "description": "When present, the param's value comes from this user attribute instead of the 'value' parameter. Set to null to use the 'value'.", + "nullable": true + }, + "sensitive": { + "type": "boolean", + "readOnly": true, + "description": "Whether the parameter contains sensitive data like API credentials. If unspecified, this defaults to true.", + "nullable": true + }, + "per_user": { + "type": "boolean", + "readOnly": true, + "description": "When true, this parameter must be assigned to a user attribute in the admin panel (instead of a constant value), and that value may be updated by the user as part of the integration flow.", + "nullable": false + }, + "delegate_oauth_url": { + "type": "string", + "readOnly": true, + "description": "When present, the param represents the oauth url the user will be taken to.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "IntegrationRequiredField": { + "properties": { + "tag": { + "type": "string", + "readOnly": true, + "description": "Matches a field that has this tag.", + "nullable": true + }, + "any_tag": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "If present, supercedes 'tag' and matches a field that has any of the provided tags.", + "nullable": true + }, + "all_tags": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "If present, supercedes 'tag' and matches a field that has all of the provided tags.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "IntegrationTestResult": { + "properties": { + "success": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the test was successful", + "nullable": false + }, + "message": { + "type": "string", + "readOnly": true, + "description": "A message representing the results of the test.", + "nullable": true + }, + "delegate_oauth_result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DelegateOauthTest" + }, + "readOnly": true, + "description": "An array of connection test result for delegate oauth actions.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "InternalHelpResourcesContent": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "organization_name": { + "type": "string", + "description": "Text to display in the help menu item which will display the internal help resources", + "nullable": true + }, + "markdown_content": { + "type": "string", + "description": "Content to be displayed in the internal help resources page/modal", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "InternalHelpResources": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "enabled": { + "type": "boolean", + "description": "If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "LDAPConfig": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "alternate_email_login_allowed": { + "type": "boolean", + "description": "Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled.", + "nullable": false + }, + "auth_password": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Password for the LDAP account used to access the LDAP server", + "nullable": true + }, + "auth_requires_role": { + "type": "boolean", + "description": "Users will not be allowed to login at all unless a role for them is found in LDAP if set to true", + "nullable": false + }, + "auth_username": { + "type": "string", + "description": "Distinguished name of LDAP account used to access the LDAP server", + "nullable": true + }, + "connection_host": { + "type": "string", + "description": "LDAP server hostname", + "nullable": true + }, + "connection_port": { + "type": "string", + "description": "LDAP host port", + "nullable": true + }, + "connection_tls": { + "type": "boolean", + "description": "Use Transport Layer Security", + "nullable": false + }, + "connection_tls_no_verify": { + "type": "boolean", + "description": "Do not verify peer when using TLS", + "nullable": false + }, + "default_new_user_group_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-looker-write-only": true, + "description": "(Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP", + "nullable": true + }, + "default_new_user_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + }, + "readOnly": true, + "description": "(Read-only) Groups that will be applied to new users the first time they login via LDAP", + "nullable": true + }, + "default_new_user_role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-looker-write-only": true, + "description": "(Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP", + "nullable": true + }, + "default_new_user_roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "readOnly": true, + "description": "(Read-only) Roles that will be applied to new users the first time they login via LDAP", + "nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Enable/Disable LDAP authentication for the server", + "nullable": false + }, + "force_no_page": { + "type": "boolean", + "description": "Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it.", + "nullable": false + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LDAPGroupRead" + }, + "readOnly": true, + "description": "(Read-only) Array of mappings between LDAP Groups and Looker Roles", + "nullable": true + }, + "groups_base_dn": { + "type": "string", + "description": "Base dn for finding groups in LDAP searches", + "nullable": true + }, + "groups_finder_type": { + "type": "string", + "description": "Identifier for a strategy for how Looker will search for groups in the LDAP server", + "nullable": true + }, + "groups_member_attribute": { + "type": "string", + "description": "LDAP Group attribute that signifies the members of the groups. Most commonly 'member'", + "nullable": true + }, + "groups_objectclasses": { + "type": "string", + "description": "Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches", + "nullable": true + }, + "groups_user_attribute": { + "type": "string", + "description": "LDAP Group attribute that signifies the user in a group. Most commonly 'dn'", + "nullable": true + }, + "groups_with_role_ids": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LDAPGroupWrite" + }, + "description": "(Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids", + "nullable": true + }, + "has_auth_password": { + "type": "boolean", + "readOnly": true, + "description": "(Read-only) Has the password been set for the LDAP account used to access the LDAP server", + "nullable": false + }, + "merge_new_users_by_email": { + "type": "boolean", + "description": "Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user.", + "nullable": false + }, + "modified_at": { + "type": "string", + "readOnly": true, + "description": "When this config was last modified", + "nullable": true + }, + "modified_by": { + "type": "string", + "readOnly": true, + "description": "User id of user who last modified this config", + "nullable": true + }, + "set_roles_from_groups": { + "type": "boolean", + "description": "Set user roles in Looker based on groups from LDAP", + "nullable": false + }, + "test_ldap_password": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Test LDAP user password. For ldap tests only.", + "nullable": true + }, + "test_ldap_user": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Test LDAP user login id. For ldap tests only.", + "nullable": true + }, + "user_attribute_map_email": { + "type": "string", + "description": "Name of user record attributes used to indicate email address field", + "nullable": true + }, + "user_attribute_map_first_name": { + "type": "string", + "description": "Name of user record attributes used to indicate first name", + "nullable": true + }, + "user_attribute_map_last_name": { + "type": "string", + "description": "Name of user record attributes used to indicate last name", + "nullable": true + }, + "user_attribute_map_ldap_id": { + "type": "string", + "description": "Name of user record attributes used to indicate unique record id", + "nullable": true + }, + "user_attributes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LDAPUserAttributeRead" + }, + "readOnly": true, + "description": "(Read-only) Array of mappings between LDAP User Attributes and Looker User Attributes", + "nullable": true + }, + "user_attributes_with_ids": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LDAPUserAttributeWrite" + }, + "description": "(Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids", + "nullable": true + }, + "user_bind_base_dn": { + "type": "string", + "description": "Distinguished name of LDAP node used as the base for user searches", + "nullable": true + }, + "user_custom_filter": { + "type": "string", + "description": "(Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses.", + "nullable": true + }, + "user_id_attribute_names": { + "type": "string", + "description": "Name(s) of user record attributes used for matching user login id (comma separated list)", + "nullable": true + }, + "user_objectclass": { + "type": "string", + "description": "(Optional) Name of user record objectclass used for finding user during login id", + "nullable": true + }, + "allow_normal_group_membership": { + "type": "boolean", + "description": "Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login.", + "nullable": false + }, + "allow_roles_from_normal_groups": { + "type": "boolean", + "description": "LDAP auth'd users will be able to inherit roles from non-reflected Looker groups.", + "nullable": false + }, + "allow_direct_roles": { + "type": "boolean", + "description": "Allows roles to be directly assigned to LDAP auth'd users.", + "nullable": false + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LDAPConfigTestResult": { + "properties": { + "details": { + "type": "string", + "readOnly": true, + "description": "Additional details for error cases", + "nullable": true + }, + "issues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LDAPConfigTestIssue" + }, + "readOnly": true, + "description": "Array of issues/considerations about the result", + "nullable": true + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Short human readable test about the result", + "nullable": true + }, + "status": { + "type": "string", + "readOnly": true, + "description": "Test status code: always 'success' or 'error'", + "nullable": true + }, + "trace": { + "type": "string", + "readOnly": true, + "description": "A more detailed trace of incremental results during auth tests", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/LDAPUser" + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to ldap config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LDAPConfigTestIssue": { + "properties": { + "severity": { + "type": "string", + "readOnly": true, + "description": "Severity of the issue. Error or Warning", + "nullable": true + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Message describing the issue", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LDAPGroupRead": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "looker_group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id of group in Looker", + "nullable": true + }, + "looker_group_name": { + "type": "string", + "readOnly": true, + "description": "Name of group in Looker", + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of group in LDAP", + "nullable": true + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "readOnly": true, + "description": "Looker Roles", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to ldap config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LDAPGroupWrite": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "Unique Id", + "nullable": true + }, + "looker_group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id of group in Looker", + "nullable": true + }, + "looker_group_name": { + "type": "string", + "description": "Name of group in Looker", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of group in LDAP", + "nullable": true + }, + "role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "Looker Role Ids", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to ldap config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LDAPUserAttributeRead": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name of User Attribute in LDAP", + "nullable": true + }, + "required": { + "type": "boolean", + "readOnly": true, + "description": "Required to be in LDAP assertion for login to be allowed to succeed", + "nullable": false + }, + "user_attributes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttribute" + }, + "readOnly": true, + "description": "Looker User Attributes", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to ldap config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LDAPUserAttributeWrite": { + "properties": { + "name": { + "type": "string", + "description": "Name of User Attribute in LDAP", + "nullable": true + }, + "required": { + "type": "boolean", + "description": "Required to be in LDAP assertion for login to be allowed to succeed", + "nullable": false + }, + "user_attribute_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "Looker User Attribute Ids", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to ldap config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LDAPUser": { + "properties": { + "all_emails": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Array of user's email addresses and aliases for use in migration", + "nullable": true + }, + "attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "readOnly": true, + "description": "Dictionary of user's attributes (name/value)", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "Primary email address", + "nullable": true + }, + "first_name": { + "type": "string", + "readOnly": true, + "description": "First name", + "nullable": true + }, + "groups": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Array of user's groups (group names only)", + "nullable": true + }, + "last_name": { + "type": "string", + "readOnly": true, + "description": "Last Name", + "nullable": true + }, + "ldap_dn": { + "type": "string", + "readOnly": true, + "description": "LDAP's distinguished name for the user record", + "nullable": true + }, + "ldap_id": { + "type": "string", + "readOnly": true, + "description": "LDAP's Unique ID for the user", + "nullable": true + }, + "roles": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Array of user's roles (role names only)", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to ldap config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LegacyFeature": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description", + "nullable": true + }, + "enabled_locally": { + "type": "boolean", + "description": "Whether this feature has been enabled by a user", + "nullable": false + }, + "enabled": { + "type": "boolean", + "readOnly": true, + "description": "Whether this feature is currently enabled", + "nullable": false + }, + "disallowed_as_of_version": { + "type": "string", + "readOnly": true, + "description": "Looker version where this feature became a legacy feature", + "nullable": true + }, + "disable_on_upgrade_to_version": { + "type": "string", + "readOnly": true, + "description": "Looker version where this feature will be automatically disabled", + "nullable": true + }, + "end_of_life_version": { + "type": "string", + "readOnly": true, + "description": "Future Looker version where this feature will be removed", + "nullable": true + }, + "documentation_url": { + "type": "string", + "readOnly": true, + "description": "URL for documentation about this feature", + "nullable": true + }, + "approximate_disable_date": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Approximate date that this feature will be automatically disabled.", + "nullable": true + }, + "approximate_end_of_life_date": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Approximate date that this feature will be removed.", + "nullable": true + }, + "has_disabled_on_upgrade": { + "type": "boolean", + "readOnly": true, + "description": "Whether this legacy feature may have been automatically disabled when upgrading to the current version.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Locale": { + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "Code for Locale", + "nullable": true + }, + "native_name": { + "type": "string", + "readOnly": true, + "description": "Name of Locale in its own language", + "nullable": true + }, + "english_name": { + "type": "string", + "readOnly": true, + "description": "Name of Locale in English", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LocalizationSettings": { + "properties": { + "default_locale": { + "type": "string", + "readOnly": true, + "description": "Default locale for localization", + "nullable": true + }, + "localization_level": { + "type": "string", + "readOnly": true, + "description": "Localization level - strict or permissive", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookBasic": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Look Title", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "description": "User Id", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Look": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "title": { + "type": "string", + "description": "Look Title", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "description": "User Id", + "nullable": true + }, + "content_favorite_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content Favorite Id", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was created.", + "nullable": true + }, + "deleted": { + "type": "boolean", + "description": "Whether or not a look is 'soft' deleted.", + "nullable": false + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was deleted.", + "nullable": true + }, + "deleter_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User that deleted the look.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description", + "nullable": true + }, + "embed_url": { + "type": "string", + "readOnly": true, + "description": "Embed Url", + "nullable": true + }, + "excel_file_url": { + "type": "string", + "readOnly": true, + "description": "Excel File Url", + "nullable": true + }, + "favorite_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times favorited", + "nullable": true + }, + "google_spreadsheet_formula": { + "type": "string", + "readOnly": true, + "description": "Google Spreadsheet Formula", + "nullable": true + }, + "image_embed_url": { + "type": "string", + "readOnly": true, + "description": "Image Embed Url", + "nullable": true + }, + "is_run_on_load": { + "type": "boolean", + "description": "auto-run query when Look viewed", + "nullable": false + }, + "last_accessed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was last accessed by any user", + "nullable": true + }, + "last_updater_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User that last updated the look.", + "nullable": true + }, + "last_viewed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time last viewed in the Looker web UI", + "nullable": true + }, + "model": { + "$ref": "#/components/schemas/LookModel" + }, + "public": { + "type": "boolean", + "description": "Is Public", + "nullable": false + }, + "public_slug": { + "type": "string", + "readOnly": true, + "description": "Public Slug", + "nullable": true + }, + "public_url": { + "type": "string", + "readOnly": true, + "description": "Public Url", + "nullable": true + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Query Id", + "nullable": true + }, + "short_url": { + "type": "string", + "readOnly": true, + "description": "Short Url", + "nullable": true + }, + "folder": { + "$ref": "#/components/schemas/FolderBase" + }, + "folder_id": { + "type": "string", + "description": "Folder Id", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was updated.", + "nullable": true + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times viewed in the Looker web UI", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookWithQuery": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "title": { + "type": "string", + "description": "Look Title", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "description": "User Id", + "nullable": true + }, + "content_favorite_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content Favorite Id", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was created.", + "nullable": true + }, + "deleted": { + "type": "boolean", + "description": "Whether or not a look is 'soft' deleted.", + "nullable": false + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was deleted.", + "nullable": true + }, + "deleter_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User that deleted the look.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description", + "nullable": true + }, + "embed_url": { + "type": "string", + "readOnly": true, + "description": "Embed Url", + "nullable": true + }, + "excel_file_url": { + "type": "string", + "readOnly": true, + "description": "Excel File Url", + "nullable": true + }, + "favorite_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times favorited", + "nullable": true + }, + "google_spreadsheet_formula": { + "type": "string", + "readOnly": true, + "description": "Google Spreadsheet Formula", + "nullable": true + }, + "image_embed_url": { + "type": "string", + "readOnly": true, + "description": "Image Embed Url", + "nullable": true + }, + "is_run_on_load": { + "type": "boolean", + "description": "auto-run query when Look viewed", + "nullable": false + }, + "last_accessed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was last accessed by any user", + "nullable": true + }, + "last_updater_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User that last updated the look.", + "nullable": true + }, + "last_viewed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time last viewed in the Looker web UI", + "nullable": true + }, + "model": { + "$ref": "#/components/schemas/LookModel" + }, + "public": { + "type": "boolean", + "description": "Is Public", + "nullable": false + }, + "public_slug": { + "type": "string", + "readOnly": true, + "description": "Public Slug", + "nullable": true + }, + "public_url": { + "type": "string", + "readOnly": true, + "description": "Public Url", + "nullable": true + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Query Id", + "nullable": true + }, + "short_url": { + "type": "string", + "readOnly": true, + "description": "Short Url", + "nullable": true + }, + "folder": { + "$ref": "#/components/schemas/FolderBase" + }, + "folder_id": { + "type": "string", + "description": "Folder Id", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was updated.", + "nullable": true + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times viewed in the Looker web UI", + "nullable": true + }, + "query": { + "$ref": "#/components/schemas/Query" + }, + "url": { + "type": "string", + "readOnly": true, + "description": "Url", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookWithDashboards": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "content_metadata_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of content metadata", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "title": { + "type": "string", + "description": "Look Title", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "description": "User Id", + "nullable": true + }, + "content_favorite_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Content Favorite Id", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was created.", + "nullable": true + }, + "deleted": { + "type": "boolean", + "description": "Whether or not a look is 'soft' deleted.", + "nullable": false + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was deleted.", + "nullable": true + }, + "deleter_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User that deleted the look.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description", + "nullable": true + }, + "embed_url": { + "type": "string", + "readOnly": true, + "description": "Embed Url", + "nullable": true + }, + "excel_file_url": { + "type": "string", + "readOnly": true, + "description": "Excel File Url", + "nullable": true + }, + "favorite_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times favorited", + "nullable": true + }, + "google_spreadsheet_formula": { + "type": "string", + "readOnly": true, + "description": "Google Spreadsheet Formula", + "nullable": true + }, + "image_embed_url": { + "type": "string", + "readOnly": true, + "description": "Image Embed Url", + "nullable": true + }, + "is_run_on_load": { + "type": "boolean", + "description": "auto-run query when Look viewed", + "nullable": false + }, + "last_accessed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was last accessed by any user", + "nullable": true + }, + "last_updater_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User that last updated the look.", + "nullable": true + }, + "last_viewed_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time last viewed in the Looker web UI", + "nullable": true + }, + "model": { + "$ref": "#/components/schemas/LookModel" + }, + "public": { + "type": "boolean", + "description": "Is Public", + "nullable": false + }, + "public_slug": { + "type": "string", + "readOnly": true, + "description": "Public Slug", + "nullable": true + }, + "public_url": { + "type": "string", + "readOnly": true, + "description": "Public Url", + "nullable": true + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Query Id", + "nullable": true + }, + "short_url": { + "type": "string", + "readOnly": true, + "description": "Short Url", + "nullable": true + }, + "folder": { + "$ref": "#/components/schemas/FolderBase" + }, + "folder_id": { + "type": "string", + "description": "Folder Id", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time that the Look was updated.", + "nullable": true + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times viewed in the Looker web UI", + "nullable": true + }, + "dashboards": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardBase" + }, + "readOnly": true, + "description": "Dashboards", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookModel": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Model Id", + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Model Label", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelNavExplore": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name of the explore", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description for the explore", + "nullable": true + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Label for the explore", + "nullable": true + }, + "hidden": { + "type": "boolean", + "readOnly": true, + "description": "Is this explore marked as hidden", + "nullable": false + }, + "group_label": { + "type": "string", + "readOnly": true, + "description": "Label used to group explores in the navigation menus", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExplore": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Fully qualified explore name (model name plus explore name)", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Explore name", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description", + "nullable": true + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Label", + "nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Explore title", + "x-looker-undocumented": false, + "nullable": true + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Scopes", + "nullable": true + }, + "can_total": { + "type": "boolean", + "readOnly": true, + "description": "Can Total", + "nullable": false + }, + "can_develop": { + "type": "boolean", + "readOnly": true, + "description": "Can Develop LookML", + "x-looker-undocumented": false, + "nullable": false + }, + "can_see_lookml": { + "type": "boolean", + "readOnly": true, + "description": "Can See LookML", + "x-looker-undocumented": false, + "nullable": false + }, + "lookml_link": { + "type": "string", + "readOnly": true, + "description": "A URL linking to the definition of this explore in the LookML IDE.", + "x-looker-undocumented": false, + "nullable": true + }, + "can_save": { + "type": "boolean", + "readOnly": true, + "description": "Can Save", + "nullable": false + }, + "can_explain": { + "type": "boolean", + "readOnly": true, + "description": "Can Explain", + "nullable": false + }, + "can_pivot_in_db": { + "type": "boolean", + "readOnly": true, + "description": "Can pivot in the DB", + "nullable": false + }, + "can_subtotal": { + "type": "boolean", + "readOnly": true, + "description": "Can use subtotals", + "nullable": false + }, + "has_timezone_support": { + "type": "boolean", + "readOnly": true, + "description": "Has timezone support", + "nullable": false + }, + "supports_cost_estimate": { + "type": "boolean", + "readOnly": true, + "description": "Cost estimates supported", + "nullable": false + }, + "connection_name": { + "type": "string", + "readOnly": true, + "description": "Connection name", + "nullable": true + }, + "null_sort_treatment": { + "type": "string", + "readOnly": true, + "description": "How nulls are sorted, possible values are \"low\", \"high\", \"first\" and \"last\"", + "nullable": true + }, + "files": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "List of model source files", + "nullable": true + }, + "source_file": { + "type": "string", + "readOnly": true, + "description": "Primary source_file file", + "nullable": true + }, + "project_name": { + "type": "string", + "readOnly": true, + "description": "Name of project", + "nullable": true + }, + "model_name": { + "type": "string", + "readOnly": true, + "description": "Name of model", + "nullable": true + }, + "view_name": { + "type": "string", + "readOnly": true, + "description": "Name of view", + "nullable": true + }, + "hidden": { + "type": "boolean", + "readOnly": true, + "description": "Is hidden", + "nullable": false + }, + "sql_table_name": { + "type": "string", + "readOnly": true, + "description": "A sql_table_name expression that defines what sql table the view/explore maps onto. Example: \"prod_orders2 AS orders\" in a view named orders.", + "nullable": true + }, + "access_filter_fields": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "x-looker-deprecated": true, + "description": "(DEPRECATED) Array of access filter field names", + "nullable": true + }, + "access_filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreAccessFilter" + }, + "readOnly": true, + "description": "Access filters", + "nullable": true + }, + "aliases": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreAlias" + }, + "readOnly": true, + "description": "Aliases", + "nullable": true + }, + "always_filter": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreAlwaysFilter" + }, + "readOnly": true, + "description": "Always filter", + "nullable": true + }, + "conditionally_filter": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreConditionallyFilter" + }, + "readOnly": true, + "description": "Conditionally filter", + "nullable": true + }, + "index_fields": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Array of index fields", + "nullable": true + }, + "sets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreSet" + }, + "readOnly": true, + "description": "Sets", + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "An array of arbitrary string tags provided in the model for this explore.", + "nullable": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreError" + }, + "readOnly": true, + "description": "Errors", + "nullable": true + }, + "fields": { + "$ref": "#/components/schemas/LookmlModelExploreFieldset" + }, + "joins": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreJoins" + }, + "readOnly": true, + "description": "Views joined into this explore", + "nullable": true + }, + "group_label": { + "type": "string", + "readOnly": true, + "description": "Label used to group explores in the navigation menus", + "nullable": true + }, + "supported_measure_types": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreSupportedMeasureType" + }, + "readOnly": true, + "description": "An array of items describing which custom measure types are supported for creating a custom measure 'based_on' each possible dimension type.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreSupportedMeasureType": { + "properties": { + "dimension_type": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "measure_types": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreAccessFilter": { + "properties": { + "field": { + "type": "string", + "readOnly": true, + "description": "Field to be filtered", + "nullable": true + }, + "user_attribute": { + "type": "string", + "readOnly": true, + "description": "User attribute name", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreConditionallyFilter": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name", + "nullable": true + }, + "value": { + "type": "string", + "readOnly": true, + "description": "Value", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreAlwaysFilter": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name", + "nullable": true + }, + "value": { + "type": "string", + "readOnly": true, + "description": "Value", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreAlias": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name", + "nullable": true + }, + "value": { + "type": "string", + "readOnly": true, + "description": "Value", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreSet": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name", + "nullable": true + }, + "value": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Value set", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreError": { + "properties": { + "message": { + "type": "string", + "readOnly": true, + "description": "Error Message", + "nullable": true + }, + "details": { + "type": "any", + "format": "any", + "readOnly": true, + "description": "Details", + "nullable": true + }, + "error_pos": { + "type": "string", + "readOnly": true, + "description": "Error source location", + "nullable": true + }, + "field_error": { + "type": "boolean", + "readOnly": true, + "description": "Is this a field error", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreFieldset": { + "properties": { + "dimensions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreField" + }, + "readOnly": true, + "description": "Array of dimensions", + "nullable": true + }, + "measures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreField" + }, + "readOnly": true, + "description": "Array of measures", + "nullable": true + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreField" + }, + "readOnly": true, + "description": "Array of filters", + "nullable": true + }, + "parameters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreField" + }, + "readOnly": true, + "description": "Array of parameters", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreField": { + "properties": { + "align": { + "type": "string", + "readOnly": true, + "enum": [ + "left", + "right" + ], + "description": "The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: \"left\", \"right\".", + "nullable": false + }, + "can_filter": { + "type": "boolean", + "readOnly": true, + "description": "Whether it's possible to filter on this field.", + "nullable": false + }, + "category": { + "type": "string", + "readOnly": true, + "enum": [ + "parameter", + "filter", + "measure", + "dimension" + ], + "description": "Field category Valid values are: \"parameter\", \"filter\", \"measure\", \"dimension\".", + "nullable": true + }, + "default_filter_value": { + "type": "string", + "readOnly": true, + "description": "The default value that this field uses when filtering. Null if there is no default value.", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description", + "nullable": true + }, + "dimension_group": { + "type": "string", + "readOnly": true, + "description": "Dimension group if this field is part of a dimension group. If not, this will be null.", + "nullable": true + }, + "enumerations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreFieldEnumeration" + }, + "readOnly": true, + "description": "An array enumerating all the possible values that this field can contain. When null, there is no limit to the set of possible values this field can contain.", + "nullable": true + }, + "error": { + "type": "string", + "readOnly": true, + "description": "An error message indicating a problem with the definition of this field. If there are no errors, this will be null.", + "nullable": true + }, + "field_group_label": { + "type": "string", + "readOnly": true, + "description": "A label creating a grouping of fields. All fields with this label should be presented together when displayed in a UI.", + "nullable": true + }, + "field_group_variant": { + "type": "string", + "readOnly": true, + "description": "When presented in a field group via field_group_label, a shorter name of the field to be displayed in that context.", + "nullable": true + }, + "fill_style": { + "type": "string", + "readOnly": true, + "enum": [ + "enumeration", + "range" + ], + "description": "The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: \"enumeration\", \"range\".", + "nullable": true + }, + "fiscal_month_offset": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "An offset (in months) from the calendar start month to the fiscal start month defined in the LookML model this field belongs to.", + "nullable": false + }, + "has_allowed_values": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field has a set of allowed_values specified in LookML.", + "nullable": false + }, + "hidden": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field should be hidden from the user interface.", + "nullable": false + }, + "is_filter": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field is a filter.", + "nullable": false + }, + "is_fiscal": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field represents a fiscal time value.", + "nullable": false + }, + "is_numeric": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field is of a type that represents a numeric value.", + "nullable": false + }, + "is_timeframe": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field is of a type that represents a time value.", + "nullable": false + }, + "can_time_filter": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field can be time filtered.", + "nullable": false + }, + "time_interval": { + "$ref": "#/components/schemas/LookmlModelExploreFieldTimeInterval" + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Fully-qualified human-readable label of the field.", + "nullable": false + }, + "label_from_parameter": { + "type": "string", + "readOnly": true, + "description": "The name of the parameter that will provide a parameterized label for this field, if available in the current context.", + "nullable": true + }, + "label_short": { + "type": "string", + "readOnly": true, + "description": "The human-readable label of the field, without the view label.", + "nullable": false + }, + "lookml_link": { + "type": "string", + "readOnly": true, + "description": "A URL linking to the definition of this field in the LookML IDE.", + "nullable": true + }, + "map_layer": { + "$ref": "#/components/schemas/LookmlModelExploreFieldMapLayer" + }, + "measure": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field is a measure.", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Fully-qualified name of the field.", + "nullable": false + }, + "strict_value_format": { + "type": "boolean", + "readOnly": true, + "description": "If yes, the field will not be localized with the user attribute number_format. Defaults to no", + "nullable": false + }, + "parameter": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field is a parameter.", + "nullable": false + }, + "permanent": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field can be removed from a query.", + "nullable": true + }, + "primary_key": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not the field represents a primary key.", + "nullable": false + }, + "project_name": { + "type": "string", + "readOnly": true, + "description": "The name of the project this field is defined in.", + "nullable": true + }, + "requires_refresh_on_sort": { + "type": "boolean", + "readOnly": true, + "description": "When true, it's not possible to re-sort this field's values without re-running the SQL query, due to database logic that affects the sort.", + "nullable": false + }, + "scope": { + "type": "string", + "readOnly": true, + "description": "The LookML scope this field belongs to. The scope is typically the field's view.", + "nullable": false + }, + "sortable": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field can be sorted.", + "nullable": false + }, + "source_file": { + "type": "string", + "readOnly": true, + "description": "The path portion of source_file_path.", + "nullable": false + }, + "source_file_path": { + "type": "string", + "readOnly": true, + "description": "The fully-qualified path of the project file this field is defined in.", + "nullable": false + }, + "sql": { + "type": "string", + "readOnly": true, + "description": "SQL expression as defined in the LookML model. The SQL syntax shown here is a representation intended for auditability, and is not neccessarily an exact match for what will ultimately be run in the database. It may contain special LookML syntax or annotations that are not valid SQL. This will be null if the current user does not have the see_lookml permission for the field's model.", + "nullable": true + }, + "sql_case": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreFieldSqlCase" + }, + "readOnly": true, + "description": "An array of conditions and values that make up a SQL Case expression, as defined in the LookML model. The SQL syntax shown here is a representation intended for auditability, and is not neccessarily an exact match for what will ultimately be run in the database. It may contain special LookML syntax or annotations that are not valid SQL. This will be null if the current user does not have the see_lookml permission for the field's model.", + "nullable": true + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelExploreFieldMeasureFilters" + }, + "readOnly": true, + "description": "Array of filter conditions defined for the measure in LookML.", + "nullable": true + }, + "suggest_dimension": { + "type": "string", + "readOnly": true, + "description": "The name of the dimension to base suggest queries from.", + "nullable": false + }, + "suggest_explore": { + "type": "string", + "readOnly": true, + "description": "The name of the explore to base suggest queries from.", + "nullable": false + }, + "suggestable": { + "type": "boolean", + "readOnly": true, + "description": "Whether or not suggestions are possible for this field.", + "nullable": false + }, + "suggestions": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "If available, a list of suggestions for this field. For most fields, a suggest query is a more appropriate way to get an up-to-date list of suggestions. Or use enumerations to list all the possible values.", + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "An array of arbitrary string tags provided in the model for this field.", + "nullable": false + }, + "type": { + "type": "string", + "readOnly": true, + "description": "The LookML type of the field.", + "nullable": false + }, + "user_attribute_filter_types": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "enum": [ + "advanced_filter_string", + "advanced_filter_number", + "advanced_filter_datetime", + "string", + "number", + "datetime", + "relative_url", + "yesno", + "zipcode" + ], + "description": "An array of user attribute types that are allowed to be used in filters on this field. Valid values are: \"advanced_filter_string\", \"advanced_filter_number\", \"advanced_filter_datetime\", \"string\", \"number\", \"datetime\", \"relative_url\", \"yesno\", \"zipcode\".", + "nullable": false + }, + "value_format": { + "type": "string", + "readOnly": true, + "description": "If specified, the LookML value format string for formatting values of this field.", + "nullable": true + }, + "view": { + "type": "string", + "readOnly": true, + "description": "The name of the view this field belongs to.", + "nullable": false + }, + "view_label": { + "type": "string", + "readOnly": true, + "description": "The human-readable label of the view the field belongs to.", + "nullable": false + }, + "dynamic": { + "type": "boolean", + "readOnly": true, + "description": "Whether this field was specified in \"dynamic_fields\" and is not part of the model.", + "nullable": false + }, + "week_start_day": { + "type": "string", + "readOnly": true, + "enum": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ], + "description": "The name of the starting day of the week. Valid values are: \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"sunday\".", + "nullable": false + }, + "times_used": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of times this field has been used in queries", + "nullable": false + }, + "original_view": { + "type": "string", + "readOnly": true, + "description": "The name of the view this field is defined in. This will be different than \"view\" when the view has been joined via a different name using the \"from\" parameter.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreFieldEnumeration": { + "properties": { + "label": { + "type": "string", + "readOnly": true, + "description": "Label", + "nullable": true + }, + "value": { + "type": "any", + "format": "any", + "x-looker-polymorphic-types": [ + { + "type": "string" + }, + { + "type": "number", + "format": "float" + } + ], + "readOnly": true, + "description": "Value", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreFieldTimeInterval": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "enum": [ + "day", + "hour", + "minute", + "second", + "millisecond", + "microsecond", + "week", + "month", + "quarter", + "year" + ], + "description": "The type of time interval this field represents a grouping of. Valid values are: \"day\", \"hour\", \"minute\", \"second\", \"millisecond\", \"microsecond\", \"week\", \"month\", \"quarter\", \"year\".", + "nullable": false + }, + "count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of intervals this field represents a grouping of.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreFieldSqlCase": { + "properties": { + "value": { + "type": "string", + "readOnly": true, + "description": "SQL Case label value", + "nullable": true + }, + "condition": { + "type": "string", + "readOnly": true, + "description": "SQL Case condition expression", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreFieldMeasureFilters": { + "properties": { + "field": { + "type": "string", + "readOnly": true, + "description": "Filter field name", + "nullable": true + }, + "condition": { + "type": "string", + "readOnly": true, + "description": "Filter condition value", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreFieldMapLayer": { + "properties": { + "url": { + "type": "string", + "readOnly": true, + "description": "URL to the map layer resource.", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of the map layer, as defined in LookML.", + "nullable": false + }, + "feature_key": { + "type": "string", + "readOnly": true, + "description": "Specifies the name of the TopoJSON object that the map layer references. If not specified, use the first object..", + "nullable": true + }, + "property_key": { + "type": "string", + "readOnly": true, + "description": "Selects which property from the TopoJSON data to plot against. TopoJSON supports arbitrary metadata for each region. When null, the first matching property should be used.", + "nullable": true + }, + "property_label_key": { + "type": "string", + "readOnly": true, + "description": "Which property from the TopoJSON data to use to label the region. When null, property_key should be used.", + "nullable": true + }, + "projection": { + "type": "string", + "readOnly": true, + "description": "The preferred geographic projection of the map layer when displayed in a visualization that supports multiple geographic projections.", + "nullable": true + }, + "format": { + "type": "string", + "readOnly": true, + "enum": [ + "topojson", + "vector_tile_region" + ], + "description": "Specifies the data format of the region information. Valid values are: \"topojson\", \"vector_tile_region\".", + "nullable": false + }, + "extents_json_url": { + "type": "string", + "readOnly": true, + "description": "Specifies the URL to a JSON file that defines the geographic extents of each region available in the map layer. This data is used to automatically center the map on the available data for visualization purposes. The JSON file must be a JSON object where the keys are the mapping value of the feature (as specified by property_key) and the values are arrays of four numbers representing the west longitude, south latitude, east longitude, and north latitude extents of the region. The object must include a key for every possible value of property_key.", + "nullable": true + }, + "max_zoom_level": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The minimum zoom level that the map layer may be displayed at, for visualizations that support zooming.", + "nullable": true + }, + "min_zoom_level": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The maximum zoom level that the map layer may be displayed at, for visualizations that support zooming.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModelExploreJoins": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name of this join (and name of the view to join)", + "nullable": true + }, + "dependent_fields": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Fields referenced by the join", + "nullable": true + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Fields of the joined view to pull into this explore", + "nullable": true + }, + "foreign_key": { + "type": "string", + "readOnly": true, + "description": "Name of the dimension in this explore whose value is in the primary key of the joined view", + "nullable": true + }, + "from": { + "type": "string", + "readOnly": true, + "description": "Name of view to join", + "nullable": true + }, + "outer_only": { + "type": "boolean", + "readOnly": true, + "description": "Specifies whether all queries must use an outer join", + "nullable": true + }, + "relationship": { + "type": "string", + "readOnly": true, + "description": "many_to_one, one_to_one, one_to_many, many_to_many", + "nullable": true + }, + "required_joins": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Names of joins that must always be included in SQL queries", + "nullable": true + }, + "sql_foreign_key": { + "type": "string", + "readOnly": true, + "description": "SQL expression that produces a foreign key", + "nullable": true + }, + "sql_on": { + "type": "string", + "readOnly": true, + "description": "SQL ON expression describing the join condition", + "nullable": true + }, + "sql_table_name": { + "type": "string", + "readOnly": true, + "description": "SQL table name to join", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "The join type: left_outer, full_outer, inner, or cross", + "nullable": true + }, + "view_label": { + "type": "string", + "readOnly": true, + "description": "Label to display in UI selectors", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlModel": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "allowed_db_connection_names": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of names of connections this model is allowed to use", + "nullable": true + }, + "explores": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModelNavExplore" + }, + "readOnly": true, + "description": "Array of explores (if has_content)", + "nullable": true + }, + "has_content": { + "type": "boolean", + "readOnly": true, + "description": "Does this model declaration have have lookml content?", + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "description": "UI-friendly name for this model", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of the model. Also used as the unique identifier", + "nullable": true + }, + "project_name": { + "type": "string", + "description": "Name of project containing the model", + "nullable": true + }, + "unlimited_db_connections": { + "type": "boolean", + "description": "Is this model allowed to use all current and future connections", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "LookmlTest": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "model_name": { + "type": "string", + "readOnly": true, + "description": "Name of model containing this test.", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of this test.", + "nullable": false + }, + "explore_name": { + "type": "string", + "readOnly": true, + "description": "Name of the explore this test runs a query against", + "nullable": false + }, + "query_url_params": { + "type": "string", + "readOnly": true, + "description": "The url parameters that can be used to reproduce this test's query on an explore.", + "nullable": false + }, + "file": { + "type": "string", + "readOnly": true, + "description": "Name of the LookML file containing this test.", + "nullable": false + }, + "line": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Line number of this test in LookML.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "LookmlTestResult": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "model_name": { + "type": "string", + "readOnly": true, + "description": "Name of model containing this test.", + "nullable": false + }, + "test_name": { + "type": "string", + "readOnly": true, + "description": "Name of this test.", + "nullable": false + }, + "assertions_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of assertions in this test", + "nullable": false + }, + "assertions_failed": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of assertions passed in this test", + "nullable": false + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectError" + }, + "readOnly": true, + "description": "A list of any errors encountered by the test.", + "nullable": true + }, + "warnings": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectError" + }, + "readOnly": true, + "description": "A list of any warnings encountered by the test.", + "nullable": true + }, + "success": { + "type": "boolean", + "readOnly": true, + "description": "True if this test passsed without errors.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Manifest": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Manifest project name", + "nullable": true + }, + "imports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportedProject" + }, + "readOnly": true, + "description": "Imports for a project", + "nullable": true + }, + "localization_settings": { + "$ref": "#/components/schemas/LocalizationSettings" + } + }, + "x-looker-status": "stable" + }, + "MergeQuery": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "column_limit": { + "type": "string", + "description": "Column Limit", + "nullable": true + }, + "dynamic_fields": { + "type": "string", + "description": "Dynamic Fields", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "pivots": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Pivots", + "nullable": true + }, + "result_maker_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique to get results", + "nullable": true + }, + "sorts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Sorts", + "nullable": true + }, + "source_queries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MergeQuerySourceQuery" + }, + "description": "Source Queries defining the results to be merged.", + "nullable": true + }, + "total": { + "type": "boolean", + "description": "Total", + "nullable": false + }, + "vis_config": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Visualization Config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "MergeQuerySourceQuery": { + "properties": { + "merge_fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MergeFields" + }, + "description": "An array defining which fields of the source query are mapped onto fields of the merge query", + "nullable": true + }, + "name": { + "type": "string", + "description": "Display name", + "nullable": true + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Id of the query to merge", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "MergeFields": { + "properties": { + "field_name": { + "type": "string", + "description": "Field name to map onto in the merged results", + "nullable": true + }, + "source_field_name": { + "type": "string", + "description": "Field name from the source query", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "MobileSettings": { + "properties": { + "mobile_force_authentication": { + "type": "boolean", + "readOnly": true, + "description": "Specifies whether the force authentication option is enabled for mobile", + "nullable": false + }, + "mobile_app_integration": { + "type": "boolean", + "readOnly": true, + "description": "Specifies whether mobile access for this instance is enabled.", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "ModelSet": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "all_access": { + "type": "boolean", + "readOnly": true, + "nullable": false + }, + "built_in": { + "type": "boolean", + "readOnly": true, + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "models": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of ModelSet", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "OauthClientApp": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "client_guid": { + "type": "string", + "readOnly": true, + "description": "The globally unique id of this application", + "nullable": false + }, + "redirect_uri": { + "type": "string", + "description": "The uri with which this application will receive an auth code by browser redirect.", + "nullable": false + }, + "display_name": { + "type": "string", + "description": "The application's display name", + "nullable": false + }, + "description": { + "type": "string", + "description": "A description of the application that will be displayed to users", + "nullable": false + }, + "enabled": { + "type": "boolean", + "description": "When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused.", + "nullable": false + }, + "group_id": { + "type": "integer", + "format": "int64", + "description": "If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance", + "nullable": true + }, + "tokens_invalid_before": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "All auth codes, access tokens, and refresh tokens issued for this application prior to this date-time for ALL USERS will be invalid.", + "nullable": false + }, + "activated_users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPublic" + }, + "readOnly": true, + "description": "All users who have been activated to use this app", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "OIDCConfig": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "alternate_email_login_allowed": { + "type": "boolean", + "description": "Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled.", + "nullable": false + }, + "audience": { + "type": "string", + "description": "OpenID Provider Audience", + "nullable": true + }, + "auth_requires_role": { + "type": "boolean", + "description": "Users will not be allowed to login at all unless a role for them is found in OIDC if set to true", + "nullable": false + }, + "authorization_endpoint": { + "type": "string", + "format": "uri-reference", + "description": "OpenID Provider Authorization Url", + "nullable": true + }, + "default_new_user_group_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-looker-write-only": true, + "description": "(Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC", + "nullable": true + }, + "default_new_user_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + }, + "readOnly": true, + "description": "(Read-only) Groups that will be applied to new users the first time they login via OIDC", + "nullable": true + }, + "default_new_user_role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-looker-write-only": true, + "description": "(Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC", + "nullable": true + }, + "default_new_user_roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "readOnly": true, + "description": "(Read-only) Roles that will be applied to new users the first time they login via OIDC", + "nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Enable/Disable OIDC authentication for the server", + "nullable": false + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OIDCGroupRead" + }, + "readOnly": true, + "description": "(Read-only) Array of mappings between OIDC Groups and Looker Roles", + "nullable": true + }, + "groups_attribute": { + "type": "string", + "description": "Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values'", + "nullable": true + }, + "groups_with_role_ids": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OIDCGroupWrite" + }, + "description": "(Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids", + "nullable": true + }, + "identifier": { + "type": "string", + "description": "Relying Party Identifier (provided by OpenID Provider)", + "nullable": true + }, + "issuer": { + "type": "string", + "description": "OpenID Provider Issuer", + "nullable": true + }, + "modified_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "When this config was last modified", + "nullable": true + }, + "modified_by": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "User id of user who last modified this config", + "nullable": true + }, + "new_user_migration_types": { + "type": "string", + "description": "Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google'", + "nullable": true + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of scopes to request.", + "nullable": true + }, + "secret": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Relying Party Secret (provided by OpenID Provider)", + "nullable": true + }, + "set_roles_from_groups": { + "type": "boolean", + "description": "Set user roles in Looker based on groups from OIDC", + "nullable": false + }, + "test_slug": { + "type": "string", + "readOnly": true, + "description": "Slug to identify configurations that are created in order to run a OIDC config test", + "nullable": true + }, + "token_endpoint": { + "type": "string", + "description": "OpenID Provider Token Url", + "nullable": true + }, + "user_attribute_map_email": { + "type": "string", + "description": "Name of user record attributes used to indicate email address field", + "nullable": true + }, + "user_attribute_map_first_name": { + "type": "string", + "description": "Name of user record attributes used to indicate first name", + "nullable": true + }, + "user_attribute_map_last_name": { + "type": "string", + "description": "Name of user record attributes used to indicate last name", + "nullable": true + }, + "user_attributes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OIDCUserAttributeRead" + }, + "readOnly": true, + "description": "(Read-only) Array of mappings between OIDC User Attributes and Looker User Attributes", + "nullable": true + }, + "user_attributes_with_ids": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OIDCUserAttributeWrite" + }, + "description": "(Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids", + "nullable": true + }, + "userinfo_endpoint": { + "type": "string", + "format": "uri-reference", + "description": "OpenID Provider User Information Url", + "nullable": true + }, + "allow_normal_group_membership": { + "type": "boolean", + "description": "Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login.", + "nullable": false + }, + "allow_roles_from_normal_groups": { + "type": "boolean", + "description": "OIDC auth'd users will inherit roles from non-reflected Looker groups.", + "nullable": false + }, + "allow_direct_roles": { + "type": "boolean", + "description": "Allows roles to be directly assigned to OIDC auth'd users.", + "nullable": false + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "OIDCGroupRead": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "looker_group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id of group in Looker", + "nullable": true + }, + "looker_group_name": { + "type": "string", + "readOnly": true, + "description": "Name of group in Looker", + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of group in OIDC", + "nullable": true + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "readOnly": true, + "description": "Looker Roles", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "OIDCGroupWrite": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "Unique Id", + "nullable": true + }, + "looker_group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id of group in Looker", + "nullable": true + }, + "looker_group_name": { + "type": "string", + "description": "Name of group in Looker", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of group in OIDC", + "nullable": true + }, + "role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "Looker Role Ids", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "OIDCUserAttributeRead": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name of User Attribute in OIDC", + "nullable": true + }, + "required": { + "type": "boolean", + "readOnly": true, + "description": "Required to be in OIDC assertion for login to be allowed to succeed", + "nullable": false + }, + "user_attributes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttribute" + }, + "readOnly": true, + "description": "Looker User Attributes", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "OIDCUserAttributeWrite": { + "properties": { + "name": { + "type": "string", + "description": "Name of User Attribute in OIDC", + "nullable": true + }, + "required": { + "type": "boolean", + "description": "Required to be in OIDC assertion for login to be allowed to succeed", + "nullable": false + }, + "user_attribute_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "Looker User Attribute Ids", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "PasswordConfig": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "min_length": { + "type": "integer", + "format": "int64", + "description": "Minimum number of characters required for a new password. Must be between 7 and 100", + "nullable": true + }, + "require_numeric": { + "type": "boolean", + "description": "Require at least one numeric character", + "nullable": false + }, + "require_upperlower": { + "type": "boolean", + "description": "Require at least one uppercase and one lowercase letter", + "nullable": false + }, + "require_special": { + "type": "boolean", + "description": "Require at least one special character", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Permission": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "permission": { + "type": "string", + "readOnly": true, + "description": "Permission symbol", + "nullable": true + }, + "parent": { + "type": "string", + "readOnly": true, + "description": "Dependency parent symbol", + "nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Description", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "PermissionSet": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "all_access": { + "type": "boolean", + "readOnly": true, + "nullable": false + }, + "built_in": { + "type": "boolean", + "readOnly": true, + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of PermissionSet", + "nullable": true + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ProjectFile": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "An opaque token uniquely identifying a file within a project. Avoid parsing or decomposing the text of this token. This token is stable within a Looker release but may change between Looker releases", + "nullable": false + }, + "path": { + "type": "string", + "readOnly": true, + "description": "Path, file name, and extension of the file relative to the project root directory", + "nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Display name", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "File type: model, view, etc", + "nullable": true + }, + "extension": { + "type": "string", + "readOnly": true, + "description": "The extension of the file: .view.lkml, .model.lkml, etc", + "nullable": true + }, + "mime_type": { + "type": "string", + "readOnly": true, + "description": "File mime type", + "nullable": true + }, + "editable": { + "type": "boolean", + "readOnly": true, + "description": "State of editability for the file.", + "nullable": false + }, + "git_status": { + "$ref": "#/components/schemas/GitStatus" + } + }, + "x-looker-status": "stable" + }, + "Project": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Project Id", + "nullable": false + }, + "name": { + "type": "string", + "description": "Project display name", + "nullable": false + }, + "uses_git": { + "type": "boolean", + "readOnly": true, + "description": "If true the project is configured with a git repository", + "nullable": false + }, + "git_remote_url": { + "type": "string", + "description": "Git remote repository url", + "nullable": true + }, + "git_username": { + "type": "string", + "description": "Git username for HTTPS authentication. (For production only, if using user attributes.)", + "nullable": true + }, + "git_password": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.)", + "nullable": true + }, + "git_production_branch_name": { + "type": "string", + "description": "Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher.", + "nullable": false + }, + "use_git_cookie_auth": { + "type": "boolean", + "description": "If true, the project uses a git cookie for authentication.", + "nullable": false + }, + "git_username_user_attribute": { + "type": "string", + "description": "User attribute name for username in per-user HTTPS authentication.", + "nullable": true + }, + "git_password_user_attribute": { + "type": "string", + "description": "User attribute name for password in per-user HTTPS authentication.", + "nullable": true + }, + "git_service_name": { + "type": "string", + "description": "Name of the git service provider", + "nullable": true + }, + "git_application_server_http_port": { + "type": "integer", + "format": "int64", + "description": "Port that HTTP(S) application server is running on (for PRs, file browsing, etc.)", + "nullable": true + }, + "git_application_server_http_scheme": { + "type": "string", + "description": "Scheme that is running on application server (for PRs, file browsing, etc.)", + "nullable": true + }, + "deploy_secret": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated.", + "nullable": true + }, + "unset_deploy_secret": { + "type": "boolean", + "x-looker-write-only": true, + "description": "(Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint.", + "nullable": false + }, + "pull_request_mode": { + "type": "string", + "enum": [ + "off", + "links", + "recommended", + "required" + ], + "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", + "nullable": false + }, + "validation_required": { + "type": "boolean", + "description": "Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository", + "nullable": false + }, + "git_release_mgmt_enabled": { + "type": "boolean", + "description": "If true, advanced git release management is enabled for this project", + "nullable": false + }, + "allow_warnings": { + "type": "boolean", + "description": "Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false).", + "nullable": false + }, + "is_example": { + "type": "boolean", + "readOnly": true, + "description": "If true the project is an example project and cannot be modified", + "nullable": false + }, + "dependency_status": { + "type": "string", + "description": "Status of dependencies in your manifest & lockfile", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ProjectError": { + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "A stable token that uniquely identifies this class of error, ignoring parameter values. Error message text may vary due to parameters or localization, but error codes do not. For example, a \"File not found\" error will have the same error code regardless of the filename in question or the user's display language", + "nullable": true + }, + "severity": { + "type": "string", + "readOnly": true, + "description": "Severity: fatal, error, warning, info, success", + "nullable": true + }, + "kind": { + "type": "string", + "readOnly": true, + "description": "Error classification: syntax, deprecation, model_configuration, etc", + "nullable": true + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Error message which may contain information such as dashboard or model names that may be considered sensitive in some use cases. Avoid storing or sending this message outside of Looker", + "nullable": true + }, + "field_name": { + "type": "string", + "readOnly": true, + "description": "The field associated with this error", + "nullable": true + }, + "file_path": { + "type": "string", + "readOnly": true, + "description": "Name of the file containing this error", + "nullable": true + }, + "line_number": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Line number in the file of this error", + "nullable": true + }, + "model_id": { + "type": "string", + "readOnly": true, + "description": "The model associated with this error", + "nullable": true + }, + "explore": { + "type": "string", + "readOnly": true, + "description": "The explore associated with this error", + "nullable": true + }, + "help_url": { + "type": "string", + "readOnly": true, + "description": "A link to Looker documentation about this error", + "nullable": true + }, + "params": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Error parameters", + "nullable": true + }, + "sanitized_message": { + "type": "string", + "readOnly": true, + "description": "A version of the error message that does not contain potentially sensitive information. Suitable for situations in which messages are stored or sent to consumers outside of Looker, such as external logs. Sanitized messages will display \"(?)\" where sensitive information would appear in the corresponding non-sanitized message", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ModelsNotValidated": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Model name", + "nullable": true + }, + "project_file_id": { + "type": "string", + "readOnly": true, + "description": "Project file", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ProjectValidation": { + "properties": { + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectError" + }, + "readOnly": true, + "description": "A list of project errors", + "nullable": true + }, + "project_digest": { + "type": "string", + "readOnly": true, + "description": "A hash value computed from the project's current state", + "nullable": true + }, + "models_not_validated": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelsNotValidated" + }, + "readOnly": true, + "description": "A list of models which were not fully validated", + "nullable": true + }, + "computation_time": { + "type": "number", + "format": "float", + "readOnly": true, + "description": "Duration of project validation in seconds", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ProjectValidationCache": { + "properties": { + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectError" + }, + "readOnly": true, + "description": "A list of project errors", + "nullable": true + }, + "project_digest": { + "type": "string", + "readOnly": true, + "description": "A hash value computed from the project's current state", + "nullable": true + }, + "models_not_validated": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelsNotValidated" + }, + "readOnly": true, + "description": "A list of models which were not fully validated", + "nullable": true + }, + "computation_time": { + "type": "number", + "format": "float", + "readOnly": true, + "description": "Duration of project validation in seconds", + "nullable": true + }, + "stale": { + "type": "boolean", + "readOnly": true, + "description": "If true, the cached project validation results are no longer accurate because the project has changed since the cached results were calculated", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ProjectWorkspace": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "project_id": { + "type": "string", + "readOnly": true, + "description": "The id of the project", + "nullable": true + }, + "workspace_id": { + "type": "string", + "readOnly": true, + "description": "The id of the local workspace containing the project files", + "nullable": true + }, + "git_status": { + "type": "string", + "readOnly": true, + "description": "The status of the local git directory", + "nullable": true + }, + "git_head": { + "type": "string", + "readOnly": true, + "description": "Git head revision name", + "nullable": true + }, + "dependency_status": { + "type": "string", + "readOnly": true, + "enum": [ + "lock_optional", + "lock_required", + "lock_error", + "install_none" + ], + "description": "Status of the dependencies in your project. Valid values are: \"lock_optional\", \"lock_required\", \"lock_error\", \"install_none\".", + "nullable": true + }, + "git_branch": { + "$ref": "#/components/schemas/GitBranch" + }, + "lookml_type": { + "type": "string", + "readOnly": true, + "description": "The lookml syntax used by all files in this project", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Query": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "model": { + "type": "string", + "description": "Model", + "nullable": false + }, + "view": { + "type": "string", + "description": "Explore Name", + "nullable": false + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Fields", + "nullable": true + }, + "pivots": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Pivots", + "nullable": true + }, + "fill_fields": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Fill Fields", + "nullable": true + }, + "filters": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Filters", + "nullable": true + }, + "filter_expression": { + "type": "string", + "description": "Filter Expression", + "nullable": true + }, + "sorts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Sorting for the query results. Use the format `[\"view.field\", ...]` to sort on fields in ascending order. Use the format `[\"view.field desc\", ...]` to sort on fields in descending order. Use `[\"__UNSORTED__\"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort.", + "nullable": true + }, + "limit": { + "type": "string", + "description": "Limit", + "nullable": true + }, + "column_limit": { + "type": "string", + "description": "Column Limit", + "nullable": true + }, + "total": { + "type": "boolean", + "description": "Total", + "nullable": true + }, + "row_total": { + "type": "string", + "description": "Raw Total", + "nullable": true + }, + "subtotals": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Fields on which to run subtotals", + "nullable": true + }, + "vis_config": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A \"type\" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties.", + "nullable": true + }, + "filter_config": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over \"filters\". When creating a query or modifying an existing query, \"filter_config\" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque.", + "nullable": true + }, + "visible_ui_sections": { + "type": "string", + "description": "Visible UI Sections", + "nullable": true + }, + "slug": { + "type": "string", + "readOnly": true, + "description": "Slug", + "nullable": true + }, + "dynamic_fields": { + "type": "string", + "description": "Dynamic Fields", + "nullable": true + }, + "client_id": { + "type": "string", + "description": "Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated.", + "nullable": true + }, + "share_url": { + "type": "string", + "readOnly": true, + "description": "Share Url", + "nullable": true + }, + "expanded_share_url": { + "type": "string", + "readOnly": true, + "description": "Expanded Share Url", + "nullable": true + }, + "url": { + "type": "string", + "readOnly": true, + "description": "Expanded Url", + "nullable": true + }, + "query_timezone": { + "type": "string", + "description": "Query Timezone", + "nullable": true + }, + "has_table_calculations": { + "type": "boolean", + "readOnly": true, + "description": "Has Table Calculations", + "nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "model", + "view" + ] + }, + "CreateQueryTask": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Id of query to run", + "nullable": true + }, + "result_format": { + "type": "string", + "enum": [ + "inline_json", + "json", + "json_detail", + "json_fe", + "csv", + "html", + "md", + "txt", + "xlsx", + "gsxml" + ], + "description": "Desired async query result format. Valid values are: \"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\".", + "nullable": true + }, + "source": { + "type": "string", + "description": "Source of query task", + "nullable": true + }, + "deferred": { + "type": "boolean", + "description": "Create the task but defer execution", + "nullable": false + }, + "look_id": { + "type": "integer", + "format": "int64", + "description": "Id of look associated with query.", + "nullable": true + }, + "dashboard_id": { + "type": "string", + "description": "Id of dashboard associated with query.", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "query_id", + "result_format" + ] + }, + "QueryTask": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "query_id": { + "type": "integer", + "format": "int64", + "description": "Id of query", + "nullable": true + }, + "query": { + "$ref": "#/components/schemas/Query" + }, + "generate_links": { + "type": "boolean", + "description": "whether or not to generate links in the query response.", + "nullable": false + }, + "force_production": { + "type": "boolean", + "description": "Use production models to run query (even is user is in dev mode).", + "nullable": false + }, + "path_prefix": { + "type": "string", + "description": "Prefix to use for drill links.", + "nullable": true + }, + "cache": { + "type": "boolean", + "description": "Whether or not to use the cache", + "nullable": false + }, + "server_table_calcs": { + "type": "boolean", + "description": "Whether or not to run table calculations on the server", + "nullable": false + }, + "cache_only": { + "type": "boolean", + "description": "Retrieve any results from cache even if the results have expired.", + "nullable": false + }, + "cache_key": { + "type": "string", + "readOnly": true, + "description": "cache key used to cache query.", + "nullable": true + }, + "status": { + "type": "string", + "description": "Status of query task.", + "nullable": true + }, + "source": { + "type": "string", + "description": "Source of query task.", + "nullable": true + }, + "runtime": { + "type": "number", + "format": "float", + "readOnly": true, + "description": "Runtime of prior queries.", + "nullable": true + }, + "rebuild_pdts": { + "type": "boolean", + "description": "Rebuild PDTS used in query.", + "nullable": false + }, + "result_source": { + "type": "string", + "readOnly": true, + "description": "Source of the results of the query.", + "nullable": true + }, + "look_id": { + "type": "integer", + "format": "int64", + "description": "Id of look associated with query.", + "nullable": true + }, + "dashboard_id": { + "type": "string", + "description": "Id of dashboard associated with query.", + "nullable": true + }, + "result_format": { + "type": "string", + "readOnly": true, + "description": "The data format of the query results.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "RenderTask": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Date/Time render task was created", + "nullable": true + }, + "dashboard_filters": { + "type": "string", + "readOnly": true, + "description": "Filter values to apply to the dashboard queries, in URL query format", + "nullable": true + }, + "dashboard_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of dashboard to render", + "nullable": true + }, + "dashboard_style": { + "type": "string", + "readOnly": true, + "description": "Dashboard layout style: single_column or tiled", + "nullable": true + }, + "finalized_at": { + "type": "string", + "readOnly": true, + "description": "Date/Time render task was completed", + "nullable": true + }, + "height": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Output height in pixels. Flowed layouts may ignore this value.", + "nullable": true + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Id of this render task", + "nullable": false + }, + "look_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of look to render", + "nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "readOnly": true, + "description": "Id of lookml dashboard to render", + "nullable": true + }, + "query_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of query to render", + "nullable": true + }, + "query_runtime": { + "type": "number", + "format": "double", + "readOnly": true, + "description": "Number of seconds elapsed running queries", + "nullable": true + }, + "render_runtime": { + "type": "number", + "format": "double", + "readOnly": true, + "description": "Number of seconds elapsed rendering data", + "nullable": true + }, + "result_format": { + "type": "string", + "readOnly": true, + "description": "Output format: pdf, png, or jpg", + "nullable": true + }, + "runtime": { + "type": "number", + "format": "double", + "readOnly": true, + "description": "Total seconds elapsed for render task", + "nullable": true + }, + "status": { + "type": "string", + "readOnly": true, + "description": "Render task status: enqueued_for_query, querying, enqueued_for_render, rendering, success, failure", + "nullable": true + }, + "status_detail": { + "type": "string", + "readOnly": true, + "description": "Additional information about the current status", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The user account permissions in which the render task will execute", + "nullable": true + }, + "width": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Output width in pixels", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "CreateDashboardRenderTask": { + "properties": { + "dashboard_filters": { + "type": "string", + "description": "Filter values to apply to the dashboard queries, in URL query format", + "nullable": true + }, + "dashboard_style": { + "type": "string", + "description": "Dashboard layout style: single_column or tiled", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "RepositoryCredential": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "root_project_id": { + "type": "string", + "readOnly": true, + "description": "Root project Id", + "nullable": false + }, + "remote_url": { + "type": "string", + "readOnly": true, + "description": "Git remote repository url", + "nullable": false + }, + "git_username": { + "type": "string", + "description": "Git username for HTTPS authentication.", + "nullable": true + }, + "git_password": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) Git password for HTTPS authentication.", + "nullable": true + }, + "ssh_public_key": { + "type": "string", + "description": "Public deploy key for SSH authentication.", + "nullable": true + }, + "is_configured": { + "type": "boolean", + "readOnly": true, + "description": "Whether the credentials have been configured for the Git Repository.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "ResultMakerFilterablesListen": { + "properties": { + "dashboard_filter_name": { + "type": "string", + "description": "The name of a dashboard filter to listen to.", + "nullable": true + }, + "field": { + "type": "string", + "description": "The name of the field in the filterable to filter with the value of the dashboard filter.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ResultMakerFilterables": { + "properties": { + "model": { + "type": "string", + "readOnly": true, + "description": "The model this filterable comes from (used for field suggestions).", + "nullable": true + }, + "view": { + "type": "string", + "readOnly": true, + "description": "The view this filterable comes from (used for field suggestions).", + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "description": "The name of the filterable thing (Query or Merged Results).", + "nullable": true + }, + "listen": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResultMakerFilterablesListen" + }, + "readOnly": true, + "description": "array of dashboard_filter_name: and field: objects.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ResultMakerWithIdVisConfigAndDynamicFields": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id.", + "nullable": false + }, + "dynamic_fields": { + "type": "string", + "readOnly": true, + "description": "JSON string of dynamic field information.", + "nullable": true + }, + "filterables": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResultMakerFilterables" + }, + "readOnly": true, + "description": "array of items that can be filtered and information about them.", + "nullable": true + }, + "sorts": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Sorts of the constituent Look, Query, or Merge Query", + "nullable": true + }, + "merge_result_id": { + "type": "string", + "readOnly": true, + "description": "ID of merge result if this is a merge_result.", + "nullable": true + }, + "total": { + "type": "boolean", + "readOnly": true, + "description": "Total of the constituent Look, Query, or Merge Query", + "nullable": false + }, + "query_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of query if this is a query.", + "nullable": true + }, + "sql_query_id": { + "type": "string", + "readOnly": true, + "description": "ID of SQL Query if this is a SQL Runner Query", + "nullable": true + }, + "query": { + "$ref": "#/components/schemas/Query" + }, + "vis_config": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Vis config of the constituent Query, or Merge Query.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Role": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of Role", + "nullable": true + }, + "permission_set": { + "$ref": "#/components/schemas/PermissionSet" + }, + "permission_set_id": { + "type": "integer", + "format": "int64", + "x-looker-write-only": true, + "description": "(Write-Only) Id of permission set", + "nullable": true + }, + "model_set": { + "$ref": "#/components/schemas/ModelSet" + }, + "model_set_id": { + "type": "integer", + "format": "int64", + "x-looker-write-only": true, + "description": "(Write-Only) Id of model set", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + }, + "users_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get list of users with this role", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "RoleSearch": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of Role", + "nullable": true + }, + "permission_set": { + "$ref": "#/components/schemas/PermissionSet" + }, + "permission_set_id": { + "type": "integer", + "format": "int64", + "x-looker-write-only": true, + "description": "(Write-Only) Id of permission set", + "nullable": true + }, + "model_set": { + "$ref": "#/components/schemas/ModelSet" + }, + "model_set_id": { + "type": "integer", + "format": "int64", + "x-looker-write-only": true, + "description": "(Write-Only) Id of model set", + "nullable": true + }, + "user_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Count of users with this role", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + }, + "users_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get list of users with this role", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "RunningQueries": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "user": { + "$ref": "#/components/schemas/UserPublic" + }, + "query": { + "$ref": "#/components/schemas/Query" + }, + "sql_query": { + "$ref": "#/components/schemas/SqlQuery" + }, + "look": { + "$ref": "#/components/schemas/LookBasic" + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Date/Time Query was initiated", + "nullable": true + }, + "completed_at": { + "type": "string", + "readOnly": true, + "description": "Date/Time Query was completed", + "nullable": true + }, + "query_id": { + "type": "string", + "readOnly": true, + "description": "Query Id", + "nullable": true + }, + "source": { + "type": "string", + "readOnly": true, + "description": "Source (look, dashboard, queryrunner, explore, etc.)", + "nullable": true + }, + "node_id": { + "type": "string", + "readOnly": true, + "description": "Node Id", + "nullable": true + }, + "slug": { + "type": "string", + "readOnly": true, + "description": "Slug", + "nullable": true + }, + "query_task_id": { + "type": "string", + "readOnly": true, + "description": "ID of a Query Task", + "nullable": true + }, + "cache_key": { + "type": "string", + "readOnly": true, + "description": "Cache Key", + "nullable": true + }, + "connection_name": { + "type": "string", + "readOnly": true, + "description": "Connection", + "nullable": true + }, + "dialect": { + "type": "string", + "readOnly": true, + "description": "Dialect", + "nullable": true + }, + "connection_id": { + "type": "string", + "readOnly": true, + "description": "Connection ID", + "nullable": true + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Additional Information(Error message or verbose status)", + "nullable": true + }, + "status": { + "type": "string", + "readOnly": true, + "description": "Status description", + "nullable": true + }, + "runtime": { + "type": "number", + "format": "double", + "readOnly": true, + "description": "Number of seconds elapsed running the Query", + "nullable": true + }, + "sql": { + "type": "string", + "readOnly": true, + "description": "SQL text of the query as run", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SamlConfig": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "enabled": { + "type": "boolean", + "description": "Enable/Disable Saml authentication for the server", + "nullable": false + }, + "idp_cert": { + "type": "string", + "description": "Identity Provider Certificate (provided by IdP)", + "nullable": true + }, + "idp_url": { + "type": "string", + "description": "Identity Provider Url (provided by IdP)", + "nullable": true + }, + "idp_issuer": { + "type": "string", + "description": "Identity Provider Issuer (provided by IdP)", + "nullable": true + }, + "idp_audience": { + "type": "string", + "description": "Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP.", + "nullable": true + }, + "allowed_clock_drift": { + "type": "integer", + "format": "int64", + "description": "Count of seconds of clock drift to allow when validating timestamps of assertions.", + "nullable": true + }, + "user_attribute_map_email": { + "type": "string", + "description": "Name of user record attributes used to indicate email address field", + "nullable": true + }, + "user_attribute_map_first_name": { + "type": "string", + "description": "Name of user record attributes used to indicate first name", + "nullable": true + }, + "user_attribute_map_last_name": { + "type": "string", + "description": "Name of user record attributes used to indicate last name", + "nullable": true + }, + "new_user_migration_types": { + "type": "string", + "description": "Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google'", + "nullable": true + }, + "alternate_email_login_allowed": { + "type": "boolean", + "description": "Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled.", + "nullable": false + }, + "test_slug": { + "type": "string", + "readOnly": true, + "description": "Slug to identify configurations that are created in order to run a Saml config test", + "nullable": true + }, + "modified_at": { + "type": "string", + "readOnly": true, + "description": "When this config was last modified", + "nullable": true + }, + "modified_by": { + "type": "string", + "readOnly": true, + "description": "User id of user who last modified this config", + "nullable": true + }, + "default_new_user_roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "readOnly": true, + "description": "(Read-only) Roles that will be applied to new users the first time they login via Saml", + "nullable": true + }, + "default_new_user_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + }, + "readOnly": true, + "description": "(Read-only) Groups that will be applied to new users the first time they login via Saml", + "nullable": true + }, + "default_new_user_role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-looker-write-only": true, + "description": "(Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml", + "nullable": true + }, + "default_new_user_group_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "x-looker-write-only": true, + "description": "(Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml", + "nullable": true + }, + "set_roles_from_groups": { + "type": "boolean", + "description": "Set user roles in Looker based on groups from Saml", + "nullable": false + }, + "groups_attribute": { + "type": "string", + "description": "Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values'", + "nullable": true + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SamlGroupRead" + }, + "readOnly": true, + "description": "(Read-only) Array of mappings between Saml Groups and Looker Roles", + "nullable": true + }, + "groups_with_role_ids": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SamlGroupWrite" + }, + "description": "(Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids", + "nullable": true + }, + "auth_requires_role": { + "type": "boolean", + "description": "Users will not be allowed to login at all unless a role for them is found in Saml if set to true", + "nullable": false + }, + "user_attributes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SamlUserAttributeRead" + }, + "readOnly": true, + "description": "(Read-only) Array of mappings between Saml User Attributes and Looker User Attributes", + "nullable": true + }, + "user_attributes_with_ids": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SamlUserAttributeWrite" + }, + "description": "(Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids", + "nullable": true + }, + "groups_finder_type": { + "type": "string", + "description": "Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes']", + "nullable": true + }, + "groups_member_value": { + "type": "string", + "description": "Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes'", + "nullable": true + }, + "bypass_login_page": { + "type": "boolean", + "description": "Bypass the login page when user authentication is required. Redirect to IdP immediately instead.", + "nullable": false + }, + "allow_normal_group_membership": { + "type": "boolean", + "description": "Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login.", + "nullable": false + }, + "allow_roles_from_normal_groups": { + "type": "boolean", + "description": "SAML auth'd users will inherit roles from non-reflected Looker groups.", + "nullable": false + }, + "allow_direct_roles": { + "type": "boolean", + "description": "Allows roles to be directly assigned to SAML auth'd users.", + "nullable": false + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SamlGroupRead": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "looker_group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id of group in Looker", + "nullable": true + }, + "looker_group_name": { + "type": "string", + "readOnly": true, + "description": "Name of group in Looker", + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of group in Saml", + "nullable": true + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "readOnly": true, + "description": "Looker Roles", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to saml config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SamlGroupWrite": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "Unique Id", + "nullable": true + }, + "looker_group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id of group in Looker", + "nullable": true + }, + "looker_group_name": { + "type": "string", + "description": "Name of group in Looker", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of group in Saml", + "nullable": true + }, + "role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "Looker Role Ids", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to saml config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SamlMetadataParseResult": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "idp_issuer": { + "type": "string", + "readOnly": true, + "description": "Identify Provider Issuer", + "nullable": true + }, + "idp_url": { + "type": "string", + "readOnly": true, + "description": "Identify Provider Url", + "nullable": true + }, + "idp_cert": { + "type": "string", + "readOnly": true, + "description": "Identify Provider Certificate", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SamlUserAttributeRead": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name of User Attribute in Saml", + "nullable": true + }, + "required": { + "type": "boolean", + "readOnly": true, + "description": "Required to be in Saml assertion for login to be allowed to succeed", + "nullable": false + }, + "user_attributes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttribute" + }, + "readOnly": true, + "description": "Looker User Attributes", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to saml config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SamlUserAttributeWrite": { + "properties": { + "name": { + "type": "string", + "description": "Name of User Attribute in Saml", + "nullable": true + }, + "required": { + "type": "boolean", + "description": "Required to be in Saml assertion for login to be allowed to succeed", + "nullable": false + }, + "user_attribute_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "Looker User Attribute Ids", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to saml config", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ScheduledPlanDestination": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "scheduled_plan_id": { + "type": "integer", + "format": "int64", + "description": "Id of a scheduled plan you own", + "nullable": true + }, + "format": { + "type": "string", + "description": "The data format to send to the given destination. Supported formats vary by destination, but include: \"txt\", \"csv\", \"inline_json\", \"json\", \"json_detail\", \"xlsx\", \"html\", \"wysiwyg_pdf\", \"assembled_pdf\", \"wysiwyg_png\"", + "nullable": true + }, + "apply_formatting": { + "type": "boolean", + "description": "Are values formatted? (containing currency symbols, digit separators, etc.", + "nullable": false + }, + "apply_vis": { + "type": "boolean", + "description": "Whether visualization options are applied to the results.", + "nullable": false + }, + "address": { + "type": "string", + "description": "Address for recipient. For email e.g. 'user@example.com'. For webhooks e.g. 'https://domain/path'. For Amazon S3 e.g. 's3://bucket-name/path/'. For SFTP e.g. 'sftp://host-name/path/'. ", + "nullable": true + }, + "looker_recipient": { + "type": "boolean", + "readOnly": true, + "description": "Whether the recipient is a Looker user on the current instance (only applicable for email recipients)", + "nullable": false + }, + "type": { + "type": "string", + "description": "Type of the address ('email', 'webhook', 's3', or 'sftp')", + "nullable": true + }, + "parameters": { + "type": "string", + "description": "JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username.", + "nullable": true + }, + "secret_parameters": { + "type": "string", + "x-looker-write-only": true, + "description": "(Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password.", + "nullable": true + }, + "message": { + "type": "string", + "description": "Optional message to be included in scheduled emails", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "WriteScheduledPlan": { + "properties": { + "name": { + "type": "string", + "description": "Name of this scheduled plan", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "description": "User Id which owns this scheduled plan", + "nullable": true + }, + "run_as_recipient": { + "type": "boolean", + "description": "Whether schedule is run as recipient (only applicable for email recipients)", + "nullable": false + }, + "enabled": { + "type": "boolean", + "description": "Whether the ScheduledPlan is enabled", + "nullable": false + }, + "look_id": { + "type": "integer", + "format": "int64", + "description": "Id of a look", + "nullable": true + }, + "dashboard_id": { + "type": "integer", + "format": "int64", + "description": "Id of a dashboard", + "nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "description": "Id of a LookML dashboard", + "nullable": true + }, + "filters_string": { + "type": "string", + "description": "Query string to run look or dashboard with", + "nullable": true + }, + "dashboard_filters": { + "type": "string", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Alias for filters_string field", + "nullable": true + }, + "require_results": { + "type": "boolean", + "description": "Delivery should occur if running the dashboard or look returns results", + "nullable": false + }, + "require_no_results": { + "type": "boolean", + "description": "Delivery should occur if the dashboard look does not return results", + "nullable": false + }, + "require_change": { + "type": "boolean", + "description": "Delivery should occur if data have changed since the last run", + "nullable": false + }, + "send_all_results": { + "type": "boolean", + "description": "Will run an unlimited query and send all results.", + "nullable": false + }, + "crontab": { + "type": "string", + "description": "Vixie-Style crontab specification when to run", + "nullable": true + }, + "datagroup": { + "type": "string", + "description": "Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)", + "nullable": true + }, + "timezone": { + "type": "string", + "description": "Timezone for interpreting the specified crontab (default is Looker instance timezone)", + "nullable": true + }, + "query_id": { + "type": "string", + "description": "Query id", + "nullable": true + }, + "scheduled_plan_destination": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlanDestination" + }, + "description": "Scheduled plan destinations", + "nullable": true + }, + "run_once": { + "type": "boolean", + "description": "Whether the plan in question should only be run once (usually for testing)", + "nullable": false + }, + "include_links": { + "type": "boolean", + "description": "Whether links back to Looker should be included in this ScheduledPlan", + "nullable": false + }, + "pdf_paper_size": { + "type": "string", + "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", + "nullable": true + }, + "pdf_landscape": { + "type": "boolean", + "description": "Whether the PDF should be formatted for landscape orientation", + "nullable": false + }, + "embed": { + "type": "boolean", + "description": "Whether this schedule is in an embed context or not", + "nullable": false + }, + "color_theme": { + "type": "string", + "description": "Color scheme of the dashboard if applicable", + "nullable": true + }, + "long_tables": { + "type": "boolean", + "description": "Whether or not to expand table vis to full length", + "nullable": false + }, + "inline_table_width": { + "type": "integer", + "format": "int64", + "description": "The pixel width at which we render the inline table visualizations", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ScheduledPlan": { + "properties": { + "name": { + "type": "string", + "description": "Name of this scheduled plan", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "description": "User Id which owns this scheduled plan", + "nullable": true + }, + "run_as_recipient": { + "type": "boolean", + "description": "Whether schedule is run as recipient (only applicable for email recipients)", + "nullable": false + }, + "enabled": { + "type": "boolean", + "description": "Whether the ScheduledPlan is enabled", + "nullable": false + }, + "look_id": { + "type": "integer", + "format": "int64", + "description": "Id of a look", + "nullable": true + }, + "dashboard_id": { + "type": "integer", + "format": "int64", + "description": "Id of a dashboard", + "nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "description": "Id of a LookML dashboard", + "nullable": true + }, + "filters_string": { + "type": "string", + "description": "Query string to run look or dashboard with", + "nullable": true + }, + "dashboard_filters": { + "type": "string", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Alias for filters_string field", + "nullable": true + }, + "require_results": { + "type": "boolean", + "description": "Delivery should occur if running the dashboard or look returns results", + "nullable": false + }, + "require_no_results": { + "type": "boolean", + "description": "Delivery should occur if the dashboard look does not return results", + "nullable": false + }, + "require_change": { + "type": "boolean", + "description": "Delivery should occur if data have changed since the last run", + "nullable": false + }, + "send_all_results": { + "type": "boolean", + "description": "Will run an unlimited query and send all results.", + "nullable": false + }, + "crontab": { + "type": "string", + "description": "Vixie-Style crontab specification when to run", + "nullable": true + }, + "datagroup": { + "type": "string", + "description": "Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)", + "nullable": true + }, + "timezone": { + "type": "string", + "description": "Timezone for interpreting the specified crontab (default is Looker instance timezone)", + "nullable": true + }, + "query_id": { + "type": "string", + "description": "Query id", + "nullable": true + }, + "scheduled_plan_destination": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlanDestination" + }, + "description": "Scheduled plan destinations", + "nullable": true + }, + "run_once": { + "type": "boolean", + "description": "Whether the plan in question should only be run once (usually for testing)", + "nullable": false + }, + "include_links": { + "type": "boolean", + "description": "Whether links back to Looker should be included in this ScheduledPlan", + "nullable": false + }, + "pdf_paper_size": { + "type": "string", + "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", + "nullable": true + }, + "pdf_landscape": { + "type": "boolean", + "description": "Whether the PDF should be formatted for landscape orientation", + "nullable": false + }, + "embed": { + "type": "boolean", + "description": "Whether this schedule is in an embed context or not", + "nullable": false + }, + "color_theme": { + "type": "string", + "description": "Color scheme of the dashboard if applicable", + "nullable": true + }, + "long_tables": { + "type": "boolean", + "description": "Whether or not to expand table vis to full length", + "nullable": false + }, + "inline_table_width": { + "type": "integer", + "format": "int64", + "description": "The pixel width at which we render the inline table visualizations", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Date and time when ScheduledPlan was created", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Date and time when ScheduledPlan was last updated", + "nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Title", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/UserPublic" + }, + "next_run_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "When the ScheduledPlan will next run (null if running once)", + "nullable": true + }, + "last_run_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "When the ScheduledPlan was last run", + "nullable": true + }, + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "SchemaColumn": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Schema item name", + "nullable": true + }, + "sql_escaped_name": { + "type": "string", + "readOnly": true, + "description": "Full name of item", + "nullable": true + }, + "schema_name": { + "type": "string", + "readOnly": true, + "description": "Name of schema", + "nullable": true + }, + "data_type_database": { + "type": "string", + "readOnly": true, + "description": "SQL dialect data type", + "nullable": false + }, + "data_type": { + "type": "string", + "readOnly": true, + "description": "Data type", + "nullable": false + }, + "data_type_looker": { + "type": "string", + "readOnly": true, + "description": "Looker data type", + "nullable": false + }, + "description": { + "type": "string", + "readOnly": true, + "description": "SQL data type", + "nullable": true + }, + "column_size": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Column data size", + "nullable": true + }, + "snippets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Snippet" + }, + "readOnly": true, + "description": "SQL Runner snippets for this connection", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "SchemaTable": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Schema item name", + "nullable": true + }, + "sql_escaped_name": { + "type": "string", + "readOnly": true, + "description": "Full name of item", + "nullable": true + }, + "schema_name": { + "type": "string", + "readOnly": true, + "description": "Name of schema", + "nullable": true + }, + "rows": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of data rows", + "nullable": true + }, + "external": { + "type": "string", + "readOnly": true, + "description": "External reference???", + "nullable": true + }, + "snippets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Snippet" + }, + "readOnly": true, + "description": "SQL Runner snippets for connection", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "ConnectionFeatures": { + "properties": { + "dialect_name": { + "type": "string", + "readOnly": true, + "description": "Name of the dialect for this connection", + "nullable": false + }, + "cost_estimate": { + "type": "boolean", + "readOnly": true, + "description": "True for cost estimating support", + "nullable": false + }, + "multiple_databases": { + "type": "boolean", + "readOnly": true, + "description": "True for multiple database support", + "nullable": false + }, + "column_search": { + "type": "boolean", + "readOnly": true, + "description": "True for cost estimating support", + "nullable": false + }, + "persistent_table_indexes": { + "type": "boolean", + "readOnly": true, + "description": "True for secondary index support", + "nullable": false + }, + "persistent_derived_tables": { + "type": "boolean", + "readOnly": true, + "description": "True for persistent derived table support", + "nullable": false + }, + "turtles": { + "type": "boolean", + "readOnly": true, + "description": "True for turtles support", + "nullable": false + }, + "percentile": { + "type": "boolean", + "readOnly": true, + "description": "True for percentile support", + "nullable": false + }, + "distinct_percentile": { + "type": "boolean", + "readOnly": true, + "description": "True for distinct percentile support", + "nullable": false + }, + "stable_views": { + "type": "boolean", + "readOnly": true, + "description": "True for stable views support", + "nullable": false + }, + "milliseconds": { + "type": "boolean", + "readOnly": true, + "description": "True for millisecond support", + "nullable": false + }, + "microseconds": { + "type": "boolean", + "readOnly": true, + "description": "True for microsecond support", + "nullable": false + }, + "subtotals": { + "type": "boolean", + "readOnly": true, + "description": "True for subtotal support", + "nullable": false + }, + "location": { + "type": "boolean", + "readOnly": true, + "description": "True for geographic location support", + "nullable": false + }, + "timezone": { + "type": "boolean", + "readOnly": true, + "description": "True for timezone conversion in query support", + "nullable": false + }, + "connection_pooling": { + "type": "boolean", + "readOnly": true, + "description": "True for connection pooling support", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "Schema": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Schema name", + "nullable": false + }, + "is_default": { + "type": "boolean", + "readOnly": true, + "description": "True if this is the default schema", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "SchemaTables": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Schema name", + "nullable": false + }, + "is_default": { + "type": "boolean", + "readOnly": true, + "description": "True if this is the default schema", + "nullable": false + }, + "tables": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaTable" + }, + "readOnly": true, + "description": "Tables for this schema", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "SchemaColumns": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Schema item name", + "nullable": true + }, + "sql_escaped_name": { + "type": "string", + "readOnly": true, + "description": "Full name of item", + "nullable": true + }, + "schema_name": { + "type": "string", + "readOnly": true, + "description": "Name of schema", + "nullable": true + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaColumn" + }, + "readOnly": true, + "description": "Columns for this schema", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "ColumnSearch": { + "properties": { + "schema_name": { + "type": "string", + "readOnly": true, + "description": "Name of schema containing the table", + "nullable": true + }, + "table_name": { + "type": "string", + "readOnly": true, + "description": "Name of table containing the column", + "nullable": true + }, + "column_name": { + "type": "string", + "readOnly": true, + "description": "Name of column", + "nullable": true + }, + "data_type": { + "type": "string", + "readOnly": true, + "description": "Column data type", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "CreateCostEstimate": { + "properties": { + "sql": { + "type": "string", + "readOnly": true, + "description": "SQL statement to estimate", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "CostEstimate": { + "properties": { + "cost": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Cost of SQL statement", + "nullable": false + }, + "cache_hit": { + "type": "boolean", + "readOnly": true, + "description": "Does the result come from the cache?", + "nullable": false + }, + "cost_unit": { + "type": "string", + "readOnly": true, + "description": "Cost measurement size", + "nullable": false + }, + "message": { + "type": "string", + "readOnly": true, + "description": "Human-friendly message", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "ModelFieldSuggestions": { + "properties": { + "suggestions": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "List of suggestions", + "nullable": false + }, + "error": { + "type": "string", + "readOnly": true, + "description": "Error message", + "nullable": true + }, + "from_cache": { + "type": "boolean", + "readOnly": true, + "description": "True if result came from the cache", + "nullable": false + }, + "hit_limit": { + "type": "boolean", + "readOnly": true, + "description": "True if this was a hit limit", + "nullable": false + }, + "used_calcite_materialization": { + "type": "boolean", + "readOnly": true, + "description": "True if calcite was used", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "ModelNamedValueFormats": { + "properties": { + "format_string": { + "type": "string", + "readOnly": true, + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "nullable": false + }, + "strict_value_format": { + "type": "boolean", + "readOnly": true, + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "Model": { + "properties": { + "connection": { + "type": "string", + "readOnly": true, + "nullable": true + }, + "name": { + "type": "string", + "readOnly": true, + "nullable": false + }, + "value_formats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelNamedValueFormats" + }, + "readOnly": true, + "description": "Array of named value formats", + "nullable": true + } + }, + "x-looker-status": "beta" + }, + "SessionConfig": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "allow_persistent_sessions": { + "type": "boolean", + "description": "Allow users to have persistent sessions when they login", + "nullable": false + }, + "session_minutes": { + "type": "integer", + "format": "int64", + "description": "Number of minutes for user sessions. Must be between 5 and 43200", + "nullable": true + }, + "unlimited_sessions_per_user": { + "type": "boolean", + "description": "Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time).", + "nullable": false + }, + "use_inactivity_based_logout": { + "type": "boolean", + "description": "Enforce session logout for sessions that are inactive for 15 minutes.", + "nullable": false + }, + "track_session_location": { + "type": "boolean", + "description": "Track location of session when user logs in.", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Session": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "ip_address": { + "type": "string", + "readOnly": true, + "description": "IP address of user when this session was initiated", + "nullable": true + }, + "browser": { + "type": "string", + "readOnly": true, + "description": "User's browser type", + "nullable": true + }, + "operating_system": { + "type": "string", + "readOnly": true, + "description": "User's Operating System", + "nullable": true + }, + "city": { + "type": "string", + "readOnly": true, + "description": "City component of user location (derived from IP address)", + "nullable": true + }, + "state": { + "type": "string", + "readOnly": true, + "description": "State component of user location (derived from IP address)", + "nullable": true + }, + "country": { + "type": "string", + "readOnly": true, + "description": "Country component of user location (derived from IP address)", + "nullable": true + }, + "credentials_type": { + "type": "string", + "readOnly": true, + "description": "Type of credentials used for logging in this session", + "nullable": true + }, + "extended_at": { + "type": "string", + "readOnly": true, + "description": "Time when this session was last extended by the user", + "nullable": true + }, + "extended_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times this session was extended", + "nullable": true + }, + "sudo_user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Actual user in the case when this session represents one user sudo'ing as another", + "nullable": true + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Time when this session was initiated", + "nullable": true + }, + "expires_at": { + "type": "string", + "readOnly": true, + "description": "Time when this session will expire", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "Setting": { + "properties": { + "extension_framework_enabled": { + "type": "boolean", + "description": "Toggle extension framework on or off", + "nullable": false + }, + "marketplace_auto_install_enabled": { + "type": "boolean", + "description": "Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled.", + "nullable": false + }, + "marketplace_enabled": { + "type": "boolean", + "description": "Toggle marketplace on or off", + "nullable": false + }, + "whitelabel_configuration": { + "$ref": "#/components/schemas/WhitelabelConfiguration" + }, + "custom_welcome_email": { + "$ref": "#/components/schemas/CustomWelcomeEmail" + } + }, + "x-looker-status": "beta" + }, + "Snippet": { + "properties": { + "name": { + "type": "string", + "readOnly": true, + "description": "Name of the snippet", + "nullable": false + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Label of the snippet", + "nullable": false + }, + "sql": { + "type": "string", + "readOnly": true, + "description": "SQL text of the snippet", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "SqlQueryCreate": { + "properties": { + "connection_name": { + "type": "string", + "description": "Name of the db connection on which to run this query", + "nullable": true + }, + "connection_id": { + "type": "string", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Use `connection_name` instead", + "nullable": true + }, + "model_name": { + "type": "string", + "description": "Name of LookML Model (this or `connection_id` required)", + "nullable": true + }, + "sql": { + "type": "string", + "description": "SQL query", + "nullable": true + }, + "vis_config": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A \"type\" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SqlQuery": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "slug": { + "type": "string", + "readOnly": true, + "description": "The identifier of the SQL query", + "nullable": false + }, + "last_runtime": { + "type": "number", + "format": "float", + "readOnly": true, + "description": "Number of seconds this query took to run the most recent time it was run", + "nullable": true + }, + "run_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times this query has been run", + "nullable": false + }, + "browser_limit": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Maximum number of rows this query will display on the SQL Runner page", + "nullable": false + }, + "sql": { + "type": "string", + "readOnly": true, + "description": "SQL query text", + "nullable": false + }, + "last_run_at": { + "type": "string", + "readOnly": true, + "description": "The most recent time this query was run", + "nullable": true + }, + "connection": { + "$ref": "#/components/schemas/DBConnectionBase" + }, + "model_name": { + "type": "string", + "readOnly": true, + "description": "Model name this query uses", + "nullable": true + }, + "creator": { + "$ref": "#/components/schemas/UserPublic" + }, + "explore_url": { + "type": "string", + "readOnly": true, + "description": "Explore page URL for this SQL query", + "nullable": true + }, + "plaintext": { + "type": "boolean", + "readOnly": true, + "description": "Should this query be rendered as plain text", + "nullable": false + }, + "vis_config": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A \"type\" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties.", + "nullable": true + }, + "result_maker_id": { + "type": "integer", + "format": "int64", + "description": "ID of the ResultMakerLookup entry.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "SshPublicKey": { + "properties": { + "public_key": { + "type": "string", + "readOnly": true, + "description": "The SSH public key created for this instance", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "SshServer": { + "properties": { + "ssh_server_id": { + "type": "string", + "readOnly": true, + "description": "A unique id used to identify this SSH Server", + "nullable": false + }, + "ssh_server_name": { + "type": "string", + "description": "The name to identify this SSH Server", + "nullable": false + }, + "ssh_server_host": { + "type": "string", + "description": "The hostname or ip address of the SSH Server", + "nullable": false + }, + "ssh_server_port": { + "type": "integer", + "format": "int64", + "description": "The port to connect to on the SSH Server", + "nullable": false + }, + "ssh_server_user": { + "type": "string", + "description": "The username used to connect to the SSH Server", + "nullable": false + }, + "finger_print": { + "type": "string", + "readOnly": true, + "description": "The md5 fingerprint used to identify the SSH Server", + "nullable": false + }, + "sha_finger_print": { + "type": "string", + "readOnly": true, + "description": "The SHA fingerprint used to identify the SSH Server", + "nullable": false + }, + "public_key": { + "type": "string", + "readOnly": true, + "description": "The SSH public key created for this instance", + "nullable": false + }, + "status": { + "type": "string", + "readOnly": true, + "description": "The current connection status to this SSH Server", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "SshTunnel": { + "properties": { + "tunnel_id": { + "type": "string", + "readOnly": true, + "description": "Unique ID for the tunnel", + "nullable": false + }, + "ssh_server_id": { + "type": "string", + "description": "SSH Server ID", + "nullable": false + }, + "ssh_server_name": { + "type": "string", + "readOnly": true, + "description": "SSH Server name", + "nullable": false + }, + "ssh_server_host": { + "type": "string", + "readOnly": true, + "description": "SSH Server Hostname or IP Address", + "nullable": false + }, + "ssh_server_port": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "SSH Server port", + "nullable": false + }, + "ssh_server_user": { + "type": "string", + "readOnly": true, + "description": "Username used to connect to the SSH Server", + "nullable": false + }, + "last_attempt": { + "type": "string", + "readOnly": true, + "description": "Time of last connect attempt", + "nullable": false + }, + "local_host_port": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Localhost Port used by the Looker instance to connect to the remote DB", + "nullable": false + }, + "database_host": { + "type": "string", + "description": "Hostname or IP Address of the Database Server", + "nullable": false + }, + "database_port": { + "type": "integer", + "format": "int64", + "description": "Port that the Database Server is listening on", + "nullable": false + }, + "status": { + "type": "string", + "readOnly": true, + "description": "Current connection status for this Tunnel", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "ThemeSettings": { + "properties": { + "background_color": { + "type": "string", + "description": "Default background color", + "nullable": false + }, + "base_font_size": { + "type": "string", + "description": "Base font size for scaling fonts", + "nullable": true + }, + "color_collection_id": { + "type": "string", + "description": "Optional. ID of color collection to use with the theme. Use an empty string for none.", + "nullable": false + }, + "font_color": { + "type": "string", + "description": "Default font color", + "nullable": true + }, + "font_family": { + "type": "string", + "description": "Primary font family", + "nullable": false + }, + "font_source": { + "type": "string", + "description": "Source specification for font", + "nullable": true + }, + "info_button_color": { + "type": "string", + "description": "Info button color", + "nullable": false + }, + "primary_button_color": { + "type": "string", + "description": "Primary button color", + "nullable": false + }, + "show_filters_bar": { + "type": "boolean", + "description": "Toggle to show filters. Defaults to true.", + "nullable": false + }, + "show_title": { + "type": "boolean", + "description": "Toggle to show the title. Defaults to true.", + "nullable": false + }, + "text_tile_text_color": { + "type": "string", + "description": "Text color for text tiles", + "nullable": false + }, + "tile_background_color": { + "type": "string", + "description": "Background color for tiles", + "nullable": false + }, + "tile_text_color": { + "type": "string", + "description": "Text color for tiles", + "nullable": false + }, + "title_color": { + "type": "string", + "description": "Color for titles", + "nullable": false + }, + "warn_button_color": { + "type": "string", + "description": "Warning button color", + "nullable": false + }, + "tile_title_alignment": { + "type": "string", + "description": "The text alignment of tile titles (New Dashboards)", + "nullable": false + }, + "tile_shadow": { + "type": "boolean", + "description": "Toggles the tile shadow (New Dashboards)", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Theme": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "begin_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp for when this theme becomes active. Null=always", + "nullable": true + }, + "end_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp for when this theme expires. Null=never", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of theme. Can only be alphanumeric and underscores.", + "nullable": false + }, + "settings": { + "$ref": "#/components/schemas/ThemeSettings" + } + }, + "x-looker-status": "stable" + }, + "Timezone": { + "properties": { + "value": { + "type": "string", + "readOnly": true, + "description": "Timezone", + "nullable": true + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Description of timezone", + "nullable": true + }, + "group": { + "type": "string", + "readOnly": true, + "description": "Timezone group (e.g Common, Other, etc.)", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "UserAttribute": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "name": { + "type": "string", + "description": "Name of user attribute", + "nullable": true + }, + "label": { + "type": "string", + "description": "Human-friendly label for user attribute", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type of user attribute (\"string\", \"number\", \"datetime\", \"yesno\", \"zipcode\")", + "nullable": true + }, + "default_value": { + "type": "string", + "description": "Default value for when no value is set on the user", + "nullable": true + }, + "is_system": { + "type": "boolean", + "readOnly": true, + "description": "Attribute is a system default", + "nullable": false + }, + "is_permanent": { + "type": "boolean", + "readOnly": true, + "description": "Attribute is permanent and cannot be deleted", + "nullable": false + }, + "value_is_hidden": { + "type": "boolean", + "description": "If true, users will not be able to view values of this attribute", + "nullable": false + }, + "user_can_view": { + "type": "boolean", + "description": "Non-admin users can see the values of their attributes and use them in filters", + "nullable": false + }, + "user_can_edit": { + "type": "boolean", + "description": "Users can change the value of this attribute for themselves", + "nullable": false + }, + "hidden_value_domain_whitelist": { + "type": "string", + "description": "Destinations to which a hidden attribute may be sent. Once set, cannot be edited.", + "nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "name", + "label", + "type" + ] + }, + "UserAttributeGroupValue": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id of this group-attribute relation", + "nullable": false + }, + "group_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of group", + "nullable": true + }, + "user_attribute_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of user attribute", + "nullable": true + }, + "value_is_hidden": { + "type": "boolean", + "readOnly": true, + "description": "If true, the \"value\" field will be null, because the attribute settings block access to this value", + "nullable": false + }, + "rank": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Precedence for resolving value for user", + "nullable": true + }, + "value": { + "type": "string", + "readOnly": true, + "description": "Value of user attribute for group", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "UserAttributeWithValue": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of user attribute", + "nullable": true + }, + "label": { + "type": "string", + "readOnly": true, + "description": "Human-friendly label for user attribute", + "nullable": true + }, + "rank": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Precedence for setting value on user (lowest wins)", + "nullable": true + }, + "value": { + "type": "string", + "description": "Value of attribute for user", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User", + "nullable": true + }, + "user_can_edit": { + "type": "boolean", + "readOnly": true, + "description": "Can the user set this value", + "nullable": false + }, + "value_is_hidden": { + "type": "boolean", + "readOnly": true, + "description": "If true, the \"value\" field will be null, because the attribute settings block access to this value", + "nullable": false + }, + "user_attribute_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Id of User Attribute", + "nullable": true + }, + "source": { + "type": "string", + "readOnly": true, + "description": "How user got this value for this attribute", + "nullable": true + }, + "hidden_value_domain_whitelist": { + "type": "string", + "readOnly": true, + "description": "If this user attribute is hidden, whitelist of destinations to which it may be sent.", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "UserEmailOnly": { + "properties": { + "email": { + "type": "string", + "description": "Email Address", + "nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "email" + ] + }, + "UserLoginLockout": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "key": { + "type": "string", + "readOnly": true, + "description": "Hash of user's client id", + "nullable": true + }, + "auth_type": { + "type": "string", + "readOnly": true, + "description": "Authentication method for login failures", + "nullable": true + }, + "ip": { + "type": "string", + "readOnly": true, + "description": "IP address of most recent failed attempt", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "User ID", + "nullable": true + }, + "remote_id": { + "type": "string", + "readOnly": true, + "description": "Remote ID of user if using LDAP", + "nullable": true + }, + "full_name": { + "type": "string", + "readOnly": true, + "description": "User's name", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "Email address associated with the user's account", + "nullable": true + }, + "fail_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of failures that triggered the lockout", + "nullable": true + }, + "lockout_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time when lockout was triggered", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "User": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "avatar_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "URL for the avatar image (may be generic)", + "nullable": true + }, + "avatar_url_without_sizing": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "URL for the avatar image (may be generic), does not specify size", + "nullable": true + }, + "credentials_api3": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialsApi3" + }, + "readOnly": true, + "description": "API 3 credentials", + "nullable": true + }, + "credentials_email": { + "$ref": "#/components/schemas/CredentialsEmail" + }, + "credentials_embed": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialsEmbed" + }, + "readOnly": true, + "description": "Embed credentials", + "nullable": true + }, + "credentials_google": { + "$ref": "#/components/schemas/CredentialsGoogle" + }, + "credentials_ldap": { + "$ref": "#/components/schemas/CredentialsLDAP" + }, + "credentials_looker_openid": { + "$ref": "#/components/schemas/CredentialsLookerOpenid" + }, + "credentials_oidc": { + "$ref": "#/components/schemas/CredentialsOIDC" + }, + "credentials_saml": { + "$ref": "#/components/schemas/CredentialsSaml" + }, + "credentials_totp": { + "$ref": "#/components/schemas/CredentialsTotp" + }, + "display_name": { + "type": "string", + "readOnly": true, + "description": "Full name for display (available only if both first_name and last_name are set)", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "EMail address", + "nullable": true + }, + "embed_group_space_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "(Embed only) ID of user's group space based on the external_group_id optionally specified during embed user login", + "nullable": true + }, + "first_name": { + "type": "string", + "description": "First name", + "nullable": true + }, + "group_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "readOnly": true, + "description": "Array of ids of the groups for this user", + "nullable": true + }, + "home_folder_id": { + "type": "string", + "description": "ID string for user's home folder", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "is_disabled": { + "type": "boolean", + "description": "Account has been disabled", + "nullable": false + }, + "last_name": { + "type": "string", + "description": "Last name", + "nullable": true + }, + "locale": { + "type": "string", + "description": "User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example.", + "nullable": true + }, + "looker_versions": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Array of strings representing the Looker versions that this user has used (this only goes back as far as '3.54.0')", + "nullable": true + }, + "models_dir_validated": { + "type": "boolean", + "description": "User's dev workspace has been checked for presence of applicable production projects", + "nullable": true + }, + "personal_folder_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of user's personal folder", + "nullable": true + }, + "presumed_looker_employee": { + "type": "boolean", + "readOnly": true, + "description": "User is identified as an employee of Looker", + "nullable": false + }, + "role_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "readOnly": true, + "description": "Array of ids of the roles for this user", + "nullable": true + }, + "sessions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Session" + }, + "readOnly": true, + "description": "Active sessions", + "nullable": true + }, + "ui_state": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Per user dictionary of undocumented state information owned by the Looker UI.", + "nullable": true + }, + "verified_looker_employee": { + "type": "boolean", + "readOnly": true, + "description": "User is identified as an employee of Looker who has been verified via Looker corporate authentication", + "nullable": false + }, + "roles_externally_managed": { + "type": "boolean", + "readOnly": true, + "description": "User's roles are managed by an external directory like SAML or LDAP and can not be changed directly.", + "nullable": false + }, + "allow_direct_roles": { + "type": "boolean", + "readOnly": true, + "description": "User can be directly assigned a role.", + "nullable": false + }, + "allow_normal_group_membership": { + "type": "boolean", + "readOnly": true, + "description": "User can be a direct member of a normal Looker group.", + "nullable": false + }, + "allow_roles_from_normal_groups": { + "type": "boolean", + "readOnly": true, + "description": "User can inherit roles from a normal Looker group.", + "nullable": false + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "UserPublic": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "first_name": { + "type": "string", + "readOnly": true, + "description": "First Name", + "nullable": false + }, + "last_name": { + "type": "string", + "readOnly": true, + "description": "Last Name", + "nullable": false + }, + "display_name": { + "type": "string", + "readOnly": true, + "description": "Full name for display (available only if both first_name and last_name are set)", + "nullable": true + }, + "avatar_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "URL for the avatar image (may be generic)", + "nullable": false + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ApiVersionElement": { + "properties": { + "version": { + "type": "string", + "readOnly": true, + "description": "Version number as it appears in '/api/xxx/' urls", + "nullable": true + }, + "full_version": { + "type": "string", + "readOnly": true, + "description": "Full version number including minor version", + "nullable": true + }, + "status": { + "type": "string", + "readOnly": true, + "description": "Status of this version", + "nullable": true + }, + "swagger_url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Url for swagger.json for this version", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ApiVersion": { + "properties": { + "looker_release_version": { + "type": "string", + "readOnly": true, + "description": "Current Looker release version number", + "nullable": false + }, + "current_version": { + "$ref": "#/components/schemas/ApiVersionElement" + }, + "supported_versions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiVersionElement" + }, + "readOnly": true, + "description": "Array of versions supported by this Looker instance", + "nullable": false + }, + "api_server_url": { + "type": "string", + "readOnly": true, + "description": "API server base url", + "nullable": false + }, + "web_server_url": { + "type": "string", + "readOnly": true, + "description": "Web server base url", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "WelcomeEmailTest": { + "properties": { + "content": { + "type": "string", + "description": "The content that would be sent in the body of a custom welcome email", + "nullable": true + }, + "subject": { + "type": "string", + "description": "The subject that would be sent for the custom welcome email", + "nullable": true + }, + "header": { + "type": "string", + "description": "The header that would be sent in the body of a custom welcome email", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "WhitelabelConfiguration": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "logo_file": { + "type": "string", + "description": "Customer logo image. Expected base64 encoded data (write-only)", + "nullable": true + }, + "logo_url": { + "type": "string", + "readOnly": true, + "description": "Logo image url (read-only)", + "nullable": true + }, + "favicon_file": { + "type": "string", + "description": "Custom favicon image. Expected base64 encoded data (write-only)", + "nullable": true + }, + "favicon_url": { + "type": "string", + "readOnly": true, + "description": "Favicon image url (read-only)", + "nullable": true + }, + "default_title": { + "type": "string", + "description": "Default page title", + "nullable": true + }, + "show_help_menu": { + "type": "boolean", + "description": "Boolean to toggle showing help menus", + "nullable": false + }, + "show_docs": { + "type": "boolean", + "description": "Boolean to toggle showing docs", + "nullable": false + }, + "show_email_sub_options": { + "type": "boolean", + "description": "Boolean to toggle showing email subscription options.", + "nullable": false + }, + "allow_looker_mentions": { + "type": "boolean", + "description": "Boolean to toggle mentions of Looker in emails", + "nullable": false + }, + "allow_looker_links": { + "type": "boolean", + "description": "Boolean to toggle links to Looker in emails", + "nullable": false + }, + "custom_welcome_email_advanced": { + "type": "boolean", + "description": "Allow subject line and email heading customization in customized emails”", + "nullable": false + }, + "setup_mentions": { + "type": "boolean", + "description": "Remove the word Looker from appearing in the account setup page", + "nullable": false + }, + "alerts_logo": { + "type": "boolean", + "description": "Remove Looker logo from Alerts", + "nullable": false + }, + "alerts_links": { + "type": "boolean", + "description": "Remove Looker links from Alerts", + "nullable": false + }, + "folders_mentions": { + "type": "boolean", + "description": "Remove Looker mentions in home folder page when you don’t have any items saved", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "Workspace": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "string", + "readOnly": true, + "description": "The unique id of this user workspace. Predefined workspace ids include \"production\" and \"dev\"", + "nullable": false + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + }, + "readOnly": true, + "description": "The local state of each project in the workspace", + "nullable": true + } + }, + "x-looker-status": "stable" + } + } + } +} \ No newline at end of file diff --git a/swift/looker/rtl/constants.swift b/swift/looker/rtl/constants.swift index a5322df18..b19d6031b 100644 --- a/swift/looker/rtl/constants.swift +++ b/swift/looker/rtl/constants.swift @@ -51,7 +51,7 @@ extension String { } public struct Constants { - public static let lookerVersion = "21.14" + public static let lookerVersion = "21.16" public static let apiVersion = "4.0" public static let defaultApiVersion = "4.0" // Swift requires API 4.0 public static let sdkVersion = #"\#(apiVersion).\#(lookerVersion)"# diff --git a/swift/looker/sdk/methods.swift b/swift/looker/sdk/methods.swift index 63c22eb82..018f82057 100644 --- a/swift/looker/sdk/methods.swift +++ b/swift/looker/sdk/methods.swift @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ @@ -54,6 +54,10 @@ open class LookerSDK: APIMethods { * @param {Int64} offset (Optional) Number of results to skip before returning any (used with `limit`). */ offset: Int64? = nil, + /** + * @param {String} group_by (Optional) Dimension by which to order the results(`dashboard` | `owner`) + */ + group_by: String? = nil, /** * @param {String} fields (Optional) Requested fields. */ @@ -85,7 +89,7 @@ open class LookerSDK: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse<[Alert], SDKError> { let result: SDKResponse<[Alert], SDKError> = self.get("/alerts/search", - ["limit": limit, "offset": offset, "fields": fields, "disabled": disabled as Any?, "frequency": frequency, "condition_met": condition_met as Any?, "last_run_start": last_run_start, "last_run_end": last_run_end, "all_owners": all_owners as Any?], nil, options) + ["limit": limit, "offset": offset, "group_by": group_by, "fields": fields, "disabled": disabled as Any?, "frequency": frequency, "condition_met": condition_met as Any?, "last_run_start": last_run_start, "last_run_end": last_run_end, "all_owners": all_owners as Any?], nil, options) return result } @@ -219,6 +223,28 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Enqueue an Alert by ID + * + * POST /alerts/{alert_id}/enqueue -> Voidable + */ + public func enqueue_alert( + /** + * @param {Int64} alert_id ID of an alert + */ + _ alert_id: Int64, + /** + * @param {Bool} force Whether to enqueue an alert again if its already running. + */ + force: Bool? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_alert_id = encodeParam(alert_id) + let result: SDKResponse = self.post("/alerts/\(path_alert_id)/enqueue", + ["force": force as Any?], nil, options) + return result + } + // MARK ApiAuth: API Authentication @@ -1937,9 +1963,9 @@ open class LookerSDK: APIMethods { */ public func update_custom_welcome_email( /** - * @param {WriteCustomWelcomeEmail} body + * @param {CustomWelcomeEmail} body */ - _ body: WriteCustomWelcomeEmail, + _ body: CustomWelcomeEmail, /** * @param {Bool} send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving */ @@ -2147,6 +2173,7 @@ open class LookerSDK: APIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * GET /setting -> Setting */ @@ -2170,6 +2197,7 @@ open class LookerSDK: APIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -3584,58 +3612,58 @@ open class LookerSDK: APIMethods { } /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * POST /dashboards/{dashboard_id}/copy -> Dashboard + * PATCH /dashboards/{dashboard_id}/move -> Dashboard */ - public func copy_dashboard( + public func move_dashboard( /** - * @param {String} dashboard_id Dashboard id to copy. + * @param {String} dashboard_id Dashboard id to move. */ _ dashboard_id: String, /** - * @param {String} folder_id Folder id to copy to. + * @param {String} folder_id Folder id to move to. */ - folder_id: String? = nil, + _ folder_id: String, options: ITransportSettings? = nil ) -> SDKResponse { let path_dashboard_id = encodeParam(dashboard_id) - let result: SDKResponse = self.post("/dashboards/\(path_dashboard_id)/copy", + let result: SDKResponse = self.patch("/dashboards/\(path_dashboard_id)/move", ["folder_id": folder_id], nil, options) return result } /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * PATCH /dashboards/{dashboard_id}/move -> Dashboard + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. + * + * POST /dashboards/{dashboard_id}/copy -> Dashboard */ - public func move_dashboard( + public func copy_dashboard( /** - * @param {String} dashboard_id Dashboard id to move. + * @param {String} dashboard_id Dashboard id to copy. */ _ dashboard_id: String, /** - * @param {String} folder_id Folder id to move to. + * @param {String} folder_id Folder id to copy to. */ - _ folder_id: String, + folder_id: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { let path_dashboard_id = encodeParam(dashboard_id) - let result: SDKResponse = self.patch("/dashboards/\(path_dashboard_id)/move", + let result: SDKResponse = self.post("/dashboards/\(path_dashboard_id)/copy", ["folder_id": folder_id], nil, options) return result } @@ -10702,6 +10730,37 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * POST /users/{user_id}/update_emails -> User + */ + public func wipeout_user_emails( + /** + * @param {Int64} user_id Id of user + */ + _ user_id: Int64, + /** + * @param {UserEmailOnly} body + */ + _ body: UserEmailOnly, + /** + * @param {String} fields Requested fields. + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/update_emails", + ["fields": fields], try! self.encode(body), options) + return result + } + /** * Create an embed user from an external user ID * diff --git a/swift/looker/sdk/models.swift b/swift/looker/sdk/models.swift index 025850498..f38fa6369 100644 --- a/swift/looker/sdk/models.swift +++ b/swift/looker/sdk/models.swift @@ -25,7 +25,7 @@ */ /** - * 296 API models: 219 Spec, 0 Request, 58 Write, 19 Enum + * 297 API models: 220 Spec, 0 Request, 57 Write, 20 Enum */ @@ -71,14 +71,21 @@ public struct Alert: SDKModel { case cron case custom_title case dashboard_element_id + case description case destinations case field + case followed + case followable case id case is_disabled case is_public + case investigative_content_type + case _investigative_content_id = "investigative_content_id" + case investigative_content_title case _lookml_dashboard_id = "lookml_dashboard_id" case _lookml_link_id = "lookml_link_id" case owner_id + case owner_display_name case threshold case time_series_condition_state } @@ -107,6 +114,11 @@ public struct Alert: SDKModel { */ public var dashboard_element_id: Int64? + /** + * An optional description for the alert. This supplements the title + */ + public var description: String? + /** * Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` */ @@ -114,6 +126,16 @@ public struct Alert: SDKModel { public var field: AlertField? + /** + * Whether or not the user follows this alert. (read-only) + */ + public var followed: Bool? + + /** + * Whether or not the alert is followable (read-only) + */ + public var followable: Bool? + /** * ID of the alert (read-only) */ @@ -129,6 +151,25 @@ public struct Alert: SDKModel { */ public var is_public: Bool? + /** + * The type of the investigative content Valid values are: "dashboard". + */ + public var investigative_content_type: InvestigativeContentType? + + private var _investigative_content_id: AnyString? + /** + * The ID of the investigative content. For dashboards, this will be the dashboard ID + */ + public var investigative_content_id: String? { + get { _investigative_content_id?.value } + set { _investigative_content_id = newValue.map(AnyString.init) } + } + + /** + * The title of the investigative content. (read-only) + */ + public var investigative_content_title: String? + private var _lookml_dashboard_id: AnyString? /** * ID of the LookML dashboard associated with the alert @@ -152,6 +193,11 @@ public struct Alert: SDKModel { */ public var owner_id: Int64? + /** + * Alert owner's display name (read-only) + */ + public var owner_display_name: String? + /** * Value of the alert threshold */ @@ -159,20 +205,27 @@ public struct Alert: SDKModel { public var time_series_condition_state: AlertConditionState? - public init(applied_dashboard_filters: [AlertAppliedDashboardFilter]? = nil, comparison_type: ComparisonType? = nil, cron: String? = nil, custom_title: String? = nil, dashboard_element_id: Int64? = nil, destinations: [AlertDestination]? = nil, field: AlertField? = nil, id: Int64? = nil, is_disabled: Bool? = nil, is_public: Bool? = nil, lookml_dashboard_id: String? = nil, lookml_link_id: String? = nil, owner_id: Int64? = nil, threshold: Double? = nil, time_series_condition_state: AlertConditionState? = nil) { + public init(applied_dashboard_filters: [AlertAppliedDashboardFilter]? = nil, comparison_type: ComparisonType? = nil, cron: String? = nil, custom_title: String? = nil, dashboard_element_id: Int64? = nil, description: String? = nil, destinations: [AlertDestination]? = nil, field: AlertField? = nil, followed: Bool? = nil, followable: Bool? = nil, id: Int64? = nil, is_disabled: Bool? = nil, is_public: Bool? = nil, investigative_content_type: InvestigativeContentType? = nil, investigative_content_id: String? = nil, investigative_content_title: String? = nil, lookml_dashboard_id: String? = nil, lookml_link_id: String? = nil, owner_id: Int64? = nil, owner_display_name: String? = nil, threshold: Double? = nil, time_series_condition_state: AlertConditionState? = nil) { self.applied_dashboard_filters = applied_dashboard_filters self.comparison_type = comparison_type self.cron = cron self.custom_title = custom_title self.dashboard_element_id = dashboard_element_id + self.description = description self.destinations = destinations self.field = field + self.followed = followed + self.followable = followable self.id = id self.is_disabled = is_disabled self.is_public = is_public + self.investigative_content_type = investigative_content_type + self._investigative_content_id = investigative_content_id.map(AnyString.init) + self.investigative_content_title = investigative_content_title self._lookml_dashboard_id = lookml_dashboard_id.map(AnyString.init) self._lookml_link_id = lookml_link_id.map(AnyString.init) self.owner_id = owner_id + self.owner_display_name = owner_display_name self.threshold = threshold self.time_series_condition_state = time_series_condition_state } @@ -572,8 +625,7 @@ public struct BoardItem: SDKModel { case content_favorite_id case content_metadata_id case content_updated_at - case custom_image_data_base64 - case custom_image_url + case custom_description case custom_title case custom_url case dashboard_id @@ -616,14 +668,9 @@ public struct BoardItem: SDKModel { public var content_updated_at: String? /** - * (Write-Only) base64 encoded image data - */ - public var custom_image_data_base64: String? - - /** - * Custom image_url entered by the user, if present (read-only) + * Custom description entered by the user, if present */ - public var custom_image_url: String? + public var custom_description: String? /** * Custom title entered by the user, if present @@ -704,14 +751,13 @@ public struct BoardItem: SDKModel { */ public var view_count: Int64? - public init(can: StringDictionary? = nil, content_created_by: String? = nil, content_favorite_id: Int64? = nil, content_metadata_id: Int64? = nil, content_updated_at: String? = nil, custom_image_data_base64: String? = nil, custom_image_url: String? = nil, custom_title: String? = nil, custom_url: String? = nil, dashboard_id: Int64? = nil, description: String? = nil, favorite_count: Int64? = nil, board_section_id: Int64? = nil, id: Int64? = nil, image_url: String? = nil, location: String? = nil, look_id: Int64? = nil, lookml_dashboard_id: String? = nil, order: Int64? = nil, title: String? = nil, url: String? = nil, view_count: Int64? = nil) { + public init(can: StringDictionary? = nil, content_created_by: String? = nil, content_favorite_id: Int64? = nil, content_metadata_id: Int64? = nil, content_updated_at: String? = nil, custom_description: String? = nil, custom_title: String? = nil, custom_url: String? = nil, dashboard_id: Int64? = nil, description: String? = nil, favorite_count: Int64? = nil, board_section_id: Int64? = nil, id: Int64? = nil, image_url: String? = nil, location: String? = nil, look_id: Int64? = nil, lookml_dashboard_id: String? = nil, order: Int64? = nil, title: String? = nil, url: String? = nil, view_count: Int64? = nil) { self.can = can self.content_created_by = content_created_by self.content_favorite_id = content_favorite_id self.content_metadata_id = content_metadata_id self.content_updated_at = content_updated_at - self.custom_image_data_base64 = custom_image_data_base64 - self.custom_image_url = custom_image_url + self.custom_description = custom_description self.custom_title = custom_title self.custom_url = custom_url self.dashboard_id = dashboard_id @@ -3035,11 +3081,6 @@ public struct CredentialsTotp: SDKModel { } public struct CustomWelcomeEmail: SDKModel { - /** - * Operations the current user is able to perform on this object (read-only) - */ - public var can: StringDictionary? - /** * If true, custom email content will replace the default body of welcome emails */ @@ -3051,17 +3092,16 @@ public struct CustomWelcomeEmail: SDKModel { public var content: String? /** - * The text to appear in the email subject line. + * The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ public var subject: String? /** - * The text to appear in the header line of the email body. + * The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ public var header: String? - public init(can: StringDictionary? = nil, enabled: Bool? = nil, content: String? = nil, subject: String? = nil, header: String? = nil) { - self.can = can + public init(enabled: Bool? = nil, content: String? = nil, subject: String? = nil, header: String? = nil) { self.enabled = enabled self.content = content self.subject = subject @@ -3101,6 +3141,7 @@ public struct Dashboard: SDKModel { case deleter_id case edit_uri case favorite_count + case filters_bar_collapsed case last_accessed_at case last_viewed_at case load_configuration @@ -3254,6 +3295,11 @@ public struct Dashboard: SDKModel { */ public var favorite_count: Int64? + /** + * Sets the default state of the filters bar to collapsed or open + */ + public var filters_bar_collapsed: Bool? + /** * Time the dashboard was last accessed (read-only) */ @@ -3329,7 +3375,7 @@ public struct Dashboard: SDKModel { */ public var url: String? - public init(can: StringDictionary? = nil, content_favorite_id: Int64? = nil, content_metadata_id: Int64? = nil, description: String? = nil, hidden: Bool? = nil, id: String? = nil, model: LookModel? = nil, query_timezone: String? = nil, readonly: Bool? = nil, refresh_interval: String? = nil, refresh_interval_to_i: Int64? = nil, folder: FolderBase? = nil, title: String? = nil, user_id: Int64? = nil, slug: String? = nil, preferred_viewer: String? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, background_color: String? = nil, created_at: Date? = nil, crossfilter_enabled: Bool? = nil, dashboard_elements: [DashboardElement]? = nil, dashboard_filters: [DashboardFilter]? = nil, dashboard_layouts: [DashboardLayout]? = nil, deleted: Bool? = nil, deleted_at: Date? = nil, deleter_id: Int64? = nil, edit_uri: String? = nil, favorite_count: Int64? = nil, last_accessed_at: Date? = nil, last_viewed_at: Date? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, view_count: Int64? = nil, appearance: DashboardAppearance? = nil, url: String? = nil) { + public init(can: StringDictionary? = nil, content_favorite_id: Int64? = nil, content_metadata_id: Int64? = nil, description: String? = nil, hidden: Bool? = nil, id: String? = nil, model: LookModel? = nil, query_timezone: String? = nil, readonly: Bool? = nil, refresh_interval: String? = nil, refresh_interval_to_i: Int64? = nil, folder: FolderBase? = nil, title: String? = nil, user_id: Int64? = nil, slug: String? = nil, preferred_viewer: String? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, background_color: String? = nil, created_at: Date? = nil, crossfilter_enabled: Bool? = nil, dashboard_elements: [DashboardElement]? = nil, dashboard_filters: [DashboardFilter]? = nil, dashboard_layouts: [DashboardLayout]? = nil, deleted: Bool? = nil, deleted_at: Date? = nil, deleter_id: Int64? = nil, edit_uri: String? = nil, favorite_count: Int64? = nil, filters_bar_collapsed: Bool? = nil, last_accessed_at: Date? = nil, last_viewed_at: Date? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, view_count: Int64? = nil, appearance: DashboardAppearance? = nil, url: String? = nil) { self.can = can self.content_favorite_id = content_favorite_id self.content_metadata_id = content_metadata_id @@ -3358,6 +3404,7 @@ public struct Dashboard: SDKModel { self.deleter_id = deleter_id self.edit_uri = edit_uri self.favorite_count = favorite_count + self.filters_bar_collapsed = filters_bar_collapsed self.last_accessed_at = last_accessed_at self.last_viewed_at = last_viewed_at self.load_configuration = load_configuration @@ -4418,6 +4465,7 @@ public struct DBConnection: SDKModel { case pdt_concurrency case disable_context_comment case oauth_application_id + case always_retry_failed_builds } /** * Operations the current user is able to perform on this object (read-only) @@ -4626,7 +4674,12 @@ public struct DBConnection: SDKModel { */ public var oauth_application_id: Int64? - public init(can: StringDictionary? = nil, name: String? = nil, dialect: Dialect? = nil, snippets: [Snippet]? = nil, pdts_enabled: Bool? = nil, host: String? = nil, port: Int64? = nil, username: String? = nil, password: String? = nil, uses_oauth: Bool? = nil, certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, created_at: String? = nil, user_id: String? = nil, example: Bool? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, last_regen_at: String? = nil, last_reap_at: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: DBConnectionOverride? = nil, managed: Bool? = nil, tunnel_id: String? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: Int64? = nil) { + /** + * When true, error PDTs will be retried every regenerator cycle + */ + public var always_retry_failed_builds: Bool? + + public init(can: StringDictionary? = nil, name: String? = nil, dialect: Dialect? = nil, snippets: [Snippet]? = nil, pdts_enabled: Bool? = nil, host: String? = nil, port: Int64? = nil, username: String? = nil, password: String? = nil, uses_oauth: Bool? = nil, certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, created_at: String? = nil, user_id: String? = nil, example: Bool? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, last_regen_at: String? = nil, last_reap_at: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: DBConnectionOverride? = nil, managed: Bool? = nil, tunnel_id: String? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: Int64? = nil, always_retry_failed_builds: Bool? = nil) { self.can = can self.name = name self.dialect = dialect @@ -4668,6 +4721,7 @@ public struct DBConnection: SDKModel { self.pdt_concurrency = pdt_concurrency self.disable_context_comment = disable_context_comment self.oauth_application_id = oauth_application_id + self.always_retry_failed_builds = always_retry_failed_builds } } @@ -6871,6 +6925,13 @@ public struct InternalHelpResourcesContent: SDKModel { } +/** + * The type of the investigative content Valid values are: "dashboard". + */ +public enum InvestigativeContentType: String, Codable { + case dashboard = "dashboard" +} + public struct LDAPConfig: SDKModel { private enum CodingKeys : String, CodingKey { @@ -12900,11 +12961,14 @@ public struct Setting: SDKModel { public var whitelabel_configuration: WhitelabelConfiguration? - public init(extension_framework_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_enabled: Bool? = nil, whitelabel_configuration: WhitelabelConfiguration? = nil) { + public var custom_welcome_email: CustomWelcomeEmail? + + public init(extension_framework_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_enabled: Bool? = nil, whitelabel_configuration: WhitelabelConfiguration? = nil, custom_welcome_email: CustomWelcomeEmail? = nil) { self.extension_framework_enabled = extension_framework_enabled self.marketplace_auto_install_enabled = marketplace_auto_install_enabled self.marketplace_enabled = marketplace_enabled self.whitelabel_configuration = whitelabel_configuration + self.custom_welcome_email = custom_welcome_email } } @@ -13996,6 +14060,22 @@ public struct UserAttributeWithValue: SDKModel { } +public struct UserEmailOnly: SDKModel { + /** + * Email Address + */ + public var email: String + + public init(email: String) { + self.email = email + } + + public init(_ email: String) { + self.init(email: email) + } + +} + public struct UserLoginLockout: SDKModel { private enum CodingKeys : String, CodingKey { @@ -14364,7 +14444,7 @@ public struct Workspace: SDKModel { /** * Dynamic writeable type for Alert removes: - * id + * followed, followable, id, investigative_content_title, owner_display_name */ public struct WriteAlert: SDKModel { @@ -14374,10 +14454,13 @@ public struct WriteAlert: SDKModel { case cron case custom_title case dashboard_element_id + case description case destinations case field case is_disabled case is_public + case investigative_content_type + case _investigative_content_id = "investigative_content_id" case _lookml_dashboard_id = "lookml_dashboard_id" case _lookml_link_id = "lookml_link_id" case owner_id @@ -14409,6 +14492,11 @@ public struct WriteAlert: SDKModel { */ public var dashboard_element_id: Int64? + /** + * An optional description for the alert. This supplements the title + */ + public var description: String? + /** * Array of destinations to send alerts to. Must be the same type of destination. Example `[{ "destination_type": "EMAIL", "email_address": "test@test.com" }]` */ @@ -14426,6 +14514,20 @@ public struct WriteAlert: SDKModel { */ public var is_public: Bool? + /** + * The type of the investigative content Valid values are: "dashboard". + */ + public var investigative_content_type: InvestigativeContentType? + + private var _investigative_content_id: AnyString? + /** + * The ID of the investigative content. For dashboards, this will be the dashboard ID + */ + public var investigative_content_id: String? { + get { _investigative_content_id?.value } + set { _investigative_content_id = newValue.map(AnyString.init) } + } + private var _lookml_dashboard_id: AnyString? /** * ID of the LookML dashboard associated with the alert @@ -14456,16 +14558,19 @@ public struct WriteAlert: SDKModel { public var time_series_condition_state: AlertConditionState? - public init(applied_dashboard_filters: [AlertAppliedDashboardFilter]? = nil, comparison_type: ComparisonType? = nil, cron: String? = nil, custom_title: String? = nil, dashboard_element_id: Int64? = nil, destinations: [AlertDestination]? = nil, field: AlertField? = nil, is_disabled: Bool? = nil, is_public: Bool? = nil, lookml_dashboard_id: String? = nil, lookml_link_id: String? = nil, owner_id: Int64? = nil, threshold: Double? = nil, time_series_condition_state: AlertConditionState? = nil) { + public init(applied_dashboard_filters: [AlertAppliedDashboardFilter]? = nil, comparison_type: ComparisonType? = nil, cron: String? = nil, custom_title: String? = nil, dashboard_element_id: Int64? = nil, description: String? = nil, destinations: [AlertDestination]? = nil, field: AlertField? = nil, is_disabled: Bool? = nil, is_public: Bool? = nil, investigative_content_type: InvestigativeContentType? = nil, investigative_content_id: String? = nil, lookml_dashboard_id: String? = nil, lookml_link_id: String? = nil, owner_id: Int64? = nil, threshold: Double? = nil, time_series_condition_state: AlertConditionState? = nil) { self.applied_dashboard_filters = applied_dashboard_filters self.comparison_type = comparison_type self.cron = cron self.custom_title = custom_title self.dashboard_element_id = dashboard_element_id + self.description = description self.destinations = destinations self.field = field self.is_disabled = is_disabled self.is_public = is_public + self.investigative_content_type = investigative_content_type + self._investigative_content_id = investigative_content_id.map(AnyString.init) self._lookml_dashboard_id = lookml_dashboard_id.map(AnyString.init) self._lookml_link_id = lookml_link_id.map(AnyString.init) self.owner_id = owner_id @@ -14575,12 +14680,12 @@ public struct WriteBoard: SDKModel { /** * Dynamic writeable type for BoardItem removes: - * can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, title, url, view_count + * can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, description, favorite_count, id, image_url, location, title, url, view_count */ public struct WriteBoardItem: SDKModel { private enum CodingKeys : String, CodingKey { - case custom_image_data_base64 + case custom_description case custom_title case custom_url case dashboard_id @@ -14590,9 +14695,9 @@ public struct WriteBoardItem: SDKModel { case order } /** - * (Write-Only) base64 encoded image data + * Custom description entered by the user, if present */ - public var custom_image_data_base64: String? + public var custom_description: String? /** * Custom title entered by the user, if present @@ -14633,8 +14738,8 @@ public struct WriteBoardItem: SDKModel { */ public var order: Int64? - public init(custom_image_data_base64: String? = nil, custom_title: String? = nil, custom_url: String? = nil, dashboard_id: Int64? = nil, board_section_id: Int64? = nil, look_id: Int64? = nil, lookml_dashboard_id: String? = nil, order: Int64? = nil) { - self.custom_image_data_base64 = custom_image_data_base64 + public init(custom_description: String? = nil, custom_title: String? = nil, custom_url: String? = nil, dashboard_id: Int64? = nil, board_section_id: Int64? = nil, look_id: Int64? = nil, lookml_dashboard_id: String? = nil, order: Int64? = nil) { + self.custom_description = custom_description self.custom_title = custom_title self.custom_url = custom_url self.dashboard_id = dashboard_id @@ -15014,40 +15119,6 @@ public struct WriteCredentialsEmail: SDKModel { } -/** - * Dynamic writeable type for CustomWelcomeEmail removes: - * can - */ -public struct WriteCustomWelcomeEmail: SDKModel { - /** - * If true, custom email content will replace the default body of welcome emails - */ - public var enabled: Bool? - - /** - * The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - */ - public var content: String? - - /** - * The text to appear in the email subject line. - */ - public var subject: String? - - /** - * The text to appear in the header line of the email body. - */ - public var header: String? - - public init(enabled: Bool? = nil, content: String? = nil, subject: String? = nil, header: String? = nil) { - self.enabled = enabled - self.content = content - self.subject = subject - self.header = header - } - -} - /** * Dynamic writeable type for Dashboard removes: * can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, view_count, url @@ -15067,6 +15138,7 @@ public struct WriteDashboard: SDKModel { case background_color case crossfilter_enabled case deleted + case filters_bar_collapsed case load_configuration case _lookml_link_id = "lookml_link_id" case show_filters_bar @@ -15139,6 +15211,11 @@ public struct WriteDashboard: SDKModel { */ public var deleted: Bool? + /** + * Sets the default state of the filters bar to collapsed or open + */ + public var filters_bar_collapsed: Bool? + /** * configuration option that governs how dashboard loading will happen. */ @@ -15194,7 +15271,7 @@ public struct WriteDashboard: SDKModel { public var appearance: DashboardAppearance? - public init(description: String? = nil, hidden: Bool? = nil, query_timezone: String? = nil, refresh_interval: String? = nil, folder: WriteFolderBase? = nil, title: String? = nil, slug: String? = nil, preferred_viewer: String? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, background_color: String? = nil, crossfilter_enabled: Bool? = nil, deleted: Bool? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, appearance: DashboardAppearance? = nil) { + public init(description: String? = nil, hidden: Bool? = nil, query_timezone: String? = nil, refresh_interval: String? = nil, folder: WriteFolderBase? = nil, title: String? = nil, slug: String? = nil, preferred_viewer: String? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, background_color: String? = nil, crossfilter_enabled: Bool? = nil, deleted: Bool? = nil, filters_bar_collapsed: Bool? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, appearance: DashboardAppearance? = nil) { self.description = description self.hidden = hidden self.query_timezone = query_timezone @@ -15207,6 +15284,7 @@ public struct WriteDashboard: SDKModel { self.background_color = background_color self.crossfilter_enabled = crossfilter_enabled self.deleted = deleted + self.filters_bar_collapsed = filters_bar_collapsed self.load_configuration = load_configuration self._lookml_link_id = lookml_link_id.map(AnyString.init) self.show_filters_bar = show_filters_bar @@ -15648,6 +15726,7 @@ public struct WriteDBConnection: SDKModel { case pdt_concurrency case disable_context_comment case oauth_application_id + case always_retry_failed_builds } /** * Name of the connection. Also used as the unique identifier @@ -15804,7 +15883,12 @@ public struct WriteDBConnection: SDKModel { */ public var oauth_application_id: Int64? - public init(name: String? = nil, host: String? = nil, port: Int64? = nil, username: String? = nil, password: String? = nil, certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: WriteDBConnectionOverride? = nil, tunnel_id: String? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: Int64? = nil) { + /** + * When true, error PDTs will be retried every regenerator cycle + */ + public var always_retry_failed_builds: Bool? + + public init(name: String? = nil, host: String? = nil, port: Int64? = nil, username: String? = nil, password: String? = nil, certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: WriteDBConnectionOverride? = nil, tunnel_id: String? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: Int64? = nil, always_retry_failed_builds: Bool? = nil) { self.name = name self.host = host self.port = port @@ -15835,6 +15919,7 @@ public struct WriteDBConnection: SDKModel { self.pdt_concurrency = pdt_concurrency self.disable_context_comment = disable_context_comment self.oauth_application_id = oauth_application_id + self.always_retry_failed_builds = always_retry_failed_builds } } @@ -17636,11 +17721,14 @@ public struct WriteSetting: SDKModel { */ public var whitelabel_configuration: WriteWhitelabelConfiguration? - public init(extension_framework_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_enabled: Bool? = nil, whitelabel_configuration: WriteWhitelabelConfiguration? = nil) { + public var custom_welcome_email: CustomWelcomeEmail? + + public init(extension_framework_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_enabled: Bool? = nil, whitelabel_configuration: WriteWhitelabelConfiguration? = nil, custom_welcome_email: CustomWelcomeEmail? = nil) { self.extension_framework_enabled = extension_framework_enabled self.marketplace_auto_install_enabled = marketplace_auto_install_enabled self.marketplace_enabled = marketplace_enabled self.whitelabel_configuration = whitelabel_configuration + self.custom_welcome_email = custom_welcome_email } } diff --git a/swift/looker/sdk/streams.swift b/swift/looker/sdk/streams.swift index 5284f63c9..75d07b74c 100644 --- a/swift/looker/sdk/streams.swift +++ b/swift/looker/sdk/streams.swift @@ -25,7 +25,7 @@ */ /** - * 423 API methods + * 425 API methods */ @@ -52,6 +52,10 @@ open class LookerSDKStream: APIMethods { * @param {Int64} offset (Optional) Number of results to skip before returning any (used with `limit`). */ offset: Int64? = nil, + /** + * @param {String} group_by (Optional) Dimension by which to order the results(`dashboard` | `owner`) + */ + group_by: String? = nil, /** * @param {String} fields (Optional) Requested fields. */ @@ -83,7 +87,7 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let result: SDKResponse = self.get("/alerts/search", - ["limit": limit, "offset": offset, "fields": fields, "disabled": disabled as Any?, "frequency": frequency, "condition_met": condition_met as Any?, "last_run_start": last_run_start, "last_run_end": last_run_end, "all_owners": all_owners as Any?], nil, options) + ["limit": limit, "offset": offset, "group_by": group_by, "fields": fields, "disabled": disabled as Any?, "frequency": frequency, "condition_met": condition_met as Any?, "last_run_start": last_run_start, "last_run_end": last_run_end, "all_owners": all_owners as Any?], nil, options) return result } @@ -217,6 +221,28 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Enqueue an Alert by ID + * + * POST /alerts/{alert_id}/enqueue -> Voidable + */ + public func enqueue_alert( + /** + * @param {Int64} alert_id ID of an alert + */ + _ alert_id: Int64, + /** + * @param {Bool} force Whether to enqueue an alert again if its already running. + */ + force: Bool? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_alert_id = encodeParam(alert_id) + let result: SDKResponse = self.post("/alerts/\(path_alert_id)/enqueue", + ["force": force as Any?], nil, options) + return result + } + // MARK ApiAuth: API Authentication @@ -1935,9 +1961,9 @@ open class LookerSDKStream: APIMethods { */ public func update_custom_welcome_email( /** - * @param {WriteCustomWelcomeEmail} body + * @param {CustomWelcomeEmail} body */ - _ body: WriteCustomWelcomeEmail, + _ body: CustomWelcomeEmail, /** * @param {Bool} send_test_welcome_email If true a test email with the content from the request will be sent to the current user after saving */ @@ -2145,6 +2171,7 @@ open class LookerSDKStream: APIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * GET /setting -> Setting */ @@ -2168,6 +2195,7 @@ open class LookerSDKStream: APIMethods { * - marketplace_auto_install_enabled * - marketplace_enabled * - whitelabel_configuration + * - custom_welcome_email * * See the `Setting` type for more information on the specific values that can be configured. * @@ -3582,58 +3610,58 @@ open class LookerSDKStream: APIMethods { } /** - * ### Copy an existing dashboard - * - * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. + * ### Move an existing dashboard * - * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. - * `folder_id` will default to the existing folder. + * Moves a dashboard to a specified folder, and returns the moved dashboard. * - * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' - * or '(copy <# of copies>)' appended. + * `dashboard_id` and `folder_id` are required. + * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. * - * POST /dashboards/{dashboard_id}/copy -> Dashboard + * PATCH /dashboards/{dashboard_id}/move -> Dashboard */ - public func copy_dashboard( + public func move_dashboard( /** - * @param {String} dashboard_id Dashboard id to copy. + * @param {String} dashboard_id Dashboard id to move. */ _ dashboard_id: String, /** - * @param {String} folder_id Folder id to copy to. + * @param {String} folder_id Folder id to move to. */ - folder_id: String? = nil, + _ folder_id: String, options: ITransportSettings? = nil ) -> SDKResponse { let path_dashboard_id = encodeParam(dashboard_id) - let result: SDKResponse = self.post("/dashboards/\(path_dashboard_id)/copy", + let result: SDKResponse = self.patch("/dashboards/\(path_dashboard_id)/move", ["folder_id": folder_id], nil, options) return result } /** - * ### Move an existing dashboard + * ### Copy an existing dashboard * - * Moves a dashboard to a specified folder, and returns the moved dashboard. + * Creates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard. * - * `dashboard_id` and `folder_id` are required. - * `dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard. + * `dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified. + * `folder_id` will default to the existing folder. * - * PATCH /dashboards/{dashboard_id}/move -> Dashboard + * If a dashboard with the same title already exists in the target folder, the copy will have '(copy)' + * or '(copy <# of copies>)' appended. + * + * POST /dashboards/{dashboard_id}/copy -> Dashboard */ - public func move_dashboard( + public func copy_dashboard( /** - * @param {String} dashboard_id Dashboard id to move. + * @param {String} dashboard_id Dashboard id to copy. */ _ dashboard_id: String, /** - * @param {String} folder_id Folder id to move to. + * @param {String} folder_id Folder id to copy to. */ - _ folder_id: String, + folder_id: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { let path_dashboard_id = encodeParam(dashboard_id) - let result: SDKResponse = self.patch("/dashboards/\(path_dashboard_id)/move", + let result: SDKResponse = self.post("/dashboards/\(path_dashboard_id)/copy", ["folder_id": folder_id], nil, options) return result } @@ -10700,6 +10728,37 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Change a disabled user's email addresses + * + * Allows the admin to change the email addresses for all the user's + * associated credentials. Will overwrite all associated email addresses with + * the value supplied in the 'email' body param. + * The user's 'is_disabled' status must be true. + * + * POST /users/{user_id}/update_emails -> User + */ + public func wipeout_user_emails( + /** + * @param {Int64} user_id Id of user + */ + _ user_id: Int64, + /** + * @param {UserEmailOnly} body + */ + _ body: UserEmailOnly, + /** + * @param {String} fields Requested fields. + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/update_emails", + ["fields": fields], try! self.encode(body), options) + return result + } + /** * Create an embed user from an external user ID *