Set up Abridge clinical AI platform authentication and EHR integration credentials. Use when onboarding a healthcare org to Abridge, configuring Epic/Athena integration, or setting up developer sandbox access for ambient AI documentation. Trigger: "install abridge", "setup abridge", "abridge auth", "configure abridge credentials".
Configure Abridge ambient AI platform credentials and EHR integration tokens. Abridge is an enterprise clinical documentation platform — it does not have a public npm/pip SDK. Integration happens through EHR-embedded workflows (Epic Pal, Athena, eClinicalWorks) and partner API access.
# Abridge uses partner-issued credentials, not self-service API keys
# Contact your Abridge sales engineer for:
# 1. Partner API client_id and client_secret
# 2. Organization ID (org_id)
# 3. Sandbox environment URL
# Store credentials securely (never in source control)
cat > .env.local << 'EOF'
ABRIDGE_CLIENT_ID=partner_xxxxxxxxxxxx
ABRIDGE_CLIENT_SECRET=secret_xxxxxxxxxxxx
ABRIDGE_ORG_ID=org_xxxxxxxxxxxx
ABRIDGE_BASE_URL=https://api.abridge.com/v1
ABRIDGE_SANDBOX_URL=https://sandbox.api.abridge.com/v1
EOF
chmod 600 .env.local
echo ".env.local" >> .gitignore
// src/config/abridge-ehr.ts
// Abridge is Epic's first "Pal" — integration uses Epic's FHIR R4 APIs
interface AbridgeEpicConfig {
epicClientId: string; // From Epic App Orchard registration
epicFhirBaseUrl: string; // e.g., https://fhir.epic.com/interconnect-fhir-oauth
abridgeOrgId: string; // From Abridge partner portal
abridgeApiBaseUrl: string; // Partner API endpoint
smartLaunchUrl: string; // SMART on FHIR launch URL
}
const config: AbridgeEpicConfig = {
epicClientId: process.env.EPIC_CLIENT_ID!,
epicFhirBaseUrl: process.env.EPIC_FHIR_BASE_URL!,
abridgeOrgId: process.env.ABRIDGE_ORG_ID!,
abridgeApiBaseUrl: process.env.ABRIDGE_BASE_URL!,
smartLaunchUrl: `${process.env.EPIC_FHIR_BASE_URL}/oauth2/authorize`,
};
export default config;
// src/auth/smart-fhir-auth.ts
import axios from 'axios';
interface SmartTokenResponse {
access_token: string;
token_type: 'Bearer';
expires_in: number;
scope: string;
patient?: string; // Patient context from EHR launch
encounter?: string; // Encounter context from EHR launch
}
async function getAbridgeToken(
authCode: string,
redirectUri: string
): Promise<SmartTokenResponse> {
const tokenUrl = `${process.env.EPIC_FHIR_BASE_URL}/oauth2/token`;
const response = await axios.post(tokenUrl, new URLSearchParams({
grant_type: 'authorization_code',
code: authCode,
redirect_uri: redirectUri,
client_id: process.env.EPIC_CLIENT_ID!,
client_secret: process.env.EPIC_CLIENT_SECRET!,
}), {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
});
return response.data;
}
export { getAbridgeToken, SmartTokenResponse };
// src/auth/verify-connection.ts
import axios from 'axios';
async function verifyAbridgeConnection(): Promise<boolean> {
try {
// Verify partner API access
const response = await axios.get(
`${process.env.ABRIDGE_BASE_URL}/health`,
{
headers: {
'Authorization': `Bearer ${process.env.ABRIDGE_CLIENT_SECRET}`,
'X-Org-Id': process.env.ABRIDGE_ORG_ID!,
},
timeout: 5000,
}
);
console.log('Abridge connection verified:', response.data.status);
return response.status === 200;
} catch (error) {
console.error('Abridge connection failed:', error);
return false;
}
}
.env.local with partner credentials (chmod 600, gitignored)| Error | Cause | Solution |
|---|---|---|
401 Unauthorized | Invalid partner credentials | Contact Abridge sales engineer for new credentials |
403 Forbidden | Org not provisioned | Verify org_id matches your Abridge contract |
| SMART launch failure | Epic App Orchard not configured | Register app in Epic App Orchard first |
| CORS errors | Wrong redirect URI | Update allowed redirect URIs in Epic portal |
| Certificate error | Self-signed cert in sandbox | Use Abridge-provided sandbox CA certificate |
.env.local is gitignored and chmod 600After authentication is configured, proceed to abridge-hello-world for your first ambient session test.