From navan-pack
Provides checklists to deploy Navan integrations with ERP (NetSuite, Sage Intacct, Xero), HRIS (Workday, BambooHR), and IdPs (Okta, Azure AD) using REST API, SCIM, OAuth, and SSO.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin navan-packThis skill is limited to using the following tools:
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 cate...
Provides production reference architecture for Navan API integrations: API gateway, OAuth token management with Redis cache, REST client, data sync pipelines, ERP connectors, monitoring stack.
Guides SAP BTP CIAS workflows: subscriptions, destinations, role assignments, integration planning, My Inbox tasks, monitoring, troubleshooting, OAuth2, security, SAP product integrations.
Routes to WorkOS references for implementing, debugging authentication like SSO, SAML, MFA, RBAC, Directory Sync, and SDKs across Next.js, React, Node.js, Python, PHP.
Share bugs, ideas, or general feedback.
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.
client_id and client_secret from Admin > API Settingshttps://api.navan.com/v1Deployment Checklist:
# Fetch approved expenses ready for ERP sync
curl -s -X GET "https://api.navan.com/v1/expenses?status=approved&limit=50" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json"
# Response includes fields for ERP mapping:
# {
# "uuid": "exp_abc123",
# "amount": 245.50,
# "currency": "USD",
# "category": "meals_entertainment",
# "cost_center": "engineering",
# "gl_code": "6200",
# "receipt_url": "https://api.navan.com/v1/receipts/exp_abc123",
# "approved_at": "2026-03-20T14:30:00Z"
# }
SCIM Provisioning Setup:
https://api.navan.com/scim/v2| HRIS Field | Navan SCIM Attribute | Required |
|---|---|---|
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 |
# Check provisioned users
curl -s "https://api.navan.com/v1/users?provisioning_source=scim&limit=10" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" | jq '.[] | {email, status, provisioned_at}'
SAML Configuration:
https://app.navan.com/saml/metadatahttps://app.navan.com/saml/acsemailAddressemail → user.email (Required)
firstName → user.firstName (Required)
lastName → user.lastName (Required)
department → user.department (Optional — enables policy routing)
Each integration deployment produces:
| 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 |
Automated daily expense export to NetSuite:
#!/usr/bin/env bash
# scripts/navan-netsuite-sync.sh
set -euo pipefail
# Authenticate
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')
# Fetch yesterday's approved expenses
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"
navan-observability to monitor integration health post-deploymentnavan-webhooks-events for real-time event-driven sync instead of pollingnavan-security-basics for credential rotation and access control