Overview

Pre-built tooling

ToolsStatus
Pre-built authorization (Basic)
Pre-built authorization UI
Custom authorization UI
End-user authorization guide
Expired credentials detection
ToolsStatus
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
ToolsStatus
HTTP request logging
End-to-type type safety
Data runtime validation
OpenTelemetry export
Slack alerts on errors
Integration status API
ToolsStatus
Create or customize use-cases
Pre-configured pagination🚫 (time to contribute: <48h)
Pre-configured rate-limit handling🚫 (time to contribute: <48h)
Per-customer configurations

Pre-built integrations

EndpointDescriptionReadme
POST /usersCreate a user in the account🔗
DELETE /usersDisables a user in Expensify🔗
GET /usersFetches a list of users from Expensify.🔗
EndpointDescriptionReadme
POST /policiesAction to fetch a list of policies with some relevant information about them🔗
Not seeing the integration you need? Build your own independently.

Access requirements

Pre-RequisitesStatusComment
Paid dev account
Paid test account
Partnership
App review
Security audit

Setup guide

No setup guide yet.
Need help getting started? Get help in the community.
Contribute improvements to the setup guide by editing this page
Contribute useful links by editing this page

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;
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
  • Every request has to be made against the same endpoint.
  • Expensify enforces a general rate limit of 50 jobs started per minute.
Contribute API gotchas by editing this page

Connect to expensify

Guide to connect to Expensify using Nango Connect.