| name | navan-deploy-integration |
| description | Use when deploying Navan integrations with ERP systems (NetSuite, Sage Intacct, Xero), HRIS platforms (Workday, BambooHR), or identity providers (Okta, Azure AD).
Trigger with "navan deploy integration" or "navan erp setup" or "navan sso deployment".
|
| allowed-tools | Read, Write, Edit, Bash(curl:*), Grep, Glob |
| version | 1.7.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","navan","travel"] |
| compatibility | Designed for Claude Code |
Navan Deploy Integration
Overview
Navan connects to enterprise systems through multiple integration methods: direct REST API with OAuth 2.0, SCIM for user provisioning, SFTP for batch file exchange, SAML/OIDC for SSO, and webhooks for real-time events. There is no SDK โ all integrations use Navan's REST endpoints or admin console configuration. This skill provides deployment checklists for the three most common integration categories: ERP expense sync, HRIS user provisioning, and identity provider SSO.
Prerequisites
- Navan Admin account with integration management permissions
- OAuth 2.0 credentials โ
client_id and client_secret from Admin > API Settings
- Target system admin access โ NetSuite/Sage Intacct/Xero admin, Workday/BambooHR admin, or Okta/Azure AD admin
- API base URL:
https://api.navan.com/v1
Instructions
Category A โ ERP Expense Sync (NetSuite, Sage Intacct, Xero, QuickBooks)
Deployment Checklist:
- Create OAuth credentials in Navan Admin > API Settings
- Configure GL code mappings โ Map Navan expense categories to your chart of accounts
- Set cost center mappings โ Align Navan departments with ERP cost centers
- Enable expense export via REST API:
curl -s -X GET "https://api.navan.com/v1/expenses?status=approved&limit=50" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json"
- Set up sync schedule โ Navan supports daily or real-time export via webhooks
- Validate with test expenses โ Submit 3-5 test expenses through the full approval flow
- Enable in production โ Switch from sandbox to production OAuth credentials
Category B โ HRIS User Provisioning (Workday, BambooHR, ADP)
SCIM Provisioning Setup:
- Enable SCIM in Navan Admin > Integrations > User Provisioning
- Configure SCIM endpoint in your HRIS:
- SCIM Base URL:
https://api.navan.com/scim/v2
- Authentication: OAuth 2.0 Bearer Token
- Map user attributes:
| HRIS Field | Navan SCIM Attribute | Required |
|---|
| Email | userName | Yes |
| First Name | name.givenName | Yes |
| Last Name | name.familyName | Yes |
| Department | urn:navan:department | Recommended |
| Manager | urn:navan:manager_email | Recommended |
| Cost Center | urn:navan:cost_center | Optional |
- Test provisioning โ Create a test user in HRIS and verify they appear in Navan within 15 minutes
- Test deprovisioning โ Deactivate the test user and confirm Navan access is revoked
- Verify via API:
curl -s "https://api.navan.com/v1/users?provisioning_source=scim&limit=10" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" | jq '.[] | {email, status, provisioned_at}'
Category C โ SSO Deployment (Okta, Azure AD)
SAML Configuration:
- Create SAML application in your IdP (Okta or Azure AD)
- Configure Navan SAML settings in Admin > Security > SSO:
- Entity ID:
https://app.navan.com/saml/metadata
- ACS URL:
https://app.navan.com/saml/acs
- Name ID Format:
emailAddress
- Map SAML attributes:
email โ user.email (Required)
firstName โ user.firstName (Required)
lastName โ user.lastName (Required)
department โ user.department (Optional โ enables policy routing)
- Upload IdP metadata XML to Navan Admin console
- Enable JIT provisioning (optional) โ Auto-create Navan accounts on first SSO login
- Test with a pilot group โ Assign 5-10 users before org-wide rollout
- Enforce SSO โ After pilot validation, enable "SSO Required" to disable password login
Output
Each integration deployment produces:
- Connection validation confirming data flows between systems
- Field mapping documentation for ongoing maintenance
- Test results from pilot user group
- Rollback instructions if issues arise post-deployment
Error Handling
| HTTP Code | Meaning | Resolution |
|---|
400 | Invalid field mapping or malformed request | Review GL code / attribute mappings |
401 | OAuth token expired or invalid | Rotate credentials in Navan Admin |
403 | Integration not enabled for your plan | Verify Navan plan includes this integration (Enterprise required for some) |
409 | Duplicate user in SCIM provisioning | Check for existing user with same email |
422 | Validation error on expense export | Verify required fields (amount, currency, category) are present |
429 | Rate limited | Reduce sync frequency or implement exponential backoff |
Examples
Automated daily expense export to NetSuite:
#!/usr/bin/env bash
set -euo pipefail
TOKEN=$(curl -sf -X POST https://api.navan.com/ta-auth/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=${NAVAN_CLIENT_ID}&client_secret=${NAVAN_CLIENT_SECRET}" \
| jq -r '.access_token')
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
curl -s "https://api.navan.com/v1/expenses?status=approved&approved_after=${YESTERDAY}T00:00:00Z" \
-H "Authorization: Bearer $TOKEN" \
-o /tmp/navan-expenses.json
EXPENSE_COUNT=$(jq length /tmp/navan-expenses.json)
echo "Exporting $EXPENSE_COUNT expenses to NetSuite"
Resources
Next Steps
- Add
navan-observability to monitor integration health post-deployment
- Add
navan-webhooks-events for real-time event-driven sync instead of polling
- See
navan-security-basics for credential rotation and access control