Get all users including their name, id, and externalUserId.
Required Token | Notes |
---|---|
Master | Obtained from the Tray app UI. Refer this. |
The query accepts a filter key criteria
which can take in following fields:
field | Notes |
---|---|
id | This is generated by Tray when you create a end user using Mutations/Users/Create New User |
externalUserId | This will be provided by you upon the time of creation. It is the unique Id of the user in your own app and hence a mapping is created between your end user and their corresponding Tray user |
name | This will be provided by you upon the time of creation. It is the name of the end user in your own app |
isTestUser | This will be provided by you upon the time of creation. This is a boolean flag that tells whether the user is billable or not |
Here are some sample queries:
Get all users
query {
users {
edges {
node {
name
id
externalUserId
isTestUser
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
Get user by ID
query {
users (criteria: {userId: "13b3ab9c-XXXX-XXXX-XXXX-c4dd07fbbfa4"}){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
Get user by externalID
query {
users ( criteria: { externalUserId: "my-external-user-id" } ){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
Get user by name
query {
users ( criteria: { name: "Billy Bluehat" } ){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
Get test users
query {
users ( criteria: { isTestUser: true } ){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
Get test user by name
query {
users ( criteria: { isTestUser: true, name: "Billy Bluehat" } ){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
The query also accepts following pagination parameters:
parameter | Notes |
---|---|
first | number to filter the first n users from response |
last | number to filter the last n users from response |
before | pagination parameter to go to previous page of response |
after | pagination parameter to go to next page of repsonse |
Here are some sample queries:
Get users after cursor
query {
users (after: "MTNiM2FiOWMtZTIyMi00NzM5LWE2OWItYzRkZDA3ZmJiZmE0"){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
Get first 2 users
query {
users (first: 2){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
Get first 5 users after cursor
query {
users (first: 5, after: "MTNiM2FiOWMtZTIyMi00NzM5LWE2OWItYzRkZDA3ZmJiZmE0"){
edges {
node {
name
id
externalUserId
}
cursor
}
pageInfo {
hasNextPage
endCursor
hasPreviousPage
startCursor
}
}
}
It can return the following data:
Returned Data | subfields | Notes |
---|---|---|
name | ||
id | Tray ID of the user | |
externalUserId | unique id for the user in your database | |
cursor | used for pagination | |
pageinfo | hasNextPage, endCursor, hasPreviousPage, startCursor | used for pagination |
OK - Returns the end users from your embedded org
Unauthorized
Forbidden
Internal Error
curl -i -X POST \ https://tray.io/graphql \ -H 'Authorization: Bearer <MASTER_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "query": "query {\n users {\n edges {\n node {\n name\n id\n externalUserId\n }\n cursor\n }\n pageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n }\n }\n}", "variables": {} }'
{- "data": {
- "users": {
- "edges": [
- {
- "node": {
- "name": "Michael Scott",
- "id": "13b3ab9c-XXXX-XXXX-XXXX-XXXX07fbbfa4",
- "externalUserId": "668341a0-XXXX-XXXX-XXXX-XXXX5c9ba02b"
}, - "cursor": "MTNiM2FiOWMtZTIyMi00NzM5LWE2OWItYzRkZDA3ZmJiZmE0"
}, - {
- "node": {
- "name": "Dwight Schrute",
- "id": "1a71daf1-97ba-4036-a5cc-dbb4ab325a55",
- "externalUserId": "323442a0-XXXX-XXXX-XXXX-XXXX5c9ba02b"
}, - "cursor": "XXXXXXXXZjEtOTdiYS00MDM2LWE1Y2MtZGJiNGFiMzI1YTU1"
}
], - "pageInfo": {
- "hasNextPage": false,
- "endCursor": "XXXXXXXXZjEtOTdiYS00MDM2LWE1Y2MtZGJiNGFiMzI1YTU1",
- "hasPreviousPage": false,
- "startCursor": "XXXXXXXXOWMtZTIyMi00NzM5LWE2OWItYzRkZDA3ZmJiZmE0"
}
}
}
}
Create a new external user of your Embedded application. To exclude users from billing you can mark them as test users (see our End users page for more info).
Required Token | Notes |
---|---|
Master | Obtained from the Tray app UI. Refer this. |
The mutation accepts the following as inputs:
Input | Required | Note |
---|---|---|
name | Yes | |
externalUserId | Yes | can be used to link the End User to an ID you already have for them in your external database. It's important to be able to access key info, such as contact email, you may have stored in your external system. Example: dealing with Expired Auths |
isTestUser | No | Boolean value that defaults to true (billable user) if you don't pass it. A test user allows you to create Solution Instances and run test data for a user without incurring any charges. This is useful for end to end testing. Please read our end users page here . |
clientMutationId | No | Only relevant if using the Relay GraphQL client |
Here is an example mutation:
Create new user
mutation {
createExternalUser(input: {
name: "Dwight Schrute",
externalUserId: "my-apps-user-id-for-dwight"
}) {
userId
}
}
Create new user with clientMutationId
mutation {
createExternalUser(input: {
name: "Dwight Schrute",
externalUserId: "my-apps-user-id-for-dwight",
clientMutationId: "some-mutation-id" #OPTIONAL - only needed for legacy Relay & Apollo clients
}) {
userId
clientMutationId #OPTIONAL
}
}
It can return the following data:
Returned Data | Notes |
---|---|
userId | Tray Id of the user |
clientMutationId | Only relevant if using the Relay GraphQL client |
OK - Returns the userId of the newly created user
Unauthorized
Forbidden
Internal Error
curl -i -X POST \ https://tray.io/graphql \ -H 'Authorization: Bearer <MASTER_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "query": "mutation($name: String!, $externalUserId: String!) {\n createExternalUser(input: { \n name: $name, \n externalUserId: $externalUserId \n }) {\n userId\n }\n}", "variables": { "name": "Dwight Schrute", "externalUserId": "my-apps-user-id-for-dwight" } }'
{- "data": {
- "createExternalUser": {
- "userId": "d235e0b1-XXXX-XXXX-XXXX-7d165cdf4171"
}
}
}
Create an accessToken for a given userId
A user token allows access to the APIs which require a user token (Create Solution Instance, Get Solution Instances, Create User Auth etc.) and should be passed as a Bearer in the Authorization header when calling those APIs.
Note: This access token expires after 2 days
Required Token | Notes |
---|---|
Master | Obtained from the Tray app UI. Refer this. |
The mutation accepts the following as inputs:
Input | Required | Notes |
---|---|---|
userId | Yes | obtained when creating a user (Mutations/Users/Create New User) or getting users (Queries/Users/Get Users) |
clientMutationId | No | Only relevant if using the Relay GraphQL client |
Here is an example mutation:
Create user token
mutation {
authorize(input: {
userId: "d869ec65-XXXX-XXXX-XXXX-ac5c1a3958b6"
}) {
accessToken
}
}
Create user token with clientMutationId
mutation {
authorize(input: {
userId: "d869ec65-XXXX-XXXX-XXXX-ac5c1a3958b6",
clientMutationId: "my-mutation-id" #OPTIONAL - only needed for legacy Relay & Apollo clients
}) {
accessToken
clientMutationId #OPTIONAL
}
}
It can return the following data:
Returned Data | Notes |
---|---|
accessToken | a persistent token (valid for 2 days) that should be securely stored in your application. Allows access to the APIs which require a user token (e.g. createSolutionInstance) |
clientMutationId | Only relevant if using the Relay GraphQL client |
OK - Returns the accessToken of the user
Unauthorized
Forbidden
Internal Error
curl -i -X POST \ https://tray.io/graphql \ -H 'Authorization: Bearer <MASTER_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "query": "mutation ($userId: ID!) {\n authorize(input: {\n userId: $userId\n }) {\n accessToken\n }\n}", "variables": { "userId": "d869ec65-XXXX-XXXX-XXXX-ac5c1a3958b6" } }'
{- "data": {
- "authorize": {
- "accessToken": "3346c4c957b74ca2a803dacf1485816d3fedde3a54b547b997cd64b72375a9d4"
}
}
}
Creates an authorization code that is used to configure config wizard URL or auth-only dialog URL.
Refer this page on how it's used.
Note: This is a one-time use code which expires after 5 minutes.
Required Token | Notes |
---|---|
Master | Obtained from the Tray app UI. Refer this. |
The mutation accepts the following as inputs:
Input | Required | Notes |
---|---|---|
userId | Yes | obtained when creating a user (Mutations/Users/Create New User) or getting users (Queries/Users/Get Users) |
clientMutationId | No | Only relevant if using the Relay GraphQL client |
Here is an example mutation:
Create Config Wizard Auth Code
mutation {
generateAuthorizationCode( input: {
userId: "d869ec65-XXXX-XXXX-XXXX-ac5c1a3958b6"
}) {
authorizationCode
}
}
Create Config Wizard Auth Code with clientMutationId
mutation {
generateAuthorizationCode( input: {
userId: "d869ec65-XXXX-XXXX-XXXX-ac5c1a3958b6",
clientMutationId: "my-mutation-id" #OPTIONAL - only needed for legacy Relay & Apollo clients
}) {
authorizationCode
clientMutationId #OPTIONAL
}
}
It can return the following data:
Returned Data | Notes |
---|---|
authorizationCode | this is required to activate the Configuration Wizard |
clientMutationId | Only relevant if using the Relay GraphQL client |
OK - Returns the one time use authorizationCode for the user
Unauthorized
Forbidden
Internal Error
curl -i -X POST \ https://tray.io/graphql \ -H 'Authorization: Bearer <MASTER_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "query": "mutation ($userId: ID!) {\n generateAuthorizationCode( input: {\n userId: $userId\n }) {\n authorizationCode\n }\n}", "variables": { "userId": "d869ec65-XXXX-XXXX-XXXX-ac5c1a3958b6" } }'
{- "data": {
- "generateAuthorizationCode": {
- "authorizationCode": "a61eb70884f9af554a941876a66560b4bbfe48cc"
}
}
}
Can be used to mark a user as a test user allowing you to create Solution Instances and run test data for a user without incurring any charges (see our End users page for more info)
Required Token | Notes |
---|---|
Master | Obtained from the Tray app UI. Refer this. |
The mutation accepts the following as inputs:
Input | Required | Note |
---|---|---|
id | Yes | |
isTestUser | Yes | Booelan value. A test user allows you to create Solution Instances and run test data for a user without incurring any charges |
Here is an example mutation:
Update to test user
mutation {
updateExternalUser(input: {
userId: "53824943-XXXX-XXXX-XXXX-088aee14038e",
isTestUser: true
}) {
user{
name
id
externalUserId
isTestUser
}
}
}
Update to test user with clientMutationId
mutation {
updateExternalUser(input: {
userId: "53824943-XXXX-XXXX-XXXX-088aee14038e",
isTestUser: "true",
clientMutationId: "some-mutation-id" #OPTIONAL - only needed for legacy Relay & Apollo clients
}) {
user{
name
id
externalUserId
isTestUser
clientMutationId #OPTIONAL
}
}
}
It can return the following data:
Returned Data | Notes |
---|---|
name | |
id | |
externalUserId | |
isTestUser |
OK - Updates the user with the new data provided
Unauthorized
Forbidden
Internal Error
curl -i -X POST \ https://tray.io/graphql \ -H 'Authorization: Bearer <MASTER_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "query": "mutation ($userId: ID!, $isTestUser: Boolean ){\n updateExternalUser(input: {\n userId: $userId,\n isTestUser: $isTestUser\n }) {\n user{\n\t\t\tname\n\t\t\tid\n\t\t\texternalUserId\n\t\t\tisTestUser\n\t\t}\n }\n}", "variables": { "userId": "53824943-XXXX-XXXX-XXXX-088aee14038e", "isTestUser": true } }'
{- "data": {
- "updateExternalUser": {
- "user": {
- "name": "Dwaight Schrute",
- "id": "ad15b7ae-4c2d-4574-bf4f-5e8e1097a6e9",
- "externalUserId": "test003",
- "isTestUser": true
}
}
}
}
This mutation is used to delete a user from your Embedded application.
Note: Deleting a user will also disable and delete all Solution Instances associated with that user.
Required Token | Notes |
---|---|
Master | Obtained from the Tray app UI. Refer this. |
The mutation accepts the following as inputs:
Input | Required | Notes |
---|---|---|
userId | Yes | obtained with Queries/Users/Get Users |
clientMutationId | No | Only relevant if using the Relay GraphQL client |
Here is an example mutation:
Delete user
mutation {
removeExternalUser(input: {
userId: "53824943-XXXX-XXXX-XXXX-088aee14038e"
}) {
clientMutationId # REQUIRED - must specify as return field, not required to provide this in mutation function
}
}
Delete user with clientMutationId
mutation {
removeExternalUser(input: {
userId: "53824943-XXXX-XXXX-XXXX-088aee14038e",
clientMutationId: "someClientMutationId"
}) {
clientMutationId # REQUIRED - must specify as return field
}
}
It can return the following data:
Returned Data | Notes |
---|---|
clientMutationId | while this data is only relevant if using the Relay GraphQL client, it is actually required here as currently this mutation does not return any other data |
OK - Deletes the end user
Unauthorized
Forbidden
Internal Error
curl -i -X POST \ https://tray.io/graphql \ -H 'Authorization: Bearer <MASTER_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "query": "mutation {\n removeExternalUser(input: {userId: $userId}) {\n clientMutationId # REQUIRED - must specify as return field, not required to provide this in mutation function\n }\n}", "variables": { "userId": "53824943-XXXX-XXXX-XXXX-088aee14038e" } }'
{- "data": {
- "removeExternalUser": {
- "clientMutationId": null
}
}
}