GLYDE Unity + JobDiva

GLYDE Unity provides a deep ATS integration with JobDiva, the enterprise staffing ATS, through its V2 API: full candidate CRUD (get, find, create, update, hotlists), job create/update, Submittal (appl...

Guide v1.0.0 Unity API v1.34.0 Updated September 12, 2026

Overview

GLYDE Unity provides a deep ATS integration with JobDiva, the enterprise staffing ATS, through its V2 API: full candidate CRUD (get, find, create, update, hotlists), job create/update, Submittal (application) create/update and reads, candidate notes/activities with email logging, smart live search with automatic query routing, and 330 operations exposed through the GLYDE ATS proxy.

The integration spans the full GLYDE platform: Microsoft Teams, Copilot for Microsoft 365, Power Automate, the GLYDE Unity SDK, the Model Context Protocol (MCP) for AI agents, and the GLYDE Voice Agent. All operations are tenant-isolated using client_uuid and authenticated via per-tenant service credentials (clientid / username / password) exchanged for a 1-hour JobDiva API token managed automatically by the connector.

JobDiva data flows through GLYDE Unity's index-centric normalization pipeline, converting JobDiva's UPPER_CASE create fields and camelCase read fields to GLYDE's canonical snake_case format. Search results are cached in Redis and queued for background Azure AI Search indexing via BullMQ, so the GLYDE index (powering conversational and weighted search) keeps improving as recruiters use the platform.

Architecture & Data Flow

GLYDE Unity acts as an orchestration layer between consuming platforms (Teams, Copilot, Power Platform, SDK) and the JobDiva V2 API (https://api.jobdiva.com). Requests are authenticated, normalized, and routed through the integration adaptor's 8 entity sub-adaptors (candidates, jobs, applications, activities/notes, activities-unified, messages, search). The ATS search workflow classifies each query — numeric id lookup, simple name/email find, or broad TalentSearch — before calling JobDiva, and every search feeds the GLYDE cache and index.

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   │   │
    │  └──────────────────────────────┘   │
    │              |                       │
    │              v                       │
    │  ┌─ JobDiva Integration Adaptor ──┐ │
    │  │  8 Entity Sub-Adaptors:        │ │
    │  │  candidates / jobs /           │ │
    │  │  applications / activities /   │ │
    │  │  activities-unified / messages │ │
    │  │  search                        │ │
    │  │                                │ │
    │  │  Query Routing (id vs find vs  │ │
    │  │  TalentSearch)                 │ │
    │  │  Template Method Pattern       │ │
    │  │  Index-centric Data Mapping    │ │
    │  └────────────────────────────────┘ │
    │              |                       │
    │              v                       │
    │  ┌─ JobDiva External Connector ───┐ │
    │  │  jobdiva-connector.ts          │ │
    │  │  330 OpenAPI Operations (V2)   │ │
    │  │  JobDivaConnectorAuthManager   │ │
    │  │  /apiv2/authenticate → 1h      │ │
    │  │  token, Redis-cached           │ │
    │  └────────────────────────────────┘ │
    └──────────────|──────────────────────┘
                   |
                   v
    ┌──────────────────────────────────────┐
    │         JobDiva V2 API               │
    │  https://api.jobdiva.com             │
    │  /apiv2/...                          │
    │                                      │
    │  Candidate | Job | Submittal |       │
    │  Company | Note | CandidateHotlist   │
    └──────────────────────────────────────┘
1
Platform Request

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.

2
Authentication & Routing

Unity validates the API key, resolves client_uuid and user_uuid, checks role-based access, and routes to the appropriate workflow handler.

3
Adaptor Selection

The workflow handler calls getIntegrationAdaptor('jobdiva') based on the client's configured integration_type.

4
Auto-Authentication (Service Token)

The JobDivaConnectorAuthManager loads the tenant's clientid/username/password from Azure Key Vault (falling back to legacy integration data, then syncing back to Key Vault) and calls GET /apiv2/authenticate. The raw response body is the API token, cached in Redis for 1 hour.

5
ATS API Call

The JobDivaConnector executes the operation against the JobDiva V2 API using the OpenAPI specification (330 operations). The token is sent in the Authorization header (no Bearer prefix).

6
Data Normalization

Response data flows through the index-centric pipeline: JobDiva row → JobDiva mapping profile → ATSCacheCandidateSearchIndex (canonical format). UPPER_CASE and camelCase source fields, comma-string skills, and mixed date formats are normalized to GLYDE's snake_case schema with ISO dates.

7
Cache & Index Write-Through

Search results are cached per profile in Redis, up to 1000 candidate ids are queued for background Azure AI Search indexing (BullMQ, 100ms inter-job delay), and GLYDE UUIDs are resolved/backfilled via ExternalMappings.

Authentication

Per-tenant service credentials with 1-hour API token (apiv2/authenticate)

JobDiva authenticates with a tenant-scoped service account. GLYDE Unity's JobDivaConnectorAuthManager loads the tenant's clientid, username, and password from Azure Key Vault (falling back to legacy integration_data credentials, which are synced back to Key Vault after a successful auth) and calls GET {base}/apiv2/authenticate?clientid=...&username=...&password=.... The raw response body is the API token. Note this is not RFC 6749 OAuth2 — it is a simple credential-to-token exchange handled automatically from client_uuid with no manual token handling.

Credential Fields

FieldDescriptionRequired
clientid JobDiva client/tenant id (numeric, e.g. "1460"). Required for the authenticate call. Yes
username JobDiva API service account username. Required. Yes
password JobDiva API service account password. Required. Stored in Azure Key Vault. Yes
api_url Optional base URL override (defaults to https://api.jobdiva.com; Unity service_url). No
authorization_token Legacy pre-supplied JobDiva token; still accepted but superseded by the credential-based flow. No

Session Management

Sessions are cached in Redis with the key pattern session:client:{clientUuid}:integration:jobdiva. The session carries the API token with a fixed 1-hour TTL. On expiry the connector re-authenticates transparently on the next request. There are no deployment-global JobDiva credentials — authentication fails with an explicit error if the tenant has no Key Vault or integration-data credentials.

Token Refresh

There is no refresh token: when the 1-hour token lapses, the manager simply re-runs /apiv2/authenticate with the stored service credentials. Auth failures on search routes surface as JOBDIVA_AUTH_FAILED (HTTP 401) with guidance to re-check the tenant's stored credentials.

Capabilities

📦 Two API layers, one integration

This integration exposes JobDiva through two distinct layers, and every capability below tells you which layer it runs on. Reading the table without this context is the most common source of confusion, so here is the distinction:

1. GLYDE Unity workflow endpoints (the Endpoint column) are GLYDE's own, ATS-agnostic APIs (/api/unity/*). They are the recommended path for every consumer — Teams, Copilot, Power Automate, the Chrome Extension, and the SDK. Each one is an orchestrated workflow: GLYDE handles authentication, tenant isolation, validation, data normalization into GLYDE's canonical format, database sync, and search indexing. You talk to GLYDE in GLYDE's vocabulary; GLYDE talks to the ATS behind the scenes.

2. ATS proxied calls (the ATS Op column) are the raw JobDiva REST operations the workflow invokes under the hood. You normally never call these directly — but you can, through the ATS proxy (/api/unity/proxy/jobdiva/:operationId and the discover/inspect meta-operations). The proxy executes any operation from JobDiva's OpenAPI specification verbatim: request and response shapes are the vendor's own, no GLYDE normalization is applied. Use it for advanced or niche operations GLYDE has not (yet) wrapped in a workflow — it inherits GLYDE's authentication, tenant isolation, and OAuth token management, but you are speaking the vendor's dialect, so field names, casing, and payloads match the JobDiva spec exactly.

Rule of thumb: start with the workflow layer; drop to the proxy only when a workflow for what you need does not exist.

Status badges on each capability card grade the workflow layer coverage for that entity:

  • full — complete workflow coverage: create, read, update (where the ATS API allows it), and GLYDE-side persistence/indexing all work.
  • partial — the entity is supported, but one or more workflow operations are unavailable, not supported by the ATS API itself, or served differently (e.g. reads resolved from the GLYDE search index instead of a live ATS call, missing job-note support, or a NOT_IMPLEMENTED update). Read each operation's notes for the specific gap. The raw operations may still be reachable through the ATS proxy.
  • proxy only — no GLYDE workflow wraps this entity; access is exclusively via raw proxied ATS calls with vendor-native payloads.
  • not supported — neither a workflow nor a usable proxy operation exists for this entity.
Candidates full
OperationEndpointATS Op
Create Candidate
Create a new candidate in JobDiva with GLYDE DB sync and search indexing
POST /api/unity/candidates createCandidateUsingPOST_1
Update Candidate
Update an existing candidate; resolves the ATS id via ExternalMapping and invalidates the per-client ATS search cache on success
POST /api/unity/candidates/:candidateUUID updateCandidateProfileUsingPOST_1
Get Candidate by UUID
Retrieve candidate by GLYDE UUID via ExternalMapping lookup, then JobDiva candidate profile (index-first)
GET /api/unity/candidates/:candidateUUID getCandidateProfileUsingGET_1
Get Candidate by ATS ID
Retrieve candidate directly by JobDiva candidateId (index-first, Redis cache + live merge)
GET /api/unity/candidates/:candidateUUID?ats_candidate_id=&ats=jobdiva getCandidateProfileUsingGET_1
Find Candidate
Find a candidate by firstName/lastName/email/phone (AND-combined natively by JobDiva)
POST Internal adaptor operation (findCandidate) searchCandidateProfileUsingPOST_1
List Candidate Hotlists
List a candidate's hotlists (talent pools) by ATS id
GET Internal adaptor operation (listCandidateHotlistsByAtsId) CandidateHotlistListUsingGET_1
Search Candidates
Minimal profile search (name/email) via the profile search operation
POST /api/unity/search/atsSearch searchCandidateProfileUsingPOST_1 / TalentSearchUsingPOST
Jobs partial
OperationEndpointATS Op
Create Job
Create a new job in JobDiva; recruiter/owner ids are set from the recruiter ExternalMapping when available
POST /api/unity/jobs createJobUsingPOST_1
Update Job
Update an existing job; resolves the job ExternalMapping and sets jobId + recruiter fields
POST /api/unity/jobs/:jobUUID updateJobUsingPOST_1
Get Job by UUID / ATS ID
Served from the GLYDE Azure index when a hit exists; there is no live JobDiva job-get leg in the adaptor
GET /api/unity/jobs/:jobUUID index-backed
Applications (Submittals) partial
OperationEndpointATS Op
Create / Update Application
JobDiva Submittal create is an upsert — create and update both use the same operation; flat candidateId/jobId/recruiterid/ownerId on the body
POST /api/unity/applications (+ PUT /api/unity/applications/:uuid) createJobApplicationUsingPOST_1
List Applications by ATS Candidate ID
List a candidate's Submittal records (application records)
GET /api/unity/applications/candidate/:atsCandidateId CandidateApplicationRecordsUsingGET_1
Find Application by ATS Candidate ID
Find applications filtered by candidate — the only supported filter; externalRef / job-only / status filters are rejected
POST Internal adaptor operation (findApplication) CandidateApplicationRecordsUsingGET_1
Activities & Notes partial
OperationEndpointATS Op
Create Candidate Note (Activity)
Create a candidate note mapped from a GLYDE activity, with action type classification (Called→phone_call, Emailed→email_sent, Interview Scheduled→interview_scheduled, SMS Sent→sms_sent, Note→general_note, ...)
POST /api/unity/activities createCandidateNoteUsingPOST_1
Get Candidate Notes
Retrieve a candidate's notes from JobDiva
GET /api/unity/activities/candidate/:entityId getCandidateNotesUsingGET
Job Notes
Not implemented — the connector does not yet expose JobDiva job-order note endpoints
POST — NOT_IMPLEMENTED
Messages (Email) full
OperationEndpointATS Op
Send Email
Send email via Mailgun with automatic candidate-note creation in JobDiva for activity logging
POST /api/unity/messages/send-email Mailgun + createCandidateNoteUsingPOST_1
Search full
OperationEndpointATS Op
ATS Search (Smart Routing)
Live candidate search with automatic query routing: numeric-only query → candidate detail lookup; email or ≤3-word simple queries → profile search; everything else → broad TalentSearch
POST /api/unity/search/atsSearch CandidateDetailUsingGET_1 / searchCandidateProfileUsingPOST_1 / TalentSearchUsingPOST
AI Search Index
Search the GLYDE normalized Azure AI Search index (candidates/jobs) with client_uuid scoping
POST /api/unity/search/aiSearchIndex Azure AI Search Index (not direct ATS)
Conversational AI Search
Natural language search across candidates and jobs using GLYDE AI with Azure AI Search
POST /api/unity/search/conversationalAISearch Azure AI Search Index (not direct ATS)
ATS Proxy (Discovery) full
OperationEndpointATS Op
Discover Operations
List all 330 available JobDiva V2 API operations with schemas, parameters, and LLM metadata
GET /api/unity/proxy/discover/jobdiva OpenAPI spec introspection
Inspect Operation
Inspect a single operation's input schema before executing
GET /api/unity/proxy/inspect/jobdiva/:operationId OpenAPI spec introspection
Execute Operation
Execute any discovered JobDiva operation dynamically with auto-authentication
POST /api/unity/proxy/jobdiva/:operationId Dynamic (per operationId)
Entity Field Metadata
Get field-level metadata for a JobDiva entity type
GET /api/unity/proxy/meta/jobdiva/:entity getEntityMetadata

Platform Access

GLYDE Unity provides unified access to JobDiva across multiple Microsoft 365 and developer platforms.

💬 Microsoft Teams

Access JobDiva data through the GLYDE Unity bot in Teams channels and chats.

Access: Teams Bot Framework → GLYDEBuddy Proxy → Unity REST API → JobDiva Adaptor

  • Search candidates and jobs via conversational AI
  • View candidate profiles with JobDiva data
  • Send emails with automatic JobDiva note logging
  • Create and manage candidate notes
  • Create candidates, jobs, and Submittals
  • Access ATS proxy for advanced JobDiva queries
✨ Copilot for Microsoft 365

Use natural language to interact with JobDiva data through the GLYDE Copilot declarative agent.

Access: Copilot Agent → MCP Bridge (GLYDEBuddy) → Unity REST API → JobDiva Adaptor

  • Natural language queries ("Find Java developers in Chicago in JobDiva")
  • AI-powered candidate matching and ranking
  • Multi-step workflows (search → review → submit)
  • ATS proxy with LLM-optimized operation metadata
  • Entity and field metadata inspection for schema discovery
⚡ Power Automate / Power Apps

Automate JobDiva workflows using the GLYDE Unity Power Platform connector.

Access: Power Platform Connector → Unity REST API → JobDiva Adaptor

  • Trigger flows on JobDiva webhook events (Candidate, Job, JobApplication, Submission)
  • Create candidates, jobs, and Submittals from forms or external sources
  • Sync data between JobDiva and other business systems
  • Schedule bulk operations and reports
📦 GLYDE Unity SDK

Programmatic access via the @glydeunity/glyde-api-client npm package.

Access: SDK Client → Unity REST API → JobDiva 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
🤖 MCP (Model Context Protocol)

AI agents and LLMs access JobDiva operations through the MCP interface.

Access: MCP Client → Unity MCP Endpoints → Workflow Handlers → JobDiva Adaptor

  • 100+ discoverable tools auto-generated from workflow routes
  • ATS proxy tools for dynamic JobDiva operation discovery and execution (330 operations)
  • Entity metadata tools for field-level schema inspection
  • LLM metadata with per-operation guidance (Authorization and clientid hidden as server-provided)
  • JSON-RPC and REST invocation protocols
🎤 GLYDE Voice Agent

Voice-based interaction with JobDiva data for candidate screening and discovery.

Access: Voice SDK → Unity Voice API → Deepgram → Function Execution → JobDiva Adaptor

  • Voice-powered candidate screening interviews
  • Job discovery and application via voice (Submittal creation)
  • Real-time candidate creation during conversations
  • OTP verification for candidate identity
  • Context-aware conversation modes (screening, discovery, application)

Entity Mappings

JobDiva uses different entity names and field conventions. GLYDE Unity normalizes these through the index-centric data pipeline.

Candidate → Candidate (UPPER_CASE on create, camelCase on update/read)

Unity FieldJobDiva FieldDirectionNotes
first_name FIRSTNAME (create) / firstName (update/read) Bidirectional Required on create
last_name LASTNAME / lastName Bidirectional Required on create
email EMAIL / email (ALTERNATEEMAIL tracked) Bidirectional Required on create
phone CELLPHONE (create) / phone; CELLPHONE, PHONE1/2, HOMEPHONE, WORKPHONE on read Bidirectional —
address ADDRESS1 / address Bidirectional —
city / state / zip CITY / STATE / ZIPCODE (read: zipCode) Bidirectional —
dob DATE_OF_BIRTH / dateOfBirth Bidirectional —
resume_text RESUME_TEXT / resumeText Bidirectional —
skills skills / skillSet Read Comma string normalized to array
last_job_title / last_employer title/currentTitle/occupation · company/currentCompany Read —
experience_years totalExperience / experienceYears Read String normalized to int
work_authorization workAuthorization / visaStatus Read Boolean normalized to Authorized / Not Authorized
created / updated DATECREATED / DATEUPDATED, DATEPROFILEUPDATED, dateLastModified Read ISO date or full datetime
candidate_uuid candidateId (via ExternalMapping) Read —

Job → Job

Unity FieldJobDiva FieldDirectionNotes
title title Bidirectional Required
description description Bidirectional Required
city locality Write Unity city maps to JobDiva locality
zip zip_code Write —
company companyName Write —
salary_min / salary_max salaryMin / salaryMax Write —
employment_type employmentType Write —
remote_job_type remoteJobType Write Truthy value → "Fully remote"
requirements requirements / skills Read —

Application → Submittal

Unity FieldJobDiva FieldDirectionNotes
ats_candidate_id candidateId Read —
ats_job_id jobId (fallback jobOrderId) Read —
ats_application_id applicationId / id Read —
status status / applicationStatus / stage Bidirectional Outbound statusMap: submitted→applied, under_review→in_review, interviewing→interview, offered→offer, hired, rejected, withdrawn; default applied
summary notes / comments Read —
application_source source Write Defaults to "api"
created createdDate / dateCreated / applicationDate Read —
candidate_uuid / job_uuid (write) candidateId / jobId (flat on body) Write —

Activity (Note) → CandidateNote

Unity FieldJobDiva FieldDirectionNotes
content note Write —
subtype: phone_call action: "Called" Bidirectional —
subtype: email_sent action: "Emailed" Bidirectional Emailed also types as email_log via the activity mapper
subtype: sms_sent action: "SMS Sent" Bidirectional —
subtype: interview_scheduled action: "Interview Scheduled" Bidirectional —
subtype: general_note action: "Note" Bidirectional Default action/subtype
action_date actiondate Write —
candidate_id / job_id candidateid / jobid Write —
recruiter_id recruiterid Write From JobDivaConfiguration.glyde_user_id

Endpoint Reference

MethodUnity EndpointDescriptionATS OperationAuth
POST /api/unity/candidates Create candidate createCandidateUsingPOST_1 API Key + User UUID
PUT /api/unity/candidates/:uuid Update candidate updateCandidateProfileUsingPOST_1 API Key + User UUID
GET /api/unity/candidates/:uuid Get candidate by ID (index-first) getCandidateProfileUsingGET_1 API Key + User UUID
GET /api/unity/candidates/:uuid?ats_candidate_id=&ats=jobdiva Get candidate by JobDiva candidateId getCandidateProfileUsingGET_1 API Key + User UUID
POST /api/unity/jobs Create job createJobUsingPOST_1 API Key + User UUID
PUT /api/unity/jobs/:uuid Update job updateJobUsingPOST_1 API Key + User UUID
POST /api/unity/applications Create Submittal (upsert) createJobApplicationUsingPOST_1 API Key + User UUID
GET /api/unity/applications/candidate/:atsCandidateId List applications by ATS candidate ID CandidateApplicationRecordsUsingGET_1 API Key + User UUID
POST /api/unity/activities Create activity (candidate note) createCandidateNoteUsingPOST_1 API Key + User UUID
GET /api/unity/activities/candidate/:entityId Get candidate notes getCandidateNotesUsingGET API Key + User UUID
POST /api/unity/messages/send-email Send email + log JobDiva note Mailgun + createCandidateNoteUsingPOST_1 API Key + User UUID
POST /api/unity/search/atsSearch ATS search with smart query routing TalentSearchUsingPOST / searchCandidateProfileUsingPOST_1 / CandidateDetailUsingGET_1 API Key + User UUID
POST /api/unity/search/aiSearchIndex AI search over the GLYDE index Azure AI Search API Key + User UUID
POST /api/unity/events/webhook/:sourceSystem Inbound JobDiva webhook receiver (manual registration) Webhook callback Webhook source resolution
GET /api/unity/proxy/discover/jobdiva Discover JobDiva operations (330) OpenAPI introspection API Key + User UUID
GET /api/unity/proxy/inspect/jobdiva/:operationId Inspect a JobDiva operation input schema OpenAPI introspection API Key + User UUID
POST /api/unity/proxy/jobdiva/:operationId Execute a JobDiva operation Dynamic API Key + User UUID
GET /api/unity/proxy/meta/jobdiva/:entity Get entity field metadata getEntityMetadata API Key + User UUID

Events & Webhooks

JobDiva supports inbound webhooks with manual registration. JobDiva exposes no remote webhook-management API in the connector spec, so GLYDE Unity records the default subscription (jobdiva-core-events) with awaiting-remote-registration semantics: the customer must manually point a JobDiva webhook at the Unity inbound receiver (POST /api/unity/events/webhook/:sourceSystem). Once deliveries flow, events are normalized to the canonical EventObject format via the passthrough normalizer and drive event-assisted cache refresh (4-hour TTL hint). There is no polling fallback and no event replay — missed deliveries require a direct entity refresh.

EventTriggerPayload
Candidate.* Candidate created, updated, or deleted in JobDiva candidateId, eventType, timestamp, vendor payload (passthrough-normalized)
Job.* Job created, updated, or deleted in JobDiva jobId, eventType, timestamp, vendor payload
JobApplication.* Job application change in JobDiva applicationId, eventType, timestamp, vendor payload
Submission.* Submittal change in JobDiva submissionId, eventType, timestamp, vendor payload

Configuration Requirements

  • JobDiva Service CredentialsREQUIRED

    Per-tenant API service account (clientid + username + password), stored in Azure Key Vault. There are no deployment-global JobDiva credentials; legacy integration_data credentials are honored and synced back to Key Vault after successful auth. Tenant credentials are NOT environment variables.

    clientid: "1460", username: "api_user", password: "********"

  • Integration TypeREQUIRED

    The client's integration_type must be set to "jobdiva" for the adaptor router to select the JobDiva integration.

    integration_type: "jobdiva"

  • GLYDE User ID (Notes)REQUIRED

    integration_data.JobDivaConfiguration.glyde_user_id is used as the recruiterid on candidate notes created by GLYDE (activities and email logging). Required for note writes.

    JobDivaConfiguration.glyde_user_id: 12345

  • API Base URL (Optional)

    Override the JobDiva API base URL (defaults to https://api.jobdiva.com) via the JOBDIVA_API_URL environment variable or a per-tenant service_url.

    JOBDIVA_API_URL="https://api.jobdiva.com"

  • Search Stack (Deployment-Level)

    The atsSearch cache/index pipeline requires AZURE_SEARCH_ENDPOINT, AZURE_SEARCH_API_KEY (or AZURE_SEARCH_KEY), and Redis (REDIS_HOST/PORT/PASSWORD) — shared infrastructure, not per-tenant.

    AZURE_SEARCH_ENDPOINT="https://.search.windows.net"

Known Limitations

  • Job Notes Not Supported: creating or reading JobDiva job-order notes is not implemented (the connector lacks the createJobOrderNote / getJobOrderNotes endpoints); only candidate notes are supported.
  • Application Entity Is Called "Submittal": Submittal create is an upsert (create and update share one operation) and returns a boolean, so the created application is read back by listing the candidate's applications and matching jobId.
  • Application Lookup by Id Not Supported: there is no get-by-application-id; use list-by-candidate and match. Find filters support atsCandidateId only — externalRef / job-only / status filters are rejected.
  • No Universal Query Language: JobDiva has no cross-entity query syntax; search is operation-specific parameters. Pagination also varies by operation (the canonical profile documents from/count with a default of 100).
  • Mixed Field-Name Conventions: candidate create uses UPPER_CASE fields (FIRSTNAME, LASTNAME, EMAIL, CELLPHONE) while update and reads use camelCase — the mapper handles both, but raw proxy callers must match the operation's convention.
  • atsSearch Forwards a Limited Filter Set: only email, firstName/lastName splits, and city/state/zipCode/country JSON filters reach JobDiva; Unity-side orderby/select are Azure-index concepts and are not forwarded.
  • Background Indexing Caps: atsSearch queues up to 1000 candidate ids per search for background Azure AI Search indexing (BullMQ, 100ms inter-job delay, max 3 concurrent workers).
  • Token TTL Fixed at 1 Hour: the /apiv2/authenticate token is re-obtained transparently; there is no refresh token. Auth failures surface as JOBDIVA_AUTH_FAILED (HTTP 401) on search routes.
  • Dates May Be Date-Only or Full Datetime: JobDiva mixes ISO date-only and full ISO datetime values; the mapper normalizes both.
  • Directory Is Index-Only: no live companies/contacts leg is wired (searchCompanyUsingPOST exists in the spec and the proxy tier-1 list, but is not surfaced as directory search). Rows enter the directory via POST /api/unity/directory/ingest imports or JobDiva webhooks.
  • Events Require Manual Registration: no remote subscription management, no polling fallback, no replay — the customer registers the webhook in the JobDiva UI.
  • Placements & Compliance Not Supported: the connector does not expose JobDiva placement or compliance operations.

Version History

v1.0.0 2026-09-12
  • Initial integration guide creation
  • Documented per-tenant service-credential authentication (/apiv2/authenticate, 1-hour token, Key Vault sync-back)
  • Documented full candidate CRUD (create/update/get/find/hotlists) with UPPER_CASE vs camelCase field conventions
  • Documented job create/update and index-backed job reads
  • Documented Submittal (application) upsert semantics and list-by-candidate reads
  • Documented candidate notes/activities with JobDivaConfiguration.glyde_user_id recruiter attribution and email logging
  • Documented smart-routing ATS search (numeric id → detail, simple → profile search, else TalentSearch) with cache/index write-through
  • Documented ATS proxy discovery with 330 operations, inspect, execute, and entity metadata
  • Documented manual-registration webhooks (Candidate.*, Job.*, JobApplication.*, Submission.*)
  • Documented entity mappings: Candidate, Job, Submittal, CandidateNote