{
  "info": {
    "name": "Yurbi API — Developer Documentation",
    "description": "Reference for the Yurbi API — authenticate, manage users, configure apps, and refresh licenses on your own Yurbi server. JSON over HTTPS. Set the `baseUrl` collection variable to your Yurbi host, run DoLogin, then paste the returned token into the `sessionToken` variable.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://your-yurbi-server.com",
      "type": "string"
    },
    {
      "key": "sessionToken",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Authentication",
      "item": [
        {
          "name": "Log in — POST /api/login/DoLogin",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/login/DoLogin",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "login",
                "DoLogin"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"bolForceLogin\": true,\n  \"UserId\": \"admin\",\n  \"UserPassword\": \"YOUR_PASSWORD\",\n  \"isGuest\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Authenticate a user and receive a session token. On success the token is in LoginSession.SessionToken and ErrorCode is 0. Invalid credentials return ErrorCode 101 with \"Login Failed - Username or Password is invalid.\" and a null session. Yurbi maintains one session per user: each successful login issues a new token and ends that user's previous session. The full response is around 200&nbsp;KB, because LoginUser.Language.phraselist carries the interface phrase table. The sample below shortens that list."
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Capture the session token for every other request.",
                  "var body = pm.response.json();",
                  "if (body && body.LoginSession && body.LoginSession.SessionToken) {",
                  "    pm.collectionVariables.set('sessionToken', body.LoginSession.SessionToken);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Check session — POST /api/Session/CheckSession",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Session/CheckSession",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Session",
                "CheckSession"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Confirm a session token is still valid. A valid token returns ErrorCode 0 with the session's current SessionExpir. An expired or unknown token returns ErrorCode 101 with \"Session Expired\" and a SessionExpir of 0001-01-01T00:00:00."
          },
          "response": []
        },
        {
          "name": "Refresh session — POST /api/Session/RefreshSession",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Session/RefreshSession",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Session",
                "RefreshSession"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Extend a session token's lifetime without a full re-login, resetting SessionExpir to the current time plus the server's session timeout. That timeout is SESSION_TIMEOUT in app settings and defaults to 20 minutes."
          },
          "response": []
        },
        {
          "name": "Reset session passport — POST /api/Session/ResetPassport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Session/ResetPassport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Session",
                "ResetPassport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"withReturn\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Rebuild the session's passport — its cached licence and permission state — and return it. The response describes licensed modules, registered servers and SMTP configuration for the instance."
          },
          "response": []
        },
        {
          "name": "Log out — POST /api/login/DoLogout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/login/DoLogout",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "login",
                "DoLogout"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "End a session and release its token. Returns a bare 0 rather than a JSON object. Afterwards the token returns ErrorCode 101 from Check session."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Users",
      "item": [
        {
          "name": "New user template — POST /api/Contact/NewContact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/NewContact",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "NewContact"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty user object with every collection initialised. Fill it in and pass it to Save user."
          },
          "response": []
        },
        {
          "name": "Create or update a user — POST /api/Contact/SaveContact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/SaveContact",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "SaveContact"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"withpin\": true,\n  \"user\": {\n    \"ID\": null,\n    \"LoginName\": \"jsmith\",\n    \"FirstName\": \"Jane\",\n    \"LastName\": \"Smith\",\n    \"EmailAddress\": \"jsmith@example.com\",\n    \"Company\": \"Acme\",\n    \"Pin\": \"1234\",\n    \"AuthType\": \"PIN\",\n    \"twofa\": \"none\",\n    \"Tag1\": \"TENANT-A\",\n    \"timezone\": -5,\n    \"timezonename\": \"Eastern Standard Time\",\n    \"SecurityGroups\": [],\n    \"UserApplications\": [\n      {\n        \"ApplicationID\": \"1001\",\n        \"ApplicationName\": \"Sample Data\",\n        \"ApplicationRoleID\": \"7\",\n        \"ApplicationRoleName\": \"Architect\",\n        \"ApplicationRoleType\": \"0\",\n        \"applicationUserDataSourceID\": \"\"\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a user or update an existing one. user.ID decides which: send null to create, or an existing ID to update. Set withpin to true when the payload carries a Pin to apply. App access is assigned in the same call through user.UserApplications, and Profile Tags through Tag1–Tag4."
          },
          "response": []
        },
        {
          "name": "Update my profile — POST /api/Contact/SaveMYContact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/SaveMYContact",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "SaveMYContact"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"withpin\": false,\n  \"user\": {\n    \"ID\": \"639234395265102835\",\n    \"FirstName\": \"Jane\",\n    \"LastName\": \"Smith\",\n    \"EmailAddress\": \"jane@example.com\",\n    \"Description\": \"\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Update the profile of the user who owns the session. Same payload shape as Save user, scoped to the caller."
          },
          "response": []
        },
        {
          "name": "List users — POST /api/Contact/GetContactList",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/GetContactList",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "GetContactList"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every user on the instance as an array. Each entry carries its own ErrorCode; there is no wrapper object."
          },
          "response": []
        },
        {
          "name": "Get a user — POST /api/Contact/GetContactById",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/GetContactById",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "GetContactById"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"ContactId\": \"639234395265102835\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return a single user by ID, including group memberships, app assignments and Profile Tags."
          },
          "response": []
        },
        {
          "name": "Delete a user — POST /api/Contact/DeleteContact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/DeleteContact",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "DeleteContact"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"user\": {\n    \"ID\": \"639234395265102835\",\n    \"LoginName\": \"jsmith\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove a user. The request takes the whole user object under user, not an ID, so fetch it first with List users or Get a user. The deleted record is echoed back with ErrorCode 0; group membership and application assignments are already detached, so those collections come back null or empty."
          },
          "response": []
        },
        {
          "name": "Unlock a user — POST /api/Contact/UnlockContact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/UnlockContact",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "UnlockContact"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"user\": {\n    \"ID\": \"639234395265102835\",\n    \"LoginName\": \"jsmith\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Clear a lockout applied after repeated failed sign-ins. Like Delete a user, it takes the whole user object under user. The account's lockdate is reset. The response returns the account record; membership and application collections are not populated on this call."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Groups & Roles",
      "item": [
        {
          "name": "List security groups — POST /api/Group/GetAllSecurityGroups",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Group/GetAllSecurityGroups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Group",
                "GetAllSecurityGroups"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every security group with its full membership. Each member is a complete user object, so responses grow with the size of the instance."
          },
          "response": []
        },
        {
          "name": "Get a security group — POST /api/Group/GetSecurityGroupById",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Group/GetSecurityGroupById",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Group",
                "GetSecurityGroupById"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"GroupId\": \"12\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return a single group with its membership."
          },
          "response": []
        },
        {
          "name": "New group template — POST /api/Group/NewSecurityGroup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Group/NewSecurityGroup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Group",
                "NewSecurityGroup"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty security group object ready to fill in and pass to Save a security group."
          },
          "response": []
        },
        {
          "name": "Create or update a group — POST /api/Group/SaveSecurityGroup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Group/SaveSecurityGroup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Group",
                "SaveSecurityGroup"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"group\": {\n    \"GroupId\": null,\n    \"GroupName\": \"Tenant A\",\n    \"GroupDescription\": \"All users for Tenant A\",\n    \"GroupStatus\": 0,\n    \"AllUsers\": [],\n    \"AllRoles\": []\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a security group or update an existing one. group.GroupId decides which: null creates and the server returns the new ID; an existing ID updates."
          },
          "response": []
        },
        {
          "name": "Delete a security group — POST /api/Group/DeleteSecurityGroup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Group/DeleteSecurityGroup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Group",
                "DeleteSecurityGroup"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"group\": {\n    \"GroupId\": \"12\",\n    \"GroupName\": \"Tenant A\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove a security group. The request takes the whole group object under group, so fetch it first with List security groups. The deleted record is echoed back with ErrorCode 0."
          },
          "response": []
        },
        {
          "name": "Add user to group — POST /api/Group/AddUser",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Group/AddUser",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Group",
                "AddUser"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"GroupId\": \"12\",\n  \"ContactId\": \"639234395265102835\",\n  \"RoleId\": \"3\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Add a user to a security group with a role. The role controls what the user may do with content in folders scoped to that group. Returns the plain-text string User Added Successfully. Supply valid IDs: an unrecognised ContactId returns an error message rather than a status."
          },
          "response": []
        },
        {
          "name": "Remove user from group — POST /api/Group/RemoveUser",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Group/RemoveUser",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Group",
                "RemoveUser"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"GroupId\": \"12\",\n  \"ContactId\": \"639234395265102835\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove a user from a security group. Returns the plain string \"User Removed Successfully.\"."
          },
          "response": []
        },
        {
          "name": "List roles — POST /api/Contact/GetRolesList",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Contact/GetRolesList",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Contact",
                "GetRolesList"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the fixed role list used by group membership and app assignment. Note these entries use ERROR_CODE and ERROR_MESSAGE rather than the usual casing."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Data Security",
      "item": [
        {
          "name": "New data tag template — POST /api/DataTag/NewDataTag",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/DataTag/NewDataTag",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "DataTag",
                "NewDataTag"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty data tag object ready to fill in and pass to Save a data tag."
          },
          "response": []
        },
        {
          "name": "Create or update a data tag — POST /api/DataTag/SaveDataTag",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/DataTag/SaveDataTag",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "DataTag",
                "SaveDataTag"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"datatag\": {\n    \"ID\": \"\",\n    \"Label\": \"tenantid\",\n    \"TagGroup\": \"Tenancy\",\n    \"DataTypeEnum\": 1,\n    \"isGroup\": true,\n    \"isUser\": false,\n    \"isActive\": true,\n    \"DefaultValue\": \"NONE\",\n    \"Contacts\": [],\n    \"Index\": 0,\n    \"SecurityGroups\": [\n      {\n        \"LeftID\": \"\",\n        \"RightID\": \"12\",\n        \"RelationshipType\": \"tag_grp\",\n        \"RelationType\": \"tag_grp\",\n        \"Option1\": \"TENANT-A\",\n        \"PermissionTypeEnum\": 0\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a data tag or update an existing one. An empty ID creates and the server returns the new one. Per-group values go in SecurityGroups: set RelationshipType and RelationType to tag_grp, RightID to the group's ID, and the value itself in Option1. Per-user values use the Contacts collection the same way. DefaultValue applies to anyone with no specific value assigned."
          },
          "response": []
        },
        {
          "name": "List data tags — POST /api/DataTag/GetAllDataTags",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/DataTag/GetAllDataTags",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "DataTag",
                "GetAllDataTags"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every data tag with its group and user value assignments."
          },
          "response": []
        },
        {
          "name": "Delete a data tag — POST /api/DataTag/DeleteDataTag",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/DataTag/DeleteDataTag",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "DataTag",
                "DeleteDataTag"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"datatag\": {\n    \"ID\": \"639234411252055064\",\n    \"Label\": \"tenantid\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove a data tag. Takes the whole tag object under datatag, so fetch it first with List data tags. Returns a {Code, Message} result."
          },
          "response": []
        },
        {
          "name": "New policy template — POST /api/AppShield/NewPolicy",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppShield/NewPolicy",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppShield",
                "NewPolicy"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty AppShield policy with a generated name and date, ready to fill in and pass to Save a policy."
          },
          "response": []
        },
        {
          "name": "List policies — POST /api/AppShield/GetAllAppshieldPolicies",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppShield/GetAllAppshieldPolicies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppShield",
                "GetAllAppshieldPolicies"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every AppShield policy on the instance with its constraints, assigned groups and assigned users."
          },
          "response": []
        },
        {
          "name": "Create or update a policy — POST /api/AppShield/SaveAppShieldPolicy",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppShield/SaveAppShieldPolicy",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppShield",
                "SaveAppShieldPolicy"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"policy\": {\n    \"id\": null,\n    \"Name\": \"Tenant row-level security\",\n    \"Description\": \"Constrains every report to the caller's tenant id\",\n    \"Constraints\": [],\n    \"Groups\": [],\n    \"Users\": [],\n    \"isActive\": false\n  },\n  \"isDeepSave\": true,\n  \"groups\": [\n    \"12\"\n  ],\n  \"users\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create or update an AppShield policy and assign it to groups and users in the same call. Build the policy from New policy template; Constraints, Groups and Users must be arrays rather than null. The groups and users parameters are arrays of IDs and are what the assignment is built from. The response echoes the saved policy and is large, because it embeds the full user records of everyone the policy touches. When updating a policy, build the request from the compact object returned by List policies rather than resending a previous save response, which can exceed the request size limit."
          },
          "response": []
        },
        {
          "name": "Delete a policy — POST /api/AppShield/DeletePolicy",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppShield/DeletePolicy",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppShield",
                "DeletePolicy"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"policy\": {\n    \"id\": \"639234411233338341\",\n    \"Name\": \"Tenant row-level security\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove an AppShield policy. Takes the whole policy object under policy, so fetch it first with List policies. Returns a plain status string."
          },
          "response": []
        },
        {
          "name": "Add group to policy — POST /api/AppShield/AddGroup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppShield/AddGroup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppShield",
                "AddGroup"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"policyid\": \"639234411233338341\",\n  \"groupid\": \"12\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Attach a security group to an existing policy. Returns the plain-text string Success. An unknown policy id returns Policy not found. Other inputs, including an unknown group id, also return Success, so confirm the assignment by reading the policy back with List policies."
          },
          "response": []
        },
        {
          "name": "Remove group from policy — POST /api/AppShield/RemoveGroup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppShield/RemoveGroup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppShield",
                "RemoveGroup"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"policyid\": \"639234411233338341\",\n  \"groupid\": \"12\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Detach a security group from a policy. Returns the plain-text string Success. An unknown policy id returns Policy not found. Other inputs, including an unknown group id, also return Success, so confirm the assignment by reading the policy back with List policies."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Apps & Servers",
      "item": [
        {
          "name": "List applications — POST /api/App/GetApplicationList",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/App/GetApplicationList",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "App",
                "GetApplicationList"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every application on the instance with its licence position, the users assigned to it, and its registered database servers. Responses are large: each entry embeds a full module profile including user records."
          },
          "response": []
        },
        {
          "name": "List registered servers — POST /api/RegServers/GetAdminRegisteredServers",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/RegServers/GetAdminRegisteredServers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "RegServers",
                "GetAdminRegisteredServers"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every registered database server with its connection settings. DatabasePassword is always returned empty."
          },
          "response": []
        },
        {
          "name": "List time zones — POST /api/RegServers/GetTimeZones",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/RegServers/GetTimeZones",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "RegServers",
                "GetTimeZones"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the time zone list Yurbi uses for users and registered servers."
          },
          "response": []
        },
        {
          "name": "Register an AnyDB app — POST /api/RegServers/InsertAnyDbModule",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/RegServers/InsertAnyDbModule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "RegServers",
                "InsertAnyDbModule"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"appname\": \"Tenant A Data\",\n  \"description\": \"Provisioned via the API\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a new AnyDB application shell. The returned module carries the ID used by every App Builder call."
          },
          "response": []
        },
        {
          "name": "Save a registered server — POST /api/RegServers/SaveRegSrv",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/RegServers/SaveRegSrv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "RegServers",
                "SaveRegSrv"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"bsaveasanydb\": true,\n  \"badvrpt\": false,\n  \"regserver\": {\n    \"ID\": \"17769733521\",\n    \"DisplayName\": \"Tenant A Data\",\n    \"DatabaseDriver\": \"POSTGRESQL\",\n    \"DatabasePlatform\": \"postgresql\",\n    \"DatabaseServer\": \"db.internal.example.com\",\n    \"DatabaseLogin\": \"reporting\",\n    \"DatabasePassword\": \"YOUR_DB_PASSWORD\",\n    \"DatabaseName\": \"sales\",\n    \"DatabaseOwner\": \"\",\n    \"ConnectionTimeout\": 10,\n    \"CommandTimeout\": 30\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create or update the database connection behind an application. Test the settings with Test connection before saving."
          },
          "response": []
        },
        {
          "name": "Test connection — POST /api/RegServers/TestConnection",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/RegServers/TestConnection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "RegServers",
                "TestConnection"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"regserver\": {\n    \"DisplayName\": \"Tenant A Data\",\n    \"DatabaseDriver\": \"POSTGRESQL\",\n    \"DatabasePlatform\": \"postgresql\",\n    \"DatabaseServer\": \"db.internal.example.com\",\n    \"DatabaseLogin\": \"reporting\",\n    \"DatabasePassword\": \"YOUR_DB_PASSWORD\",\n    \"DatabaseName\": \"sales\",\n    \"DatabaseOwner\": \"\",\n    \"ConnectionTimeout\": 10,\n    \"CommandTimeout\": 30\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Test a database connection without saving it. Returns a plain string: \"Passed\" on success, otherwise a message describing the failure, for example \"Test Failed - Name or service not known\"."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Library",
      "item": [
        {
          "name": "List a folder's contents — POST /api/library/GetListByFolderID",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/GetListByFolderID",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "GetListByFolderID"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"LibraryID\": \"2\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the reports and dashboards in a folder. itemtype identifies the kind of item — 0 is a dashboard and other values are report output types. item_flags is a JSON string rather than an object."
          },
          "response": []
        },
        {
          "name": "Get the library tree — POST /api/library/GetAllLibraryTree",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/GetAllLibraryTree",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "GetAllLibraryTree"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"includefav\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the folder tree the calling user can see. Each entry wraps its tree under a rootnode key: the Public Library (libtype 1), the caller's personal library (libtype 2), and Favorites when includefav is true. isUserAdmin, isUserModify and isUserDelete describe what the caller may do in each folder."
          },
          "response": []
        },
        {
          "name": "New folder template — POST /api/library/NewLibraryFolder",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/NewLibraryFolder",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "NewLibraryFolder"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty folder object ready to fill in and pass to Save a folder. The folder's name is the fname field."
          },
          "response": []
        },
        {
          "name": "Create or update a folder — POST /api/library/SaveLibraryFolder",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/SaveLibraryFolder",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "SaveLibraryFolder"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"isShared\": true,\n  \"currentUserId\": \"\",\n  \"libraryfolder\": {\n    \"id\": 0,\n    \"fname\": \"Tenant A\",\n    \"isParent\": false,\n    \"isHidden\": false,\n    \"InheritPermissions\": false,\n    \"Permissions\": [\n      {\n        \"LeftID\": \"\",\n        \"RightID\": \"12\",\n        \"RelationshipType\": \"fld_grp\",\n        \"RelationType\": \"fld_grp\",\n        \"PermissionTypeEnum\": 2\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create or update a library folder. Set the name in fname. Scope the folder to security groups through the Permissions array: one entry per group, with RelationshipType and RelationType set to fld_grp, RightID set to the group ID, and PermissionTypeEnum 2. A folder with no group permissions is visible to All Users."
          },
          "response": []
        },
        {
          "name": "Get a folder — POST /api/library/GetFolderById",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/GetFolderById",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "GetFolderById"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"folderid\": \"4\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return a single folder with its permission assignments."
          },
          "response": []
        },
        {
          "name": "Delete a folder — POST /api/library/DelFolder",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/DelFolder",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "DelFolder"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"folderid\": \"4\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Delete a library folder and its contents. Returns a {returncode, message} result reporting how many items were affected."
          },
          "response": []
        },
        {
          "name": "Delete a report — POST /api/library/DelReport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/DelReport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "DelReport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"ReportId\": \"1776974455\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Delete a report by ID. Returns 0 on success and 9000 on failure — the opposite of the numeric conventions used elsewhere."
          },
          "response": []
        },
        {
          "name": "Search reports — POST /api/library/SearchReports",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/SearchReports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "SearchReports"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"searchstring\": \"Revenue\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Search library items by name. Returns an array of matches, or an empty array when nothing matches."
          },
          "response": []
        },
        {
          "name": "Search dashboards — POST /api/Dashboard/SearchDashboardList",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Dashboard/SearchDashboardList",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Dashboard",
                "SearchDashboardList"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"search\": \"Sales\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Search dashboards by name. Returns a compact list — note the field names differ from report search results."
          },
          "response": []
        },
        {
          "name": "Favourite a dashboard — POST /api/library/FavDash",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/FavDash",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "FavDash"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"DashboardId\": \"1\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Add a dashboard to the calling user's favourites. Takes DashboardId; the favourite is recorded against the session's user. Returns a number rather than an envelope. Confirm the change through isFav in Search dashboards."
          },
          "response": []
        },
        {
          "name": "Un-favourite a dashboard — POST /api/library/UnFavDash",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/UnFavDash",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "UnFavDash"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"DashboardId\": \"1\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove a dashboard from the calling user's favourites. Returns a number rather than an envelope. Confirm the change through isFav in Search dashboards."
          },
          "response": []
        },
        {
          "name": "Favourite a report — POST /api/library/FavReport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/FavReport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "FavReport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"ReportId\": \"1776974455\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Add a report to the calling user's favourites. The favourite is recorded against the session's user, so no contact ID is needed. Returns a number rather than an envelope. Treat any 2xx response as accepted and confirm the change through isFav in Search reports."
          },
          "response": []
        },
        {
          "name": "Un-favourite a report — POST /api/library/UnFavReport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/library/UnFavReport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "library",
                "UnFavReport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"ReportId\": \"1776974455\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove a report from the calling user's favourites. Returns a number rather than an envelope. Treat any 2xx response as accepted and confirm the change through isFav in Search reports."
          },
          "response": []
        }
      ]
    },
    {
      "name": "App Builder",
      "item": [
        {
          "name": "List AnyDB apps — POST /api/AppBuilder/GetAnyDbModulesList",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppBuilder/GetAnyDbModulesList",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppBuilder",
                "GetAnyDbModulesList"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every AnyDB application with its registered server. ID is the RegServerID and ReportModule.ID is the ModuleID — App Builder calls need both."
          },
          "response": []
        },
        {
          "name": "Get an AnyDB app — POST /api/AppBuilder/GetAnyDbModule",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppBuilder/GetAnyDbModule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppBuilder",
                "GetAnyDbModule"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"moduleid\": \"1003\",\n  \"regserverid\": \"17769733521\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an application's report types, including their SQL tables, joins and field trees. Responses are large — an app with a few hundred tables runs to several megabytes."
          },
          "response": []
        },
        {
          "name": "Save an AnyDB app — POST /api/AppBuilder/SaveAnyDbModule",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppBuilder/SaveAnyDbModule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppBuilder",
                "SaveAnyDbModule"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"anydbmodule\": {\n    \"ReportTypes\": [],\n    \"DBSQLTableList\": {\n      \"AllDbtables\": []\n    },\n    \"isExcelCSV\": false,\n    \"ApiEndpointList\": null\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Write report types to an application. Each report type in the payload is replaced in full; report types you leave out are untouched. Returns 1 on success and 0 otherwise, so confirm the result by reading the module back."
          },
          "response": []
        },
        {
          "name": "Get a table definition — POST /api/AppBuilder/GetTableDef",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppBuilder/GetTableDef",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppBuilder",
                "GetTableDef"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"tablename\": \"sales_orders\",\n  \"tableowner\": \"\",\n  \"regserverid\": \"17769733521\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the columns of a database table as the driver reports them. datatype is the native database type, not a Yurbi field code."
          },
          "response": []
        },
        {
          "name": "List field type codes — POST /api/AppBuilder/GetDataTypes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppBuilder/GetDataTypes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppBuilder",
                "GetDataTypes"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the Yurbi field type codes and what each one does. These codes appear throughout report metadata as Fieldtype and yurbitype."
          },
          "response": []
        },
        {
          "name": "List report types — POST /api/RegServers/GetReportTypes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/RegServers/GetReportTypes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "RegServers",
                "GetReportTypes"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"ModuleType\": \"ANYDB\",\n  \"RegServerID\": \"177340979543\",\n  \"ReportModuleID\": \"1001\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "List the report types available in an app. A report type is the semantic layer a report is built on — it defines which tables are in play and how they join. Every report belongs to exactly one, and a report references its report type by name, so names must stay unique within an app."
          },
          "response": []
        },
        {
          "name": "Get a report type's field tree — POST /api/RegServers/GetReportTree",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/RegServers/GetReportTree",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "RegServers",
                "GetReportTree"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"RegServerID\": \"177340979543\",\n  \"ReportType\": \"Sales Pipeline Dataset\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the browsable field tree for one report type: folders (type: \"Folder\") containing fields (type: \"Field\"). Each field node carries everything NewField needs — dbfieldname, dbtablealias, dbparenttablealias, fieldtype and Tag. Pass a node straight through to NewField to add it to a report."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Reports",
      "item": [
        {
          "name": "New report template — POST /api/Report/NewReport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/NewReport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "NewReport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty report object with every collection initialised, ready to fill in and pass to Save a report."
          },
          "response": []
        },
        {
          "name": "New report field — POST /api/Report/NewField",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/NewField",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "NewField"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"bAdvRpt\": false,\n  \"field\": {\n    \"id\": 2,\n    \"text\": \"order_id\",\n    \"type\": \"Field\",\n    \"Tag\": \"900001\",\n    \"dbfieldname\": \"order_id\",\n    \"dbtablealias\": \"Sales_Orders\",\n    \"dbparenttablealias\": \"Sales_Orders\",\n    \"fieldtype\": \"cha\",\n    \"ReportFieldName\": \"order_id\",\n    \"RenamedField\": null,\n    \"children\": []\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Turn a node from Get the report tree into a report field, filling in derived values such as RenamedField, the alias used in the generated SQL."
          },
          "response": []
        },
        {
          "name": "New criteria template — POST /api/Report/NewCriteria",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/NewCriteria",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "NewCriteria"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty criteria object for a report field."
          },
          "response": []
        },
        {
          "name": "New totals template — POST /api/Report/NewTotals",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/NewTotals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "NewTotals"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return an empty totals object for a report field."
          },
          "response": []
        },
        {
          "name": "Create or update a report — POST /api/Report/SaveReport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/SaveReport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "SaveReport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"report\": {\n    \"ReportID\": \"\",\n    \"Reportname\": \"Orders by Customer\",\n    \"Description\": \"Created via the API\",\n    \"ModType\": \"anydb1003\",\n    \"ReportType\": \"Sales_Orders\",\n    \"ServerName\": \"db.internal.example.com\",\n    \"ModuleName\": \"Test Load\",\n    \"folderid\": 2,\n    \"OutputType\": 1,\n    \"OutputTypeClass\": \"datagrid\",\n    \"Distinct\": 0,\n    \"TopN\": \"0\",\n    \"FieldList\": [\n      {\n        \"fieldindex\": 1,\n        \"DbParentTableAlias\": \"Sales_Orders\",\n        \"DbTableAlias\": \"Sales_Orders\",\n        \"DbFieldName\": \"order_id\",\n        \"DisplayFieldName\": \"Order\",\n        \"ReportFieldName\": \"Order\",\n        \"RenamedField\": \"Order\",\n        \"Fieldtype\": \"cha\",\n        \"SearchCriteria\": \"\",\n        \"strGroup\": null,\n        \"Formula\": \"\",\n        \"tbl5\": \"Y\",\n        \"grouped\": 0,\n        \"Criteria\": []\n      }\n    ],\n    \"linkreports\": [],\n    \"AdHocFields\": [],\n    \"FormLayout\": [],\n    \"Permissions\": [\n      {\n        \"RelationshipType\": \"rpt_grp\",\n        \"RelationType\": \"rpt_grp\",\n        \"LeftID\": \"1\",\n        \"RightID\": \"0\",\n        \"Option10\": \"1\",\n        \"PermissionTypeEnum\": 1\n      }\n    ],\n    \"flags\": \"{\\\"isLagacyMode\\\":0,\\\"visualizationOnly\\\":0,\\\"DisplayFullRecords\\\":0}\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a report or update an existing one. report.ReportID decides which: an empty string creates and the server returns the new ID; an existing ID updates. Build the object from New report template so its collections are populated, and set folderid to a folder the user can modify."
          },
          "response": []
        },
        {
          "name": "Update a report — POST /api/Report/UpdateReport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/UpdateReport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "UpdateReport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"report\": {\n    \"ReportID\": \"1787843241\",\n    \"Reportname\": \"Orders by Customer\",\n    \"Description\": \"Updated via the API\",\n    \"ModType\": \"anydb1003\",\n    \"ReportType\": \"Sales_Orders\",\n    \"folderid\": 2,\n    \"FieldList\": [\n      {\n        \"fieldindex\": 1,\n        \"DbParentTableAlias\": \"Sales_Orders\",\n        \"DbTableAlias\": \"Sales_Orders\",\n        \"DbFieldName\": \"order_id\",\n        \"DisplayFieldName\": \"Order\",\n        \"ReportFieldName\": \"Order\",\n        \"RenamedField\": \"Order\",\n        \"Fieldtype\": \"cha\",\n        \"SearchCriteria\": \"\",\n        \"strGroup\": \"/Sales_Orders/Order\",\n        \"Formula\": \"\",\n        \"tbl5\": \"Y\",\n        \"grouped\": 0,\n        \"Criteria\": []\n      }\n    ],\n    \"linkreports\": [],\n    \"Permissions\": []\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Update an existing report from a report object carrying its ReportID. The response echoes the fields supplied in the request, so send the complete object — most usefully the Report node from Get report metadata — rather than a partial one."
          },
          "response": []
        },
        {
          "name": "Get a report definition — POST /api/Report/GetReport",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/GetReport",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "GetReport"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"ReportId\": \"1787843241\",\n  \"isbuilder\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return a report's stored definition — fields, criteria, output settings, permissions and audit information. Connection fields such as DbLogin and DbPass are returned empty, and CreatedBy and LastModifiedBy are null on reports created before audit information was recorded."
          },
          "response": []
        },
        {
          "name": "Get generated SQL — POST /api/Report/GetSQL",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/GetSQL",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "GetSQL"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"Reportobj\": {\n    \"ReportID\": \"1738259678\",\n    \"Reportname\": \"Tickets by Customer\",\n    \"ModuleName\": \"Ticket Data\",\n    \"ErrorCode\": 0,\n    \"ErrorMessage\": \"\",\n    \"ModType\": \"anydb1009\",\n    \"ReportType\": \"Service Data\",\n    \"folderid\": 2,\n    \"OutputType\": 1,\n    \"FieldList\": [\n      {\n        \"fieldindex\": 1,\n        \"DbParentTableAlias\": \"Sales_Orders\",\n        \"DbTableAlias\": \"Sales_Orders\",\n        \"DbFieldName\": \"order_id\",\n        \"DisplayFieldName\": \"Order\",\n        \"ReportFieldName\": \"Order\",\n        \"RenamedField\": \"Order\",\n        \"Fieldtype\": \"cha\",\n        \"SearchCriteria\": \"\",\n        \"strGroup\": \"/Sales_Orders/Order\",\n        \"Formula\": \"\",\n        \"tbl5\": \"Y\",\n        \"grouped\": 0,\n        \"Criteria\": []\n      }\n    ],\n    \"Permissions\": [],\n    \"linkreports\": [],\n    \"AdHocFields\": []\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the SQL a report object would generate, as a plain string. Prompt placeholders appear unresolved until prompts have been applied."
          },
          "response": []
        },
        {
          "name": "Compile criteria — POST /api/Report/ReportProcUI",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/ReportProcUI",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "ReportProcUI"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"db_platform\": \"postgresql\",\n  \"report\": {\n    \"ReportID\": \"\",\n    \"Reportname\": \"Preview\",\n    \"ModType\": \"anydb1003\",\n    \"ReportType\": \"Sales_Orders\",\n    \"FieldList\": [\n      {\n        \"fieldindex\": 1,\n        \"DbParentTableAlias\": \"Sales_Orders\",\n        \"DbTableAlias\": \"Sales_Orders\",\n        \"DbFieldName\": \"order_id\",\n        \"DisplayFieldName\": \"Order\",\n        \"ReportFieldName\": \"Order\",\n        \"RenamedField\": \"Order\",\n        \"Fieldtype\": \"cha\",\n        \"SearchCriteria\": \"\",\n        \"strGroup\": \"/Sales_Orders/Order\",\n        \"Formula\": \"\",\n        \"tbl5\": \"Y\",\n        \"grouped\": 0,\n        \"Criteria\": [\n          {\n            \"Index\": 0,\n            \"Field\": \"Order\",\n            \"Op\": \"inlist\",\n            \"Value1\": \"D,O\",\n            \"Value2\": \"\",\n            \"Logical\": \"And\",\n            \"cond\": \"is\",\n            \"Nested\": false\n          }\n        ]\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Compile a report's structured criteria into the SQL fragments the engine uses, and return the report object with those fragments filled in."
          },
          "response": []
        },
        {
          "name": "List SQL functions — POST /api/Report/GetSQLFunctions",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/GetSQLFunctions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "GetSQLFunctions"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"db_plat\": \"postgresql\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the SQL functions available for formula fields on a database platform. expression is the template, where ? stands for the field the formula is attached to."
          },
          "response": []
        },
        {
          "name": "Get report metadata — POST /api/Report/GetReportMetadataById",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/GetReportMetadataById",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "GetReportMetadataById"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"ReportID\": \"1738259678\",\n  \"isTarget\": false,\n  \"PreviousMetadata\": null,\n  \"Criteria\": null\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the runtime metadata for a report: Report holds the definition and Prompts holds any prompts it defines. Prompts is null when the report has none. An unknown ID returns ErrorCode 586 with \"Report does not exist.\" inside Report. Dashboards are not reports and return the same error."
          },
          "response": []
        },
        {
          "name": "Get prompt values — POST /api/Report/GetFieldValues",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/GetFieldValues",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "GetFieldValues"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"Reportobj\": {\n    \"Report\": {\n      \"ReportID\": \"1738259678\",\n      \"Reportname\": \"Tickets by Customer\",\n      \"ModuleName\": \"Ticket Data\",\n      \"ErrorCode\": 0,\n      \"ErrorMessage\": \"\",\n      \"ModType\": \"anydb1009\",\n      \"ReportType\": \"Service Data\",\n      \"folderid\": 2,\n      \"OutputType\": 1,\n      \"FieldList\": [\n        {\n          \"fieldindex\": 1,\n          \"DbParentTableAlias\": \"Sales_Orders\",\n          \"DbTableAlias\": \"Sales_Orders\",\n          \"DbFieldName\": \"order_id\",\n          \"DisplayFieldName\": \"Order\",\n          \"ReportFieldName\": \"Order\",\n          \"RenamedField\": \"Order\",\n          \"Fieldtype\": \"cha\",\n          \"SearchCriteria\": \"\",\n          \"strGroup\": \"/Sales_Orders/Order\",\n          \"Formula\": \"\",\n          \"tbl5\": \"Y\",\n          \"grouped\": 0,\n          \"Criteria\": []\n        }\n      ],\n      \"Permissions\": [],\n      \"linkreports\": [],\n      \"AdHocFields\": []\n    },\n    \"Prompts\": [\n      {\n        \"HasError\": false,\n        \"ErrorCode\": 0,\n        \"ErrorMessage\": null,\n        \"PromptField\": {\n          \"fieldindex\": 3,\n          \"DbParentTableAlias\": \"Service Data\",\n          \"DbTableAlias\": \"Service Data\",\n          \"DbFieldName\": \"customer_id\",\n          \"DisplayFieldName\": \"Customer ID\",\n          \"ReportFieldName\": \"Customer ID\",\n          \"Fieldtype\": \"num\",\n          \"SearchCriteria\": \"? = Prompt for:Customer ID#:#num#:##:#\",\n          \"strGroup\": \"/Service Data/Customer ID\",\n          \"RenamedField\": \"Customer_ID\",\n          \"Criteria\": [\n            {\n              \"Index\": 0,\n              \"Field\": \"Customer ID\",\n              \"Op\": \"=\",\n              \"Value1\": \"1115\",\n              \"Value2\": \"\",\n              \"Logical\": \"And\",\n              \"cond\": \"is\",\n              \"bskip\": false,\n              \"bprompt\": true,\n              \"bgetvalues\": true,\n              \"sortorder\": \"None\"\n            }\n          ]\n        },\n        \"isSkipable\": false,\n        \"isBetween\": false,\n        \"isInList\": false,\n        \"isLike\": false,\n        \"isGreaterThan\": false,\n        \"isLessThan\": false,\n        \"isSkipped\": false,\n        \"LowValue\": null,\n        \"HighValue\": null\n      }\n    ]\n  },\n  \"Prompt\": {\n    \"HasError\": false,\n    \"ErrorCode\": 0,\n    \"ErrorMessage\": null,\n    \"PromptField\": {\n      \"fieldindex\": 3,\n      \"DbParentTableAlias\": \"Service Data\",\n      \"DbTableAlias\": \"Service Data\",\n      \"DbFieldName\": \"customer_id\",\n      \"DisplayFieldName\": \"Customer ID\",\n      \"ReportFieldName\": \"Customer ID\",\n      \"Fieldtype\": \"num\",\n      \"SearchCriteria\": \"? = Prompt for:Customer ID#:#num#:##:#\",\n      \"strGroup\": \"/Service Data/Customer ID\",\n      \"RenamedField\": \"Customer_ID\",\n      \"Criteria\": [\n        {\n          \"Index\": 0,\n          \"Field\": \"Customer ID\",\n          \"Op\": \"=\",\n          \"Value1\": \"1115\",\n          \"Value2\": \"\",\n          \"Logical\": \"And\",\n          \"cond\": \"is\",\n          \"bskip\": false,\n          \"bprompt\": true,\n          \"bgetvalues\": true,\n          \"sortorder\": \"None\"\n        }\n      ]\n    },\n    \"isSkipable\": false,\n    \"isBetween\": false,\n    \"isInList\": false,\n    \"isLike\": false,\n    \"isGreaterThan\": false,\n    \"isLessThan\": false,\n    \"isSkipped\": false,\n    \"LowValue\": null,\n    \"HighValue\": null\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the selectable values for a prompt as {key, val} pairs. For a date prompt the list contains relative expressions such as [Today] and [Last Month], which are intended for interface pickers; send an explicit date when setting the value through the API."
          },
          "response": []
        },
        {
          "name": "Apply one prompt — POST /api/Report/ReplacePrompt",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/ReplacePrompt",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "ReplacePrompt"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"Reportobj\": {\n    \"Report\": {\n      \"ReportID\": \"1738259678\",\n      \"Reportname\": \"Tickets by Customer\",\n      \"ModuleName\": \"Ticket Data\",\n      \"ErrorCode\": 0,\n      \"ErrorMessage\": \"\",\n      \"ModType\": \"anydb1009\",\n      \"ReportType\": \"Service Data\",\n      \"folderid\": 2,\n      \"OutputType\": 1,\n      \"FieldList\": [\n        {\n          \"fieldindex\": 1,\n          \"DbParentTableAlias\": \"Sales_Orders\",\n          \"DbTableAlias\": \"Sales_Orders\",\n          \"DbFieldName\": \"order_id\",\n          \"DisplayFieldName\": \"Order\",\n          \"ReportFieldName\": \"Order\",\n          \"RenamedField\": \"Order\",\n          \"Fieldtype\": \"cha\",\n          \"SearchCriteria\": \"\",\n          \"strGroup\": \"/Sales_Orders/Order\",\n          \"Formula\": \"\",\n          \"tbl5\": \"Y\",\n          \"grouped\": 0,\n          \"Criteria\": []\n        }\n      ],\n      \"Permissions\": [],\n      \"linkreports\": [],\n      \"AdHocFields\": []\n    },\n    \"Prompts\": [\n      {\n        \"HasError\": false,\n        \"ErrorCode\": 0,\n        \"ErrorMessage\": null,\n        \"PromptField\": {\n          \"fieldindex\": 3,\n          \"DbParentTableAlias\": \"Service Data\",\n          \"DbTableAlias\": \"Service Data\",\n          \"DbFieldName\": \"customer_id\",\n          \"DisplayFieldName\": \"Customer ID\",\n          \"ReportFieldName\": \"Customer ID\",\n          \"Fieldtype\": \"num\",\n          \"SearchCriteria\": \"? = Prompt for:Customer ID#:#num#:##:#\",\n          \"strGroup\": \"/Service Data/Customer ID\",\n          \"RenamedField\": \"Customer_ID\",\n          \"Criteria\": [\n            {\n              \"Index\": 0,\n              \"Field\": \"Customer ID\",\n              \"Op\": \"=\",\n              \"Value1\": \"1115\",\n              \"Value2\": \"\",\n              \"Logical\": \"And\",\n              \"cond\": \"is\",\n              \"bskip\": false,\n              \"bprompt\": true,\n              \"bgetvalues\": true,\n              \"sortorder\": \"None\"\n            }\n          ]\n        },\n        \"isSkipable\": false,\n        \"isBetween\": false,\n        \"isInList\": false,\n        \"isLike\": false,\n        \"isGreaterThan\": false,\n        \"isLessThan\": false,\n        \"isSkipped\": false,\n        \"LowValue\": null,\n        \"HighValue\": null\n      }\n    ]\n  },\n  \"Prompt\": {\n    \"HasError\": false,\n    \"ErrorCode\": 0,\n    \"ErrorMessage\": null,\n    \"PromptField\": {\n      \"fieldindex\": 3,\n      \"DbParentTableAlias\": \"Service Data\",\n      \"DbTableAlias\": \"Service Data\",\n      \"DbFieldName\": \"customer_id\",\n      \"DisplayFieldName\": \"Customer ID\",\n      \"ReportFieldName\": \"Customer ID\",\n      \"Fieldtype\": \"num\",\n      \"SearchCriteria\": \"? = Prompt for:Customer ID#:#num#:##:#\",\n      \"strGroup\": \"/Service Data/Customer ID\",\n      \"RenamedField\": \"Customer_ID\",\n      \"Criteria\": [\n        {\n          \"Index\": 0,\n          \"Field\": \"Customer ID\",\n          \"Op\": \"=\",\n          \"Value1\": \"1115\",\n          \"Value2\": \"\",\n          \"Logical\": \"And\",\n          \"cond\": \"is\",\n          \"bskip\": false,\n          \"bprompt\": true,\n          \"bgetvalues\": true,\n          \"sortorder\": \"None\"\n        }\n      ]\n    },\n    \"isSkipable\": false,\n    \"isBetween\": false,\n    \"isInList\": false,\n    \"isLike\": false,\n    \"isGreaterThan\": false,\n    \"isLessThan\": false,\n    \"isSkipped\": false,\n    \"LowValue\": null,\n    \"HighValue\": null\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Apply a value for a single prompt and return the updated metadata. Only the prompt you pass is compiled into the report's criteria, so for a report with several prompts call this once per prompt, passing the previous response back in as Reportobj each time. Set the value on LowValue, and HighValue as well when isBetween is true. The applied value appears in the returned Report, compiled into that field's criteria; the Prompts array is echoed back as it was supplied in Reportobj. Return the prompt object otherwise unchanged: it is matched to its field by table alias, field name, display name and field index."
          },
          "response": []
        },
        {
          "name": "Apply all prompts — POST /api/Report/ReplacePromptCollection",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/ReplacePromptCollection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "ReplacePromptCollection"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"Reportobj\": {\n    \"Report\": {\n      \"ReportID\": \"1738259678\",\n      \"Reportname\": \"Tickets by Customer\",\n      \"ModuleName\": \"Ticket Data\",\n      \"ErrorCode\": 0,\n      \"ErrorMessage\": \"\",\n      \"ModType\": \"anydb1009\",\n      \"ReportType\": \"Service Data\",\n      \"folderid\": 2,\n      \"OutputType\": 1,\n      \"FieldList\": [\n        {\n          \"fieldindex\": 1,\n          \"DbParentTableAlias\": \"Sales_Orders\",\n          \"DbTableAlias\": \"Sales_Orders\",\n          \"DbFieldName\": \"order_id\",\n          \"DisplayFieldName\": \"Order\",\n          \"ReportFieldName\": \"Order\",\n          \"RenamedField\": \"Order\",\n          \"Fieldtype\": \"cha\",\n          \"SearchCriteria\": \"\",\n          \"strGroup\": \"/Sales_Orders/Order\",\n          \"Formula\": \"\",\n          \"tbl5\": \"Y\",\n          \"grouped\": 0,\n          \"Criteria\": []\n        }\n      ],\n      \"Permissions\": [],\n      \"linkreports\": [],\n      \"AdHocFields\": []\n    },\n    \"Prompts\": [\n      {\n        \"HasError\": false,\n        \"ErrorCode\": 0,\n        \"ErrorMessage\": null,\n        \"PromptField\": {\n          \"fieldindex\": 3,\n          \"DbParentTableAlias\": \"Service Data\",\n          \"DbTableAlias\": \"Service Data\",\n          \"DbFieldName\": \"customer_id\",\n          \"DisplayFieldName\": \"Customer ID\",\n          \"ReportFieldName\": \"Customer ID\",\n          \"Fieldtype\": \"num\",\n          \"SearchCriteria\": \"? = Prompt for:Customer ID#:#num#:##:#\",\n          \"strGroup\": \"/Service Data/Customer ID\",\n          \"RenamedField\": \"Customer_ID\",\n          \"Criteria\": [\n            {\n              \"Index\": 0,\n              \"Field\": \"Customer ID\",\n              \"Op\": \"=\",\n              \"Value1\": \"1115\",\n              \"Value2\": \"\",\n              \"Logical\": \"And\",\n              \"cond\": \"is\",\n              \"bskip\": false,\n              \"bprompt\": true,\n              \"bgetvalues\": true,\n              \"sortorder\": \"None\"\n            }\n          ]\n        },\n        \"isSkipable\": false,\n        \"isBetween\": false,\n        \"isInList\": false,\n        \"isLike\": false,\n        \"isGreaterThan\": false,\n        \"isLessThan\": false,\n        \"isSkipped\": false,\n        \"LowValue\": null,\n        \"HighValue\": null\n      }\n    ]\n  },\n  \"Prompts\": [\n    {\n      \"HasError\": false,\n      \"ErrorCode\": 0,\n      \"ErrorMessage\": null,\n      \"PromptField\": {\n        \"fieldindex\": 3,\n        \"DbParentTableAlias\": \"Service Data\",\n        \"DbTableAlias\": \"Service Data\",\n        \"DbFieldName\": \"customer_id\",\n        \"DisplayFieldName\": \"Customer ID\",\n        \"ReportFieldName\": \"Customer ID\",\n        \"Fieldtype\": \"num\",\n        \"SearchCriteria\": \"? = Prompt for:Customer ID#:#num#:##:#\",\n        \"strGroup\": \"/Service Data/Customer ID\",\n        \"RenamedField\": \"Customer_ID\",\n        \"Criteria\": [\n          {\n            \"Index\": 0,\n            \"Field\": \"Customer ID\",\n            \"Op\": \"=\",\n            \"Value1\": \"1115\",\n            \"Value2\": \"\",\n            \"Logical\": \"And\",\n            \"cond\": \"is\",\n            \"bskip\": false,\n            \"bprompt\": true,\n            \"bgetvalues\": true,\n            \"sortorder\": \"None\"\n          }\n        ]\n      },\n      \"isSkipable\": false,\n      \"isBetween\": false,\n      \"isInList\": false,\n      \"isLike\": false,\n      \"isGreaterThan\": false,\n      \"isLessThan\": false,\n      \"isSkipped\": false,\n      \"LowValue\": \"1115\",\n      \"HighValue\": \"\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Apply values for every prompt on a report in one call and return the metadata with those values compiled into the report's criteria. Set each value on the prompt's LowValue, and HighValue as well when isBetween is true. Send the Prompts array in the same order and length as the metadata returned it: values are matched to prompts by position."
          },
          "response": []
        },
        {
          "name": "Run a report — POST /api/Report/GetReportData",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/GetReportData",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "GetReportData"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"IsDrillDown\": false,\n  \"DrillDownCriteria\": null,\n  \"Reportobj\": {\n    \"Report\": {\n      \"ReportID\": \"1738259678\",\n      \"Reportname\": \"Tickets by Customer\",\n      \"ModuleName\": \"Ticket Data\",\n      \"ErrorCode\": 0,\n      \"ErrorMessage\": \"\",\n      \"ModType\": \"anydb1009\",\n      \"ReportType\": \"Service Data\",\n      \"folderid\": 2,\n      \"OutputType\": 1,\n      \"FieldList\": [\n        {\n          \"fieldindex\": 1,\n          \"DbParentTableAlias\": \"Sales_Orders\",\n          \"DbTableAlias\": \"Sales_Orders\",\n          \"DbFieldName\": \"order_id\",\n          \"DisplayFieldName\": \"Order\",\n          \"ReportFieldName\": \"Order\",\n          \"RenamedField\": \"Order\",\n          \"Fieldtype\": \"cha\",\n          \"SearchCriteria\": \"\",\n          \"strGroup\": \"/Sales_Orders/Order\",\n          \"Formula\": \"\",\n          \"tbl5\": \"Y\",\n          \"grouped\": 0,\n          \"Criteria\": []\n        }\n      ],\n      \"Permissions\": [],\n      \"linkreports\": [],\n      \"AdHocFields\": []\n    },\n    \"Prompts\": [\n      {\n        \"HasError\": false,\n        \"ErrorCode\": 0,\n        \"ErrorMessage\": null,\n        \"PromptField\": {\n          \"fieldindex\": 3,\n          \"DbParentTableAlias\": \"Service Data\",\n          \"DbTableAlias\": \"Service Data\",\n          \"DbFieldName\": \"customer_id\",\n          \"DisplayFieldName\": \"Customer ID\",\n          \"ReportFieldName\": \"Customer ID\",\n          \"Fieldtype\": \"num\",\n          \"SearchCriteria\": \"? = Prompt for:Customer ID#:#num#:##:#\",\n          \"strGroup\": \"/Service Data/Customer ID\",\n          \"RenamedField\": \"Customer_ID\",\n          \"Criteria\": [\n            {\n              \"Index\": 0,\n              \"Field\": \"Customer ID\",\n              \"Op\": \"=\",\n              \"Value1\": \"1115\",\n              \"Value2\": \"\",\n              \"Logical\": \"And\",\n              \"cond\": \"is\",\n              \"bskip\": false,\n              \"bprompt\": true,\n              \"bgetvalues\": true,\n              \"sortorder\": \"None\"\n            }\n          ]\n        },\n        \"isSkipable\": false,\n        \"isBetween\": false,\n        \"isInList\": false,\n        \"isLike\": false,\n        \"isGreaterThan\": false,\n        \"isLessThan\": false,\n        \"isSkipped\": false,\n        \"LowValue\": null,\n        \"HighValue\": null\n      }\n    ]\n  },\n  \"TargetReportobj\": null\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Execute a report and return its rows. Reportobj must be the complete metadata object from Get report metadata, with prompts applied when the report has any. Rows are in Data, one object per row keyed by column, and Columns describes each column. Check HasError rather than ErrorCode on this endpoint: a failed execution returns HasError: true with the message in ErrorMessage while ErrorCode stays 0. The response also carries interface bindings such as jqxColumns, and etime, the execution time in milliseconds."
          },
          "response": []
        },
        {
          "name": "List output types — POST /api/Report/GetOutputTypes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Report/GetOutputTypes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Report",
                "GetOutputTypes"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the output types a report can use. id is the value carried by a report's OutputType and by itemtype in library listings; uiclass is the matching interface class."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Email (SMTP)",
      "item": [
        {
          "name": "Get SMTP configuration — POST /api/SMTP/GetSMTP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/SMTP/GetSMTP",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "SMTP",
                "GetSMTP"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the instance's outgoing mail configuration. SMTPPassword is always returned empty. The settings are nested inside a realm; SMTPRealm.SMTPSetting is null on the master realm."
          },
          "response": []
        },
        {
          "name": "Save SMTP configuration — POST /api/SMTP/SaveSMTP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/SMTP/SaveSMTP",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "SMTP",
                "SaveSMTP"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"smtp\": {\n    \"SMTPId\": \"177341830687\",\n    \"SMTPHost\": \"smtp.example.com\",\n    \"SMTPPort\": \"587\",\n    \"SMTPFromAddress\": \"reports@example.com\",\n    \"SMTPRequiredSecurity\": \"True\",\n    \"SMTPUserName\": \"reports@example.com\",\n    \"SMTPPassword\": \"YOUR_SMTP_PASSWORD\",\n    \"SMTPEnableSSL\": \"True\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create or update the outgoing mail configuration. Read the current settings with Get SMTP configuration, change what you need, and send the whole object back. Supply SMTPPassword whenever SMTPRequiredSecurity is true, since it is never returned by a read."
          },
          "response": []
        },
        {
          "name": "Delete SMTP configuration — POST /api/SMTP/DeleteSMTP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/SMTP/DeleteSMTP",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "SMTP",
                "DeleteSMTP"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"smtp\": {\n    \"SMTPId\": \"177341830687\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Remove the outgoing mail configuration. Takes the whole configuration object under smtp, so read it first with Get SMTP configuration."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Instance Settings",
      "item": [
        {
          "name": "Get instance settings — POST /api/AppSettings/GetAppSettings",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppSettings/GetAppSettings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppSettings",
                "GetAppSettings"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the instance's configuration: session timeout, record limits, tenant mode, single sign-on, two-factor settings and scheduler concurrency. Boolean values are returned as the strings \"True\" and \"False\"."
          },
          "response": []
        },
        {
          "name": "Save instance settings — POST /api/AppSettings/SaveAppSettings",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/AppSettings/SaveAppSettings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "AppSettings",
                "SaveAppSettings"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"appsettings\": {\n    \"DebugLevel\": 0,\n    \"SESSION_TIMEOUT\": 20,\n    \"PROMPT_VALUES_LIMIT\": 10000,\n    \"SSOEnabled\": \"True\",\n    \"SSOHeader\": \"ssoheadertoken\",\n    \"IIS_PASSTHROUGH_ENABLED\": \"False\",\n    \"TENANT_MODE_ENABLED\": \"False\",\n    \"USERTZ_MODE_ENABLED\": \"False\",\n    \"GUEST_FASTCACHE\": \"False\",\n    \"FastCacheMin\": 30,\n    \"duo_clientid\": \"\",\n    \"duo_clientsecret\": \"\",\n    \"duo_apihost\": \"\",\n    \"duo_redirect\": \"\",\n    \"duo_enabled\": \"False\",\n    \"bulkemail_enabled\": \"False\",\n    \"sqlnolocks\": \"False\",\n    \"SchedulerMode\": 8,\n    \"MaxRecords\": 500000,\n    \"Productname\": \"Yurbi\",\n    \"enableallusersgrp\": \"False\",\n    \"enforcestrongpassword\": \"False\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Update instance configuration. Read the current settings first, change what you need, and send the whole object back — omitted values are not preserved."
          },
          "response": []
        },
        {
          "name": "Get audit settings — POST /api/Audit/GetAuditTypes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Audit/GetAuditTypes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Audit",
                "GetAuditTypes"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return every auditable event with whether it is recorded and how long it is retained. recorded is -1 when the event is captured and 0 when it is not; retention is in days."
          },
          "response": []
        },
        {
          "name": "Save audit settings — POST /api/Audit/SaveAuditTypes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/Audit/SaveAuditTypes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Audit",
                "SaveAuditTypes"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\",\n  \"AuditTypeList\": [\n    {\n      \"ID\": 1,\n      \"type\": 0,\n      \"symbol\": \"Login Success\",\n      \"recorded\": -1,\n      \"retention\": 365,\n      \"options\": \"\"\n    },\n    {\n      \"ID\": 2,\n      \"type\": 1,\n      \"symbol\": \"Login Failure\",\n      \"recorded\": -1,\n      \"retention\": 365,\n      \"options\": \"\"\n    },\n    {\n      \"ID\": 7,\n      \"type\": 6,\n      \"symbol\": \"Report Execution\",\n      \"recorded\": -1,\n      \"retention\": 365,\n      \"options\": \"\"\n    },\n    {\n      \"ID\": 16,\n      \"type\": 15,\n      \"symbol\": \"Report Execution SQL\",\n      \"recorded\": 0,\n      \"retention\": 365,\n      \"options\": \"\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Update which events are audited and how long each is retained. Send the full list as returned by Get audit settings, with recorded and retention adjusted."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Licensing",
      "item": [
        {
          "name": "Refresh licences — POST /api/LicenseManager/RefreshInstalledLicenses",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/LicenseManager/RefreshInstalledLicenses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "LicenseManager",
                "RefreshInstalledLicenses"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sessionToken\": \"{{sessionToken}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Re-read installed licence keys from the licence service and update the instance's entitlements."
          },
          "response": []
        },
        {
          "name": "Get installation ID — POST /api/LicenseManager/GetInstallationID",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/LicenseManager/GetInstallationID",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "LicenseManager",
                "GetInstallationID"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Return the instance's installation identifier as a plain string, formatted as six groups of four digits. This endpoint does not require a session token — it is used during activation, before anyone can sign in."
          },
          "response": []
        }
      ]
    }
  ]
}
