# User Impersonation

As a System Admin, you can impersonate or make API calls on behalf of any user (even another System Admin) in your plan. You might, for example, impersonate a user to troubleshoot a user's problems or cover for a user who is sick or on vacation.

## Steps

Call the API endpoint you want and include the following headers:

- `Assume-User:` email address of the user
- `Authorization: Bearer` API_TOKEN
> **Important:** If you're impersonating another System Admin, you must use one of that System Admin's tokens. Make sure to get a token from the user ahead of time.


The request executes as though sent by the user you're impersonating.

## Examples

**cURL example**


```json
curl https://api.smartsheet.com/2.0/sheets \
-H "Authorization: Bearer ll352u9jujauoqz4gstvsae05" \
-H "Assume-User: jane.doe%40smartsheet.com" \
```

> **Note:** In a cURL command, you must URI-encode the email address you use as the `Assume-User` header value.


**C# example**


```csharp
SmartsheetClient smartsheet = new SmartsheetBuilder()
.SetAccessToken(accessToken)
.SetAssumedUser("jane.doe@smartsheet.com")
.Build();
```

**Java example**


```java
smartsheet.setAssumedUser("jane.doe@smartsheet.com");
```

**Node.js example**


```javascript
// Set options
var options = {
assumeUser: "jane.doe@smartsheet.com"
};

// List Sheets
smartsheet.sheets.listSheets(options)
.then(function(sheetList) {
    console.log(sheetList);
})
.catch(function(error) {
    console.log(error);
});
```

**Python example**


```python
smartsheet_client.assume_user("jane.doe@smartsheet.com")
```

**Ruby example**


```ruby
smartsheet.sheets.list(
header_override: {:'Assume-User' => CGI::escape('jane.doe@smartsheet.com')}
)
```