There are times when you may want to create a saved query that's similar to an existing one, but with minor differences. Rather than create a new one, you could use the copySavedQuery() GraphQL mutation to make a duplicate and then modify the new one.

After making a copy, you can use the updateSavedQuery() mutation to make changes to the new saved query. If you'd rather start fresh, you can use createSavedQuery(). To delete one, you'd use deleteSavedQueryV2().

Similar to copying a query, there is the createSavedQueryFromTemplate() mutation to create one using a YAML template. There is also createSavedQueryFromPackageTemplate() for creating one from a template in a package.

You might also find useful the setDefaultSavedQuery() mutation for making a saved query as the default.

Hide Query Example

Show Saved Queries Query

Stability Level Preview

Syntax

graphql
copySavedQuery(
      id: string!,
      sourceSearchDomainName: string!,
      targetSearchDomainName: string,
      name: string
   ): CopySavedQueryMutation!

For the input, you'll have to give the identifier of the saved query to copy (click on Show Query above for this). You would also give the new query name, and the name of the repositories or views. See the Given Datatype for more details.

For the results, you can get plenty of information on the saved query you just copied. Primarily, you'll probably want the identifier so you can make changes — otherwise you'll have two saved queries doing the same thing.

Example

Raw
graphql
mutation {
  copySavedQuery(
    id: "abc123",
    sourceSearchDomainName: "humio",
    name: "my_new_savedquery" 
  ) savedQuery { id }
}
Mac OS or Linux (curl)
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  copySavedQuery(
    id: \"abc123\",
    sourceSearchDomainName: \"humio\",
    name: \"my_new_savedquery\" 
  ) savedQuery { id }
}"
}
EOF
Mac OS or Linux (curl) One-line
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  copySavedQuery(
    id: \"abc123\",
    sourceSearchDomainName: \"humio\",
    name: \"my_new_savedquery\" 
  ) savedQuery { id }
}"
}
EOF
Windows Cmd and curl
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql ^
    -H "Authorization: Bearer $TOKEN" ^
    -H "Content-Type: application/json" ^
    -d @'{"query" : "mutation { ^
  copySavedQuery( ^
    id: \"abc123\", ^
    sourceSearchDomainName: \"humio\", ^
    name: \"my_new_savedquery\"  ^
  ) savedQuery { id } ^
}" ^
} '
Windows Powershell and curl
powershell
curl.exe -X POST 
    -H "Authorization: Bearer $TOKEN"
    -H "Content-Type: application/json"
    -d '{"query" : "mutation {
  copySavedQuery(
    id: \"abc123\",
    sourceSearchDomainName: \"humio\",
    name: \"my_new_savedquery\" 
  ) savedQuery { id }
}"
}'
    "$YOUR_LOGSCALE_URL/graphql"
Perl
perl
#!/usr/bin/perl

use HTTP::Request;
use LWP;

my $TOKEN = "TOKEN";

my $uri = '$YOUR_LOGSCALE_URL/graphql';

my $query = "mutation {
  copySavedQuery(
    id: \"abc123\",
    sourceSearchDomainName: \"humio\",
    name: \"my_new_savedquery\" 
  ) savedQuery { id }
}";
$query =~ s/\n/ /g;
my $json = sprintf('{"query" : "%s"}',$query);
my $req = HTTP::Request->new("POST", $uri );

$req->header("Authorization" => "Bearer $TOKEN");
$req->header("Content-Type" => "application/json");

$req->content( $json );

my $lwp = LWP::UserAgent->new;

my $result = $lwp->request( $req );

print $result->{"_content"},"\n";
Python
python
#! /usr/local/bin/python3

import requests

url = '$YOUR_LOGSCALE_URL/graphql'
mydata = r'''{"query" : "mutation {
  copySavedQuery(
    id: \"abc123\",
    sourceSearchDomainName: \"humio\",
    name: \"my_new_savedquery\" 
  ) savedQuery { id }
}"
}'''

resp = requests.post(url,
                     data = mydata,
                     headers = {
   "Authorization" : "Bearer $TOKEN",
   "Content-Type" : "application/json"
}
)

print(resp.text)
Node.js
javascript
const https = require('https');

const data = JSON.stringify(
    {"query" : "mutation {
  copySavedQuery(
    id: \"abc123\",
    sourceSearchDomainName: \"humio\",
    name: \"my_new_savedquery\" 
  ) savedQuery { id }
}"
}
);


const options = {
  hostname: '$YOUR_LOGSCALE_URL',
  path: 'graphql',
  port: 443,
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length,
    Authorization: 'BEARER ' + process.env.TOKEN,
    'User-Agent': 'Node',
  },
};

const req = https.request(options, (res) => {
  let data = '';
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    data += d;
  });
  res.on('end', () => {
    console.log(JSON.parse(data).data);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.write(data);
req.end();
Example Responses
Success (HTTP Response Code 200 OK)
json
{
  "data": {
    "copySavedQuery": {
      "id": "def456"
    }
  }
}

Given Datatype

For the input, you'll have to give the unique identifier of the saved query to copy. Click on the Show Query link above the Syntax section for an example of how to get the identifier. You would also give the name of the new saved query, as well as the name of the repository or view where the old one is located and where the new goes. The table below has more details on these parameters:

Table: Input Using Standard Datatypes

Parameter Type Required Default Description
id string yes   The unique identifier of the saved query to copy.
name string     The name of the new saved query to create. Otherwise, the old name will be used. If the same repository or view, (copied) will be appended to name.
sourceSearchDomainName string yes   The name of the repository or view where the saved query to copy is located.
targetSearchDomainName string     The name of the repository or view where to put the new saved query. If not specified, the source location will be used — provided a different, new name is given.

Returned Datatype

For the returned datatype, there is one parameter. You can see it in the table below. That parameter uses another datatype. For your convenience, the table for that sub-datatype is included below.

Table: CopySavedQueryMutation

ParameterTypeRequiredDefaultStabilityDescription
Some arguments may be required, as indicated in the Required column. For return datatypes, this indicates that you must specify which fields you want returned in the results.
Table last updated: Jun 30, 2025
savedQuerySavedQueryyes Long-TermThe saved query elements. See SavedQuery.

The table below contains the parameters of the sub-datatype used by the only parameter of the datatype shown above.

Table: SavedQuery

ParameterTypeRequiredDefaultStabilityDescription
Some arguments may be required, as indicated in the Required column. For return datatypes, this indicates that you must specify which fields you want returned in the results.
Table last updated: Apr 13, 2026
allowedActions[AssetAction]yes Short-TermThe allowed asset actions. See AssetAction . This is a preview and subject to change.
createdInfoAssetCommitMetadata  Long-TermMetadata related to the creation of the saved query. See AssetCommitMetadata.
descriptionstring  Long-TermA description of the saved query.
displayNamestringyes Long-TermThe display name of the saved query.
idstringyes Long-TermThe unique identifier for the saved query.
interactions[QueryBasedWidgetInteraction]yes Long-TermThe interactions of the saved query. See QueryBasedWidgetInteraction.
isStarredbooleanyes Long-TermWhether the saved query has been marked with a star.
labels[string]yes Long-TermThe labels associated with this saved query.
modifiedInfoAssetCommitMetadata  Long-TermMetadata related to the latest modification of the saved query. See AssetCommitMetadata.
namestringyes Long-TermThe name of the saved query.
optionsJSONyes Long-TermOptions related to the saved query, in JSON form. JSON is a scalar.
packagePackageInstallation  Long-TermThe package, if there is one, in which the saved query is included. See PackageInstallation.
packageIdVersionedPackageSpecifier  Long-TermThe unique identifier of the package. VersionedPackageSpecifier is a scalar value.
qualifiedNamestringyes PreviewThe fully qualified reference format, including the view.
queryHumioQueryyes Long-TermThe saved query itself. See HumioQuery.
resourcestringyes Short-TermThe resource identifier for this saved query.
widgetTypestringyes Long-TermThe type of widget used with the saved query.
yamlTemplateYAMLyes Long-TermA yaml formatted string that describes the saved query. YAML is a scalar. This replaced templateYaml starting in LogScale version 1.225.