API Access Tokens for non-licensed Users

chanmar
chanmar ✭✭
edited 12/09/19 inAPI & Developers

I've seen varying information about who can generate an API Token.

For example, I am a "free" unlicensed user who has access to a licensed user's sheets. That licensed user is part of the Enterprise plan. I am setup as a "Viewer". When I try to generate a token, I get a message saying I need to Upgrade my plan.

Can anyone help clarify?

Thanks!

«1

Comments

  • dAVE Inden
    dAVE Inden Employee

    Whether or not someone can generate an access token is determined by the status of their account, not the items they have access to in Smartsheet. As a free collaborator you aren't able to generate access tokens. Generating an access token requires having a paid license on your account. I should note that this license needs to be from one of our multi-user plans like the Business plan or Enterprise plan. The license from the Individual plan doesn't include the ability to generate access tokens.

  • MHalvey
    MHalvey ✭✭✭✭

    @dAVE Inden——绕回到这个答案。我们有一个第三party company who is paying to develop an API between us. If I as a system admin, licensed, enterprise level user generate an API token for them, do they need to have access to our account or can we just share the sheets they are going to bridge and they can be on their own account in Smartsheet? Thank you for your thoughts on this. - Michael

    "Strive for Progress, not perfection."

  • Paul Newcome
    Paul Newcome ✭✭✭✭✭✭

    @MHalveyI would suggest that someone in the account that is actually going to be using the API generates the token and the API builder(s) use that.

  • MHalvey
    MHalvey ✭✭✭✭

    Hey@Paul Newcome- Always a pleasure to speak with you.So if I'm understanding you correctly, the person who generates the API token should be the user from my company who is the main contact with this third party vendor? This would have to be a licensed user as well since I don't believe non-licensed users can generate API tokens.

    Then would it be correct to assume this third party vendors doesn't need me to invite them into my companies SS account and they can be just an "external contact" shared with the assets they'll use for the bridge between their software and us using Smartsheet?

    Thank you - Michael

    "Strive for Progress, not perfection."

  • Paul Newcome
    Paul Newcome ✭✭✭✭✭✭

    That is correct.


    If Company B is building an API for Company A, a licensed user in Company A should generate the API token and provide that to Company B along with access to all items necessary.

  • MHalvey
    MHalvey ✭✭✭✭

    @Paul Newcome- Thank you again for the example. One final question - is there any security risk to that license user from Company A and their shared assets if they give the token to Company B for the build out. Meaning it's a general licensed user account shared with a lot of other assets besides the ones used for Company B. Company B cannot see or use any those other assets?

    Or is it best practice for this? Maybe create a new account and use a license just for this bridge to Company B from Company A? Seems like a waste of a license then, huh?

    Thank you again,

    Michael

    "Strive for Progress, not perfection."

  • Paul Newcome
    Paul Newcome ✭✭✭✭✭✭

    Technically Company B can access EVERYTHING attached to Company A's account regardless of what the person who generated the token has access to.


    There are always going to be security concerns when sharing access. That is why I always encourage "shopping around", very thorough vetting processes, and a competent legal department that can generate documents such as contracts, non-disclosure agreements, etc..


    I have even told potential clients that when they reached out to me. Of course I a little more professional about it, but I basically tell people "I'd be more than happy to take your money, but I want you to feel both comfortable and confident in our partnership."


    在getti的风险ng on one of my soap boxes... Trust is a VERY important part of any business.

    (insert 4 more paragraphs after this that I deleted because I did end up on a soap box hahahaha)

  • MHalvey
    MHalvey ✭✭✭✭

    @Paul Newcome- No worries about the soap box. haha!

    Okay- so there is no best practice for this. Do make sure you have a NDA or contract put in place with Company B in our example.

    它也没关系如果我令牌的Admin, or a general licensed users, or even if I made a new licensed user account just for this Company B integration - Company B could access everything attached to Company A's account in Smartsheet?

    And nothing in here (Smartsheet - Official API and SDK Documentation (redoc.ly)) and the OAuth Process / Developer section would limit Company B from full access?

    Again, I can't thank you enough for your time and feedback on this. I truly appreciate it all.

    -Michael

    "Strive for Progress, not perfection."

  • Paul Newcome
    Paul Newcome ✭✭✭✭✭✭

    "It also doesn't matter if I make the token as the Admin, or a general licensed users, or even if I made a new licensed user account just for this Company B integration - Company B could access everything attached to Company A's account in Smartsheet?

    And nothing in here (Smartsheet - Official API and SDK Documentation (redoc.ly)) and the OAuth Process / Developer section would limit Company B from full access?"


    Correct and Correct. Giving someone API access gives them access to EVERYTHING including user lists, data, items, permissions, licenses, etc.. It can all be managed via the API, and there is no way to restrict what can and can't be done within an API build or operation.

  • Genevieve P.
    Genevieve P. Employee Admin

    Hiya! Just jumping in here to help explain maybe in a different way.

    Think of the API Token as your Password Log In information.

    If you, on your account, give your password to someone else then they can log in as you and see all of the things that you have access to.

    If one of colleagues on their account gives out their password, then whoever has it can log in asthatcolleague and gain access to all of their data/information (restricted by what that colleague is restricted to).


    Think of API Tokens as "passwords" to your account. Instead of logging in from the User Interface (UI), the Token logs you into the API. Does that help?

    Here's the documentation with more information:


    Cheers,

    Genevieve

  • Paul Newcome
    Paul Newcome ✭✭✭✭✭✭

    @Genevieve P.Thanks for that. I was under the impression it was more of a "master key". I didn't realize it was limited to whatever the token generating account had access to.

  • MHalvey
    MHalvey ✭✭✭✭

    @Paul Newcome@Genevieve P.- Thank you both for chiming in. So then the final answer would be if I (Company A) create a new licensed user account and share two sheets with that new account. Then generate a"Raw API token"with that new account and give that Raw API token to the Company B. Company B canONLYsee the two sheets information and not the XXXX amount of assets, information, data, etc in Company A's Smartsheet account as describe below?

    "WARNING: If an unauthorized user gets a copy of this token, they will be able toaccess all Smartsheet data that you have access to, both to read and modify on your behalf."

    Thank you again for your time,

    Michael

    "Strive for Progress, not perfection."

  • Paul Newcome
    Paul Newcome ✭✭✭✭✭✭

    That's what it sounds like to me based on that little blurb.

  • Genevieve P.
    Genevieve P. Employee Admin

    Hi@MHalvey

    You are correct. If you give out an API token from a Licensed User on your account that only has 2 sheets showing when they log into the UI (Smartsheet), then the API will allow them to "access all Smartsheet data that[this account]has access to":

    In this case, it's the two sheets, and any other information that specific licensed user can see (e.g. the email addresses shared to the sheet, their Contacts, and so on).

    It would not give that person System Admin permissions for your whole Organization unless that Licensed user was also a System Admin. You can only do actions through the API that you can do logged in as that person in the Smartsheet UI. Meaning, an Editor on a sheet cannot move columns on that sheet through the API since that requires Admin permissions.

    You would essentially be giving anaccountto Company B. "Here's the login information for this licensed user." Whatever that licensed user can do, access, or update when signed in to Smartsheet, the API can do programatically using that Token.

    I hope that helps!

    Genevieve

  • Paul Newcome
    Paul Newcome ✭✭✭✭✭✭

    @Genevieve P.Thanks for clearing that up!

Feel free to submit a Product Idea!<\/p>

There's nothing we can do as users. It would require a rebuild of that system. I'm pretty sure it's resource intensive, and runs on a schedule performing the automations.<\/p>"},{"commentID":388346,"body":"

No problem. Sorry I didn't have a way to help solve your problem. <\/p>

Having to wait is especially frustrating for me when I'm giving a demo, but that's not the only time I'd like them to execute faster. <\/p>

Consider submitting a Product Idea here (if a search for an already made suggestion isn't available for you to upvote. <\/p>

\n \n https:\/\/community.smartsheet.com\/post\/idea\n <\/a>\n<\/div>

All the best,<\/p>

-Ray<\/p>"}]}},"status":{"statusID":3,"name":"Accepted","state":"closed","recordType":"discussion","recordSubType":"question"},"bookmarked":false,"unread":false,"category":{"categoryID":320,"name":"API & Developers","url":"https:\/\/community.smartsheet.com\/categories\/api-developers","allowedDiscussionTypes":[]},"reactions":[{"tagID":3,"urlcode":"Promote","name":"Promote","class":"Positive","hasReacted":false,"reactionValue":5,"count":0},{"tagID":5,"urlcode":"Insightful","name":"Insightful","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":11,"urlcode":"Up","name":"Vote Up","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":13,"urlcode":"Awesome","name":"Awesome","class":"Positive","hasReacted":false,"reactionValue":1,"count":0}],"tags":[]},{"discussionID":107839,"type":"question","name":"Extract List of Unique Values","excerpt":"Hi Is it possible to use Bridge to extract from a column a list of values, run a JS to extract an array of unique values, and then pass this to another sheet and update another column with this unique list?","snippet":"Hi Is it possible to use Bridge to extract from a column a list of values, run a JS to extract an array of unique values, and then pass this to another sheet and update another…","categoryID":320,"dateInserted":"2023-07-20T06:57:54+00:00","dateUpdated":"2023-07-20T07:09:25+00:00","dateLastComment":"2023-07-23T23:46:17+00:00","insertUserID":125212,"insertUser":{"userID":125212,"name":"Neil Watson","title":"","url":"https:\/\/community.smartsheet.com\/profile\/Neil%20Watson","photoUrl":"https:\/\/aws.smartsheet.com\/storageProxy\/image\/images\/u!1!pglbKXXltro!HIFbX6W_ivo!Lnqe5-nvNY5","dateLastActive":"2023-08-04T22:09:50+00:00","banned":0,"punished":0,"private":false,"label":"✭✭✭✭✭✭"},"updateUserID":125212,"lastUserID":45516,"lastUser":{"userID":45516,"name":"Paul Newcome","title":"","url":"https:\/\/community.smartsheet.com\/profile\/Paul%20Newcome","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/userpics\/082\/nQPUTVFKKWDJ2.jpg","dateLastActive":"2023-08-04T19:26:39+00:00","banned":0,"punished":0,"private":false,"label":"✭✭✭✭✭✭"},"pinned":false,"pinLocation":null,"closed":false,"sink":false,"countComments":8,"countViews":113,"score":null,"hot":3379997051,"url":"https:\/\/community.smartsheet.com\/discussion\/107839\/extract-list-of-unique-values","canonicalUrl":"https:\/\/community.smartsheet.com\/discussion\/107839\/extract-list-of-unique-values","format":"Rich","tagIDs":[369],"lastPost":{"discussionID":107839,"commentID":386578,"name":"Re: Extract List of Unique Values","url":"https:\/\/community.smartsheet.com\/discussion\/comment\/386578#Comment_386578","dateInserted":"2023-07-23T23:46:17+00:00","insertUserID":45516,"insertUser":{"userID":45516,"name":"Paul Newcome","title":"","url":"https:\/\/community.smartsheet.com\/profile\/Paul%20Newcome","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/userpics\/082\/nQPUTVFKKWDJ2.jpg","dateLastActive":"2023-08-04T19:26:39+00:00","banned":0,"punished":0,"private":false,"label":"✭✭✭✭✭✭"}},"breadcrumbs":[{"name":"Home","url":"https:\/\/community.smartsheet.com\/"},{"name":"Get Help","url":"https:\/\/community.smartsheet.com\/categories\/get-help"},{"name":"API & Developers","url":"https:\/\/community.smartsheet.com\/categories\/api-developers"}],"groupID":null,"statusID":3,"attributes":{"question":{"status":"accepted","dateAccepted":"2023-07-23T08:22:10+00:00","dateAnswered":"2023-07-21T12:06:06+00:00","acceptedAnswers":[{"commentID":386363,"body":"

@Neil Watson<\/a> You should be able to use the LOWER function for evaluation but still output the version that includes caps.<\/p>

=IFERROR(INDEX(DISTINCT(LOWER(<\/strong>COLLECT(.....................))<\/strong>), 1), \"//www.santa-greenland.com/community/discussion/44901/\")<\/p>


<\/p>

I haven't tested it yet, but I feel like it should work.<\/p>"},{"commentID":386435,"body":"

Right. There are already a number of posts here in the community detailing how to pull a distinct or unique list from another sheet via formula. It usually involves the formula above without the LOWER function. The number 1 would output the first distinct value. Changing that to a 2 will output the second distinct value, so on and so forth. I usually use a helper column with the numbers manually entered so I can apply it as a column formula.<\/p>"}]}},"status":{"statusID":3,"name":"Accepted","state":"closed","recordType":"discussion","recordSubType":"question"},"bookmarked":false,"unread":false,"category":{"categoryID":320,"name":"API & Developers","url":"https:\/\/community.smartsheet.com\/categories\/api-developers","allowedDiscussionTypes":[]},"reactions":[{"tagID":3,"urlcode":"Promote","name":"Promote","class":"Positive","hasReacted":false,"reactionValue":5,"count":0},{"tagID":5,"urlcode":"Insightful","name":"Insightful","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":11,"urlcode":"Up","name":"Vote Up","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":13,"urlcode":"Awesome","name":"Awesome","class":"Positive","hasReacted":false,"reactionValue":1,"count":0}],"tags":[{"tagID":369,"urlcode":"bridge-by-smartsheet","name":"Bridge"}]},{"discussionID":107674,"type":"question","name":"API PUT and Body help for Cell link from a cell in sheet \"a\" to sheet \"b\"","excerpt":"I am having trouble linking a cell from sheet a to b. I am new to using API and possibly just getting the call wrong? or the body. Any help would be appreciated. PUT: https:\/\/api.smartsheet.com\/2.0\/sheets\/4098048888098692\/rows\/1370574824361860\/cells\/259016080 Body: { \"cells\": [ { \"linkinFromCell\": {…","snippet":"I am having trouble linking a cell from sheet a to b. I am new to using API and possibly just getting the call wrong? or the body. Any help would be appreciated. PUT:…","categoryID":320,"dateInserted":"2023-07-17T16:23:24+00:00","dateUpdated":"2023-07-18T10:24:44+00:00","dateLastComment":"2023-07-18T16:45:05+00:00","insertUserID":135530,"insertUser":{"userID":135530,"name":"Carlo Rodriguez","url":"https:\/\/community.smartsheet.com\/profile\/Carlo%20Rodriguez","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/defaultavatar\/nWRMFRX6I99I6.jpg","dateLastActive":"2023-07-21T15:50:31+00:00","banned":0,"punished":0,"private":false,"label":"✭✭"},"updateUserID":91566,"lastUserID":135530,"lastUser":{"userID":135530,"name":"Carlo Rodriguez","url":"https:\/\/community.smartsheet.com\/profile\/Carlo%20Rodriguez","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/defaultavatar\/nWRMFRX6I99I6.jpg","dateLastActive":"2023-07-21T15:50:31+00:00","banned":0,"punished":0,"private":false,"label":"✭✭"},"pinned":false,"pinLocation":null,"closed":false,"sink":false,"countComments":2,"countViews":70,"score":null,"hot":3379310909,"url":"https:\/\/community.smartsheet.com\/discussion\/107674\/api-put-and-body-help-for-cell-link-from-a-cell-in-sheet-a-to-sheet-b","canonicalUrl":"https:\/\/community.smartsheet.com\/discussion\/107674\/api-put-and-body-help-for-cell-link-from-a-cell-in-sheet-a-to-sheet-b","format":"Rich","tagIDs":[227,472],"lastPost":{"discussionID":107674,"commentID":385785,"name":"Re: API PUT and Body help for Cell link from a cell in sheet \"a\" to sheet \"b\"","url":"https:\/\/community.smartsheet.com\/discussion\/comment\/385785#Comment_385785","dateInserted":"2023-07-18T16:45:05+00:00","insertUserID":135530,"insertUser":{"userID":135530,"name":"Carlo Rodriguez","url":"https:\/\/community.smartsheet.com\/profile\/Carlo%20Rodriguez","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/defaultavatar\/nWRMFRX6I99I6.jpg","dateLastActive":"2023-07-21T15:50:31+00:00","banned":0,"punished":0,"private":false,"label":"✭✭"}},"breadcrumbs":[{"name":"Home","url":"https:\/\/community.smartsheet.com\/"},{"name":"Get Help","url":"https:\/\/community.smartsheet.com\/categories\/get-help"},{"name":"API & Developers","url":"https:\/\/community.smartsheet.com\/categories\/api-developers"}],"groupID":null,"statusID":3,"attributes":{"question":{"status":"accepted","dateAccepted":"2023-07-18T16:45:08+00:00","dateAnswered":"2023-07-18T11:38:00+00:00","acceptedAnswers":[{"commentID":385713,"body":"

Hey @Carlo Rodriguez<\/a> <\/p>

This is how I've successfully added a cell-link using the API:<\/p>


<\/p>

PUT (with the destination sheet data): <\/p>

https:\/\/api.smartsheet.com\/2.0\/sheets\/XXXX\/rows\/X<\/a>XXX<\/p>


<\/p>

Body (with the source sheet data, but the initial ColumnID from the destination sheet to show where to put the link):<\/p>

{\n  \"cells\": [\n    {\n      \"columnId\": 11111,\n            \"value\": null,\n            \"linkInFromCell\": {\n                \"sheetId\": 22222,\n                \"rowId\": 33333,\n                \"columnId\": 44444\n            }\n    }\n     ]\n}\n<\/pre>


<\/p>

Let me know if this works for you!<\/p>

Cheers,<\/p>

Genevieve<\/p>"}]}},"status":{"statusID":3,"name":"Accepted","state":"closed","recordType":"discussion","recordSubType":"question"},"bookmarked":false,"unread":false,"category":{"categoryID":320,"name":"API & Developers","url":"https:\/\/community.smartsheet.com\/categories\/api-developers","allowedDiscussionTypes":[]},"reactions":[{"tagID":3,"urlcode":"Promote","name":"Promote","class":"Positive","hasReacted":false,"reactionValue":5,"count":0},{"tagID":5,"urlcode":"Insightful","name":"Insightful","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":11,"urlcode":"Up","name":"Vote Up","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":13,"urlcode":"Awesome","name":"Awesome","class":"Positive","hasReacted":false,"reactionValue":1,"count":0}],"tags":[{"tagID":227,"urlcode":"api-and-developers","name":"API and Developers"},{"tagID":472,"urlcode":"cell-linking","name":"Cell linking"}]}],"initialPaging":{"nextURL":"https:\/\/community.smartsheet.com\/api\/v2\/discussions?page=2&categoryID=320&includeChildCategories=1&type%5B0%5D=Question&excludeHiddenCategories=1&sort=-hot&limit=3&expand%5B0%5D=all&expand%5B1%5D=-body&expand%5B2%5D=insertUser&expand%5B3%5D=lastUser&status=accepted","prevURL":null,"currentPage":1,"total":208,"limit":3},"title":"Trending in API & Developers","subtitle":null,"description":null,"noCheckboxes":true,"containerOptions":[],"discussionOptions":[]}">

Trending in API & Developers