Overview
GLYDE Unity provides a comprehensive, bi-directional integration with AviontéBOLD, the staffing industry's enterprise applicant tracking and workforce management platform. This integration enables recruiters, hiring managers, and AI agents to access Avionté talent records, job postings, applications, and activities through a unified API layer.
The integration spans the full GLYDE ecosystem: Microsoft Teams, Copilot for Microsoft 365,
Power Automate, the GLYDE Unity SDK, and the Model Context Protocol (MCP) for AI agent consumption.
All operations are tenant-isolated using client_uuid and authenticated via OAuth2
client credentials with automatic token management.
Avionté data flows through GLYDE Unity's index-centric normalization pipeline, ensuring consistent data representation across all consumers regardless of Avionté's native field naming conventions (e.g., "Talent" instead of "Candidate", "Assignment" instead of "Placement").
Architecture & Data Flow
GLYDE Unity acts as an orchestration layer between consuming platforms (Teams, Copilot, Power Platform, SDK) and the AviontéBOLD REST API. Requests are authenticated, normalized, and routed through the integration adaptor which handles entity-specific business logic, data mapping, and error classification.
Teams / Copilot / Power Platform / SDK / MCP Client
|
v
┌─────────────────────────────────────┐
│ GLYDE Unity REST API │
│ api.glydeunity.com/api/unity/* │
│ │
│ ┌─ Auth Middleware ─────────────┐ │
│ │ API Key / JWT / Trusted App │ │
│ │ Role-based access control │ │
│ └──────────────────────────────┘ │
│ │
│ ┌─ Workflow Route Handler ──────┐ │
│ │ Validation + Orchestration │ │
│ └──────────────────────────────┘ │
│ | │
│ v │
│ ┌─ Avionté Integration Adaptor ─┐ │
│ │ candidates.ts / jobs / etc. │ │
│ │ Template Method Pattern │ │
│ │ Data Mapping (Index-centric) │ │
│ └──────────────────────────────┘ │
│ | │
│ v │
│ ┌─ Avionté External Connector ──┐ │
│ │ avionte-connector.ts │ │
│ │ ConnectorAuthManager (OAuth2)│ │
│ │ OpenAPI-driven operations │ │
│ └──────────────────────────────┘ │
└──────────────|──────────────────────┘
|
v
┌──────────────────────────────────────┐
│ AviontéBOLD REST API │
│ {tenant}.avionte.com/api/v1/* │
│ │
│ Talent | Job | Application | │
│ Company | Assignment | Activity │
└──────────────────────────────────────┘
Teams, Copilot, Power Automate, or SDK sends a request to the GLYDE Unity API (e.g., POST /api/unity/candidates) with API key + user context headers.
Unity validates the API key, resolves client_uuid and user_uuid, checks role-based access, and routes to the appropriate workflow handler.
The workflow handler calls getIntegrationAdaptor('avionte') to obtain the Avionté-specific adaptor based on the client's configured ATS integration type.
The ConnectorAuthManager automatically retrieves or refreshes OAuth2 tokens for the client's Avionté tenant. Sessions are cached in Redis with automatic expiration.
The Avionté connector executes the operation against the AviontéBOLD REST API using the OpenAPI specification for request validation and dynamic operation handling.
Response data flows through the index-centric pipeline: ATS response → CandidateDataMapper → ATSCacheCandidateSearchIndex (canonical format) → searchIndexToCandidate() → CRUD schema.
The normalized response is returned to the consuming platform in the GLYDE Unity standard response format, with consistent field names and structures regardless of ATS-specific conventions.
Authentication
OAuth2 Client Credentials
Avionté uses OAuth2 client credentials flow for machine-to-machine authentication.
GLYDE Unity's ConnectorAuthManager handles the complete token lifecycle automatically:
initial authentication, session caching in Redis, token refresh before expiration, and tenant header injection.
Clients never need to manage tokens directly.
Credential Fields
| Field | Description | Required |
|---|---|---|
client_id |
OAuth2 client identifier issued by Avionté | Yes |
client_secret |
OAuth2 client secret for token exchange | Yes |
tenant |
Avionté tenant identifier (injected as Tenant header on all API calls) | Yes |
x_api_key |
Optional API key sent as X-Api-Key header for additional authorization | No |
service_url |
Base URL for the AviontéBOLD API (defaults to standard endpoint) | No |
auth_url |
OAuth2 token endpoint URL (defaults to /authorize/token) | No |
Session Management
Sessions are cached in Redis with the key pattern session:client:{client_uuid}:integration:avionte (encrypted Unity session blob).
The session includes the OAuth2 access token, expiration timestamp, tenant identifier, and resolved service URL.
TTL follows the platform profile (default connector cache window). Sessions are re-validated on each request via ConnectorAuthManager.
Token Refresh
The AvionteConnectorAuthManager checks token expiration before each API call.
If the token is expired or within the refresh threshold, a new token is obtained via the client credentials flow.
The OAuth2 scope is avionte.aero.compasintegrationservice. JWT tokens are validated
for expiration using the exp claim.
Capabilities
| Operation | Endpoint | ATS Op |
|---|---|---|
| Create Candidate Create a new talent record in Avionté with GLYDE DB sync and search indexing |
POST /api/unity/candidates |
createTalent |
| Get Candidate Retrieve talent by GLYDE UUID or Avionté talent ID with data aggregation |
GET /api/unity/candidates/:candidateUUID |
getTalent |
| Update Candidate Update talent record (full PUT, not PATCH) with change propagation |
PUT /api/unity/candidates/:candidateUUID |
updateTalent |
| Search Candidates Search talent records using Avionté query parameters |
POST /api/unity/search/aiSearchIndex |
QueryMultipleTalents |
| Operation | Endpoint | ATS Op |
|---|---|---|
| Create Job Create a new job posting in Avionté |
POST /api/unity/jobs |
createJob |
| Get Job Retrieve job by UUID or Avionté job ID |
GET /api/unity/jobs/:jobUUID |
getJob |
| Update Job Update job posting (full PUT) |
PUT /api/unity/jobs/:jobUUID |
updateJob |
| Operation | Endpoint | ATS Op |
|---|---|---|
| Create Application Create a new application linking a talent to a job |
POST /api/unity/applications |
createApplication |
| Get Application Retrieve application by UUID |
GET /api/unity/applications/:applicationUUID |
getApplication |
| Operation | Endpoint | ATS Op |
|---|---|---|
| Send Email Send email via Mailgun with automatic activity logging to Avionté |
POST /api/unity/messages/send-email |
Mailgun + /v1/talent/{id}/activity |
| Operation | Endpoint | ATS Op |
|---|---|---|
| Add Candidate Note Create an activity note on a talent record in Avionté |
POST /api/unity/candidates/:candidateUUID/notes |
/v1/talent/{talentId}/activity |
| Log Email Activity Log email communication as an activity note with Mailgun tracking |
POST /api/unity/candidates/:candidateUUID/notes |
/v1/talent/{talentId}/activity |
| Operation | Endpoint | ATS Op |
|---|---|---|
| Conversational AI Search Natural language search across candidates and jobs using GLYDE AI |
POST /api/unity/search/conversationalAISearch |
Azure AI Search Index (not direct ATS) |
| ATS Proxy Search Direct search against Avionté API via ATS proxy |
POST /api/unity/proxy/avionte/QueryMultipleTalents |
QueryMultipleTalents |
| Operation | Endpoint | ATS Op |
|---|---|---|
| Discover Operations List all available Avionté API operations with schemas and metadata |
GET /api/unity/proxy/discover/avionte |
OpenAPI spec introspection |
| Execute Operation Execute any discovered Avionté operation dynamically |
POST /api/unity/proxy/avionte/:operationId |
Dynamic (per operationId) |
| Entity Metadata Get field-level metadata for an Avionté entity type |
GET /api/unity/proxy/meta/avionte/:entity |
OpenAPI schema introspection |
Platform Access
GLYDE Unity provides unified access to AviontéBOLD across multiple Microsoft 365 and developer platforms.
Access Avionté data through the GLYDE Unity bot in Teams channels and chats.
Access: Teams Bot Framework → GLYDEBuddy Proxy → Unity REST API → Avionté Adaptor
- Search candidates and jobs via conversational AI
- View candidate profiles and application status
- Send emails with automatic Avionté activity logging
- Create and update talent records
- Receive notifications for ATS events
Use natural language to interact with Avionté data through the GLYDE Copilot declarative agent.
Access: Copilot Agent → MCP Bridge (GLYDEBuddy) → Unity REST API → Avionté Adaptor
- Natural language queries ("Find Java developers in Chicago")
- AI-powered candidate matching and ranking
- Multi-step workflows (search → review → contact)
- ATS proxy operations for advanced queries
- Entity metadata inspection for field discovery
Automate Avionté workflows using the GLYDE Unity Power Platform connector.
Access: Power Platform Connector → Unity REST API → Avionté Adaptor
- Trigger flows on candidate or job events
- Create candidates from forms or external sources
- Sync data between Avionté and other business systems
- Build custom Power Apps for recruiter workflows
- Schedule bulk operations and reports
Programmatic access via the @glydeunity/glyde-api-client npm package.
Access: SDK Client → Unity REST API → Avionté Adaptor
- Type-safe TypeScript API client with Zod validation
- FlexibleUnityApi for multiple input formats (UUID, ATS ID, object)
- Direct workflow operations and ATS proxy access
- Automatic authentication and session management
- OpenAPI-generated client with full IntelliSense
AI agents and LLMs access Avionté operations through the MCP interface.
Access: MCP Client → Unity MCP Endpoints → Workflow Handlers → Avionté Adaptor
- 100+ discoverable tools auto-generated from workflow routes
- ATS proxy tools for dynamic operation discovery and execution
- Entity metadata tools for field-level schema inspection
- Filtered schemas (x-NoMCP fields excluded for security)
- JSON-RPC and REST invocation protocols
Voice-based interaction with Avionté data for candidate screening and discovery.
Access: Voice SDK → Unity Voice API → Deepgram → Function Execution → Avionté Adaptor
- Voice-powered candidate screening interviews
- Job discovery and application via voice
- Real-time candidate creation during conversations
- OTP verification for candidate identity
- Context-aware conversation modes (screening, discovery, application)
Entity Mappings
AviontéBOLD uses different entity names and field conventions. GLYDE Unity normalizes these through the index-centric data pipeline.
Candidate → Talent
| Unity Field | AviontéBOLD Field | Direction | Notes |
|---|---|---|---|
first_name |
firstName |
Bidirectional | Required |
last_name |
lastName |
Bidirectional | Required |
email |
email |
Bidirectional | Required, used for deduplication |
phone |
phone |
Bidirectional | — |
address |
address.street |
Bidirectional | — |
city |
address.city |
Bidirectional | — |
state |
address.state |
Bidirectional | — |
zip |
address.zipCode |
Bidirectional | — |
candidate_uuid |
id (via ExternalMapping) |
Read | Mapped through GLYDE ExternalMapping table |
Job → Job
| Unity Field | AviontéBOLD Field | Direction | Notes |
|---|---|---|---|
title |
title |
Bidirectional | — |
description |
description |
Bidirectional | — |
status |
status |
Bidirectional | Default: "Open" |
category |
department |
Bidirectional | — |
employment_type |
jobType |
Bidirectional | — |
salary_min / salary_max |
salary.min / salary.max |
Bidirectional | Parsed as float, currency: USD |
address + city + state |
location |
Write | Concatenated on write |
Application → Application
| Unity Field | AviontéBOLD Field | Direction | Notes |
|---|---|---|---|
application_uuid |
id |
Read | — |
candidate_uuid |
talentId |
Write | — |
job_uuid |
jobId |
Write | — |
Placement → Assignment
| Unity Field | AviontéBOLD Field | Direction | Notes |
|---|---|---|---|
placement_uuid |
id |
Read | Avionté uses "Assignment" terminology |
Endpoint Reference
| Method | Unity Endpoint | Description | ATS Operation | Auth |
|---|---|---|---|---|
POST |
/api/unity/candidates |
Create candidate | createTalent |
API Key + User UUID |
GET |
/api/unity/candidates/:uuid |
Get candidate by ID | getTalent |
API Key + User UUID |
PUT |
/api/unity/candidates/:uuid |
Update candidate | updateTalent |
API Key + User UUID |
POST |
/api/unity/jobs |
Create job | createJob |
API Key + User UUID |
GET |
/api/unity/jobs/:uuid |
Get job by ID | getJob |
API Key + User UUID |
PUT |
/api/unity/jobs/:uuid |
Update job | updateJob |
API Key + User UUID |
POST |
/api/unity/applications |
Create application | createApplication |
API Key + User UUID |
GET |
/api/unity/applications/:uuid |
Get application | getApplication |
API Key + User UUID |
POST |
/api/unity/candidates/:uuid/notes |
Add candidate note | /v1/talent/{id}/activity |
API Key + User UUID |
POST |
/api/unity/messages/send-email |
Send email + log activity | Mailgun + Activity API |
API Key + User UUID |
POST |
/api/unity/search/conversationalAISearch |
AI-powered search | Azure AI Search |
API Key + User UUID |
GET |
/api/unity/proxy/discover/avionte |
Discover ATS operations | OpenAPI introspection |
API Key + User UUID |
POST |
/api/unity/proxy/avionte/:opId |
Execute ATS operation | Dynamic |
API Key + User UUID |
GET |
/api/unity/proxy/meta/avionte/:entity |
Get entity metadata | Schema introspection |
API Key + User UUID |
Events & Webhooks
Avionté webhook/event support is currently in stub implementation. The normalizer
(avionte-normalizer.ts) is prepared for future inbound event processing but does not
currently process live webhooks. Outbound events (GLYDE → Avionté) are supported through
activity logging on candidate operations.
Configuration Requirements
-
OAuth2 Client CredentialsREQUIRED
Avionté issues client_id and client_secret for API access. These must be stored in Azure Key Vault via the GLYDE Unity client configuration.
client_id: "glyde-integration-client" -
Tenant IdentifierREQUIRED
The Avionté tenant identifier is required for all API calls and is injected as the Tenant HTTP header. This is typically the company's Avionté instance identifier.
tenant: "acme-staffing" -
Activity Type ConfigurationREQUIRED
Client-specific activity type IDs for logging notes in Avionté. Configured in the client's integration_data.AvionteConfiguration object.
AvionteConfiguration.general_activity_type: 42 -
New Submission User IDREQUIRED
The Avionté user ID used as the author for GLYDE-created activities. Configured in integration_data.AvionteConfiguration.new_submission_user.
AvionteConfiguration.new_submission_user: 1001 -
Human Review Activity TypeREQUIRED
Activity type ID for "Glyde Contact Requested" notes (human_review flag). Configured per-client in AvionteConfiguration.Talent.human_review_activity_type.
AvionteConfiguration.Talent.human_review_activity_type: 15 -
Integration TypeREQUIRED
The client's integration_type must be set to "avionte" in the GLYDE client configuration for the adaptor router to select the correct integration.
integration_type: "avionte" -
API Base URL (Optional)
Override the default AviontéBOLD API base URL if using a non-standard endpoint.
service_url: "https://api.avionte.com"
Known Limitations
- Candidate entity is called "Talent" in Avionté — all API operations use this naming convention.
- Placement entity is called "Assignment" in Avionté.
- Record updates use full PUT (not PATCH) — all fields must be provided on updates, not just changed fields.
- Application updates return
NOT_IMPLEMENTED— Avionté does not support direct application modifications through the current API version. - Webhook/inbound event processing is stub-only — the normalizer is prepared but not yet processing live events.
- The Avionté OpenAPI spec uses camelCase field naming, which differs from GLYDE Unity's snake_case convention. Mapping is handled automatically.
- Pagination uses offset/limit pattern with a default limit of 25 records per page.
- The
Tenantheader is required for all API calls and is automatically injected by the connector.
Version History
- Empty Tier-1 detection: Avionté returns
isn't a web applicant(contraction); phrase matching updated so production no longer warns on this expected 404.
- Applications:
getWebApplicationsForTalentHTTP 404 with “not a web applicant” is treated as empty Tier 1 (success with no rows), not an API error. - Base connector: expected Tier-1 empty responses log at debug instead of warn to reduce production noise.
- Initial integration guide creation
- Documented OAuth2 client credentials authentication flow
- Documented candidate CRUD operations with index-centric data mapping
- Documented job and application operations
- Documented email messaging with Avionté activity logging
- Documented activity/note creation with configurable activity types
- Documented ATS proxy discovery and dynamic operation execution
- Documented platform access patterns (Teams, Copilot, Power Platform, SDK, MCP, Voice)
- Documented entity mappings (Talent, Job, Application, Assignment)
- Documented configuration requirements and known limitations