> ## Documentation Index
> Fetch the complete documentation index at: https://nango.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Expensify

## Overview

> [card] [Pre-built tooling](#pre-built-tooling)

> [card] [Pre-built integrations](#pre-built-integrations)

> [card] [Access requirements](#access-requirements)

> [card] [Setup guide](#setup-guide)

> [card] [Useful links](#useful-links)

> [card] [API gotchas](#api-gotchas)

## Pre-built tooling

> [accordion] ✅ Authorization
>
> | Tools | Status |
> | - | - |
> | Pre-built authorization (Basic) | ✅ |
> | Pre-built authorization UI | ✅ |
> | Custom authorization UI | ✅ |
> | End-user authorization guide | ✅ |
> | Expired credentials detection | ✅ |

> [accordion] ✅ Read & write data
>
> | Tools | Status |
> | - | - |
> | Pre-built integrations | ✅ |
> | API unification | ✅ |
> | 2-way sync | ✅ |
> | Webhooks from Nango on data modifications | ✅ |
> | Real-time webhooks from 3rd-party API | 🚫 (time to contribute: \<48h) |
> | Proxy requests | ✅ |

> [accordion] ✅ Observability & data quality
>
> | Tools | Status |
> | - | - |
> | HTTP request logging | ✅ |
> | End-to-end type safety | ✅ |
> | Data runtime validation | ✅ |
> | OpenTelemetry export | ✅ |
> | Slack alerts on errors | ✅ |
> | Integration status API | ✅ |

> [accordion] ✅ Customization
>
> | Tools | Status |
> | - | - |
> | Create or customize use-cases | ✅ |
> | Pre-configured pagination | 🚫 (time to contribute: \<48h) |
> | Pre-configured rate-limit handling | 🚫 (time to contribute: \<48h) |
> | Per-customer configurations | ✅ |

### Users

| Function name | Description | Type |
| - | - | - |
| `users` | Fetches a list of users from Expensify. | [Sync](https://nango.dev/docs/guides/functions/syncs/sync-functions.md) |

### Others

| Function name | Description | Type |
| - | - | - |
| `create-user` | Create a user in the account | [Tool](https://nango.dev/docs/guides/functions/tools.md) |
| `disable-user` | Disables a user in Expensify | [Tool](https://nango.dev/docs/guides/functions/tools.md) |
| `list-policies` | Action to fetch a list of policies with some relevant information about them | [Tool](https://nango.dev/docs/guides/functions/tools.md) |

## Access requirements

| Pre-Requisites | Status | Comment |
| - | - | - |
| Paid dev account | ❓ | |
| Paid test account | ❓ | |
| Partnership | ❓ | |
| App review | ❓ | |
| Security audit | ❓ | |

## Setup guide

*No setup guide yet.*

> [!TIP]
>
> Need help getting started? Get help in the [community](https://nango.dev/slack).

> [!NOTE]
>
> Contribute improvements to the setup guide by [editing this page](https://github.com/nangohq/nango/tree/master/docs/integrations/all/expensify.mdx)

## Useful links

* [Generate API credentials](https://www.expensify.com/tools/integrations/)
* [API docs](https://integrations.expensify.com/Integration-Server/doc)
* [Auth-related docs](https://integrations.expensify.com/Integration-Server/doc/#authentication)

> [!NOTE]
>
> Contribute useful links by [editing this page](https://github.com/nangohq/nango/tree/master/docs/integrations/all/expensify.mdx)

## API gotchas

* Expensify in Nango uses `Basic` auth mode to access different endpoints. Provide your `partnerUserID` as the Username value and `partnerUserSecret` as the Password value.
* After creating a connection, you can use the Basic credentials as follows;

```js theme={null}
const connection = await nango.getConnection();
let credentials: { partnerUserID?: string; partnerUserSecret?: string } = {};
        if ('username' in connection.credentials && 'password' in connection.credentials) {
            credentials = {
                partnerUserID: connection.credentials.username,
                partnerUserSecret: connection.credentials.password,
            };
        } else {
            throw new nango.ActionError({
                message: `Basic API credentials are incomplete`
            });
        }
        const postData = 'requestJobDescription=' + encodeURIComponent(JSON.stringify({
            type: input.requestJobDescription.type,
            credentials: credentials,
            inputSettings: {
                type: input.inputSettings.type
            }
        }));

        const resp = await nango.post({
            baseUrlOverride: `https://integrations.expensify.com/Integration-Server`,
            endpoint: `/ExpensifyIntegrations`,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            data: postData,
        });
```

* You can have a look at the [pre-built integrations](#pre-built-integrations)
* Every request has to be made against the same endpoint.
* Expensify enforces a general rate limit of 50 jobs started per minute.

> [!NOTE]
>
> Contribute API gotchas by [editing this page](https://github.com/nangohq/nango/tree/master/docs/integrations/all/expensify.mdx)

> [card] [Connect to expensify](https://nango.dev/docs/integrations/all/expensify/connect)
>
> Guide to connect to Expensify using Nango Connect.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.