The createReadonlyToken() GraphQL mutation may be used to create a sharable link to a LogScale dashboard. These are commonly used by public displays.

To update the read-only dashboard IP filter, use the updateReadonlyDashboardIPFilter() mutation. To change the permissions associated with a personal user token, you can use the updateViewPermissionsTokenPermissions() mutation. Use deleteToken() to delete a token.

Hide Query Example

Show Read-Only Tokens Query

For more information on access tokens of various types, see the Ingest Tokens documentation page. For information on user authorization, see the Manage Users and Permissions documentation page.

API Stability Long-Term

Syntax

graphql
createReadonlyToken(
      id: string!,
      name: string!,
      ipFilterId: string,
      queryOwnershipType: QueryOwnershipType
   ): DashboardLink!

For the input, you would provide the unique identifiers of the dashboard and IP filter, the name of the token, and the query ownership. See the Given Datatype section for details.

For the results, you can get the token to access a dashboard without logging in, an ip filter used with the dashboard, etc. See the Returned Datatype section for more.

Example

Raw
graphql
mutation CreatePublicDashboardLink {
  createReadonlyToken(
    id: "abc123"
    name: "Wall Monitor - Overview"
    queryOwnershipType: Organization) 
  { name, token }
}
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 CreatePublicDashboardLink {
  createReadonlyToken(
    id: \"abc123\"
    name: \"Wall Monitor - Overview\"
    queryOwnershipType: Organization) 
  { name, token }
}"
}
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 CreatePublicDashboardLink {
  createReadonlyToken(
    id: \"abc123\"
    name: \"Wall Monitor - Overview\"
    queryOwnershipType: Organization) 
  { name, token }
}"
}
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 CreatePublicDashboardLink { ^
  createReadonlyToken( ^
    id: \"abc123\" ^
    name: \"Wall Monitor - Overview\" ^
    queryOwnershipType: Organization)  ^
  { name, token } ^
}" ^
} '
Windows Powershell and curl
powershell
curl.exe -X POST 
    -H "Authorization: Bearer $TOKEN"
    -H "Content-Type: application/json"
    -d '{"query" : "mutation CreatePublicDashboardLink {
  createReadonlyToken(
    id: \"abc123\"
    name: \"Wall Monitor - Overview\"
    queryOwnershipType: Organization) 
  { name, token }
}"
}'
    "$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 CreatePublicDashboardLink {
  createReadonlyToken(
    id: \"abc123\"
    name: \"Wall Monitor - Overview\"
    queryOwnershipType: Organization) 
  { name, token }
}";
$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 CreatePublicDashboardLink {
  createReadonlyToken(
    id: \"abc123\"
    name: \"Wall Monitor - Overview\"
    queryOwnershipType: Organization) 
  { name, token }
}"
}'''

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 CreatePublicDashboardLink {
  createReadonlyToken(
    id: \"abc123\"
    name: \"Wall Monitor - Overview\"
    queryOwnershipType: Organization) 
  { name, token }
}"
}
);


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": {
    "createReadonlyToken": {
      "name": "Wall Monitor - Overview",
      "token": "abc123-def456-ghi789"
    }
  }
}

The queryOwnershipType is for giving the ownership of the queries run by this shared dashboard. The result of the example above is that you can use a link like http://company.com/shared/dashboards?token=def456Ghi789 to access the dashboard from a wall monitor.

Given Datatype

For the input, you would provide the unique identifiers of the dashboard and IP filter, and the name of the token. You may also specify the query ownership (see the second table below).

Table: Input Using Standard Datatypes

Parameter Type Required Default Description
id string yes   The unique identifier of the dashboard.
ipFilterId string     The unique identifier of the IP filter.
name string yes   The name of the token.

This special datatype is used to indicate the type of query owner (i.e., a user or an organization).

Table: QueryOwnershipType

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: Oct 3, 2025
Organization   Long-TermQueries are run on behalf of the organization.
User   Long-TermQueries are run on behalf of the user.

Returned Datatype

With the returned datatype, you can get the token to access a dashboard without logging in, an ip filter used with the dashboard, and other data. See the table below for details: