Provider graph
A structured model for the professionals and services inside your application.
- Professionals and organizations
- Services and attributes
- Profile readiness

Search your provider network, apply eligibility rules, rank valid provider-time options, explain every result, and complete the booking lifecycle through one API.
import { OritaClient } from "orita-sdk";
const orita = new OritaClient({
apiKey: process.env.ORITA_API_KEY
});
const resolution = await orita.resolveScheduling({
serviceId: "svc_therapy",
dateRange: {
from: "2026-08-05",
to: "2026-08-12",
timezone: "America/New_York"
},
constraints: {
languageCodes: { anyOf: ["es"] },
modalityCodes: { anyOf: ["virtual"] },
acceptsNewClients: true
},
preferences: {
dayParts: ["afternoon"],
earliestAvailable: true
},
limit: 5
});
await orita.holdOption(
resolution.resolutionId,
resolution.options[0].optionId
);
const booking = await orita.confirmResolution(
resolution.resolutionId,
{
optionId: resolution.options[0].optionId,
customer: {
name: "James Park",
email: "james@example.com"
}
}
);A structured model for the professionals and services inside your application.
Turn a customer need into valid provider-time options.
Move from selected option to confirmed booking without race conditions.
Keep your agent and internal systems aligned after every change.
Use provider resolution when the customer knows what they need but not who should handle it. Use direct booking when the provider is already known.
Pass the service, constraints, preferences, and date range.
Orita returns eligible providers, valid slots, scores, and reasons.
Optionally hold the slot, then confirm with an idempotency key.
Update your application from signed booking webhooks.
const resolution = await orita.resolveScheduling({
serviceId: "svc_therapy",
constraints: {
languageCodes: { anyOf: ["es"] },
modalityCodes: { anyOf: ["virtual"] }
},
preferences: {
dayParts: ["afternoon"]
},
dateRange: {
from: "2026-08-05",
to: "2026-08-12"
}
});
const booking = await orita.confirmResolution(
resolution.resolutionId,
{
optionId: resolution.options[0].optionId,
customer: {
name: "James Park",
email: "james@example.com"
}
}
);A developer can inspect the providers searched, the rules applied, the options returned, and the reasons other providers were excluded.
{
"resolutionId": "res_7812",
"status": "resolved",
"expiresAt": "2026-08-01T14:07:00Z",
"summary": {
"providersScanned": 126,
"eligibleProviders": 14,
"providersWithAvailability": 4,
"optionsReturned": 5
},
"options": [
{
"optionId": "opt_92ab",
"provider": {
"id": "pro_82fa1",
"displayName": "Dr. Ana García"
},
"slot": {
"start": "2026-08-05T15:00:00-04:00"
},
"score": 94,
"matchedConstraints": [
"service_supported",
"language_match",
"modality_match",
"availability_valid"
],
"reason": "Matches every required condition and is the earliest available afternoon appointment."
}
],
"exclusions": {
"serviceNotSupported": 28,
"notAcceptingNewClients": 12,
"noAvailability": 22
},
"warnings": []
}Top option
Tuesday · 3:00 PM · Virtual
Matches every required condition and is the earliest available afternoon appointment.
Filtering funnel
Why options were excluded
Hard constraints
Preferences
Orita protects the transition from a ranked option to a confirmed booking and keeps every downstream system synchronized.
Return valid, explained options.
Temporarily reserve the selected slot.
Check eligibility and availability again.
Use atomic, idempotent confirmation.
Deliver signed lifecycle events.
Safely retry resolutions and confirmations without duplicate bookings.
Internal and connected-calendar conflicts are checked before confirmation.
Preserve state through reschedules, replacements, and cancellations.
Retry, inspect, and replay signed events using stable event IDs.
Store the structured service and provider attributes your application needs to evaluate eligibility before checking a calendar.
{
"id": "pro_82fa1",
"organizationId": "org_123",
"displayName": "Dr. Ana García",
"professionCode": "clinical_psychologist",
"languageCodes": ["es", "en"],
"specialtyIds": ["anxiety", "cbt"],
"modalityCodes": ["virtual"],
"acceptsNewClients": true,
"timezone": "America/New_York",
"profileVersion": 12,
"searchable": true
}Orita works through plain HTTP, official Node and Python clients, or native MCP tools for AI environments.
Typed methods for resolution, holds, confirmation, and booking lifecycle.
npm install orita-sdkOpen docsPython-native methods for provider networks and resolution workflows.
pip install orita-sdkOpen docsUse every capability from any language or framework that can make HTTP requests.
https://orita.online/api/v1Open docsExpose provider-resolution tools directly to Claude, Cursor, and compatible agents.
https://orita.online/api/mcpOpen docsAgent-to-agent service transactions. External agents discover Orita, resolve providers, and confirm bookings through A2A v1.0.
/.well-known/agent-card.jsonOpen docsLet compatible agents resolve providers, inspect explanations, hold an option, and confirm the selected booking using deterministic Orita responses.
resolve_schedulingget_resolutionhold_scheduling_optionconfirm_scheduling_resolutionrelease_scheduling_option{
"mcpServers": {
"orita": {
"url": "https://orita.online/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_ORITA_API_KEY"
}
}
}
}Test without writing code
6 folders · 15 requests · automatic variable saving. Adds your API key, saves resolutionId and optionId automatically between steps.
Receive signed lifecycle events, inspect delivery attempts, replay failed events, and track resolution and booking performance.
resolution.resolvedresolution.zero_resultsoption.heldbooking.confirmedbooking.rescheduledbooking.cancelledbooking.completedprofessional.updatedInspect event IDs, attempts, status codes, response excerpts, and latency.
Track success rates, zero-result reasons, conversion, and cancellation performance.
{
"id": "evt_123",
"type": "booking.confirmed",
"createdAt": "2026-08-01T14:02:04Z",
"organizationId": "org_123",
"attempt": 1,
"data": {
"bookingId": "bk_18382",
"resolutionId": "res_7812",
"status": "confirmed"
}
}Endpoints grouped by the job you are completing — from onboarding providers to completing the booking lifecycle.
Search, rank, explain, hold, and confirm provider-time options.
/api/v2/resolutionsCreate an explainable provider resolution.
/api/v2/resolutions/:idRetrieve a stored resolution and its explanations.
/api/v2/resolutions/:id/options/:optionId/holdTemporarily reserve an option while the user confirms.
/api/v2/resolutions/:id/confirmRevalidate and atomically create the booking.
Model and manage the professionals inside your application.
Manage direct bookings and every lifecycle transition.
Observe, synchronize, and debug production workflows.
Complete provider-resolution workflows: onboard, resolve, hold, approve, confirm, and synchronize.
Resolve a virtual therapist by language, specialty, and availability.
View exampleTurn a natural-language request into an explainable provider and booking.
View exampleBuild provider onboarding, resolution, confirmation, and webhook sync.
View exampleCreate an account, import test providers, and run your first explainable provider resolution.