Summary

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

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. Click on the Show Query link above for an example of how to get these details. See the Input Parameters section for details on the parameters.

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 Values section.

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.

Input Parameters

For the input, you would provide the unique identifiers of the dashboard and IP filter, and the name of the token. Click on the Show Query link above the Syntax section for an example of how to get these details. You may also specify the query ownership (see the second table below).

Table: Input Parameters & Datatypes

Parameter Type Required Default Description
This table contains all input parameters for this mutation. Since one of the parameters uses a special datatype, an additional table is included below with its parameters.
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.
queryOwnershipType QueryOwnershipType     Ownership of the queries run by shared dashboard. For User, ownership will be based the calling user. See table below for details.

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

Table: QueryOwnershipType Enum Datatype

ParameterTypeRequiredDefaultStabilityDescription
Some input parameters may be required, as indicated in the Required column. For return values, this indicates that you are assured a value if the field is requested for 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 Values

For the results, you can get the token to access a dashboard without logging in, an ip filter used with the dashboard, and other data.