Mira API Documentation
The Mira API empowers developers with AI-driven talent intelligence. Search people, job, company, and scholar datasets, grade CVs, look up entity details, and integrate with MCP-compatible assistants.
Overview
The Mira API provides a comprehensive set of endpoints for talent intelligence. All requests are authenticated using Bearer tokens (API keys that start with mira_).
The API supports both direct REST calls and the Model Context Protocol (MCP), enabling integration with AI assistants like Claude. Current API version: 2.1.2.
| Host | URL | Use |
|---|---|---|
| Production API | https://mira-api.openjobs-ai.com | REST and MCP calls |
| Platform dashboard | https://platform.openjobs-ai.com | Sign in, create API keys, manage usage and quota |
2.1.2 expands the public API with job and company search/detail workflows. People, job, and company search endpoints return string IDs, then clients fetch full documents through /entity/v1/... detail endpoints. Public search requests can now return up to 1000 results, and entity detail endpoints accept up to 100 IDs or URLs per request.2.1.2 Release Summary
Current version: 2.1.2. Previous documented version: 2.1.1. This release expands the public REST contract with job and company workflows, raises public search result windows, and updates the public agent skills around those capabilities. See the full update log for version history and version-to-version changes.
- Adds public job search with
POST /v1/job-fast-searchand job detail lookup withPOST /entity/v1/jobs/detail-by-id. - Adds public company search with
POST /v1/company-fast-searchand company detail lookup withPOST /entity/v1/companies/detail-by-id. - Raises public search result windows from
100to1000for people, jobs, companies, and scholars. - Raises entity detail batch limits from
50to100string IDs or LinkedIn URLs per request. - Limits
POST /v1/people-unlockto10LinkedIn URLs per request and documents quota preflight before downstream unlock work. - Documents job data as daily active postings, where older job IDs may return
not_foundafter postings close. - Documents profile and company datasets as quarterly snapshots aligned to
202603. - Updates public OpenClaw skills, including
openjobs-platform-assistant, to use the expanded job and company workflows.
System
Use system routes to check the deployed API version and the authenticated API key status.
Version
curl -s https://mira-api.openjobs-ai.com/version{
"code": 200,
"msg": "ok",
"data": {
"version": "2.1.2"
}
}API Key Status
curl -X GET "https://mira-api.openjobs-ai.com/auth/key/status" \
-H "Authorization: Bearer $MIRA_KEY"Response data includes key_id, key_prefix, key_name, public user profile fields, active, scopes, rpm_limit, user_quota, key_quota, and expires_at. Internal user ids are not returned; keys without an expiration return Never.
Quick Start: Agent-Skills
The fastest way to use the Mira API is through OpenClaw Skills — Markdown-based instruction files that give your AI assistant (Claude, GPT, Gemini, etc.) full access to talent search, grading, and enrichment directly from the chat interface. No boilerplate. No manual tool wiring.
> Find the companies hiring Post-Training Engineers most aggressively, identify technical executives, and unlock selected contacts.
-> Searching active jobs with OpenJobs AI
-> Fetching job details for returned job IDs
-> Ranking companies by active posting count
-> Finding technical decision makers at top companies
+ 5 hiring-heavy companies ranked from active jobs
+ 15 target executive profiles selected
+ 12 contacts unlocked from the final shortlistOpenJobsAI / openjobs-openclaw-skills
github.com/OpenJobsAI/openjobs-openclaw-skills
Available Skills
openjobs-platform-assistant
ClawHubDefault workflow coordinator for recruiting and talent-research outcomes
- ·Rank hiring companies from active job demand
- ·Enrich companies with target profiles or scholars
- ·Match candidates and unlock selected final contacts
openjobs-people-search
ClawHubSearch, discover, and retrieve professional profiles
- ·Structured search with explicit filters
- ·Profile lookup by LinkedIn URL
- ·Side-by-side candidate comparison
- ·Unlock contact emails
openjobs-people-match
ClawHubEvaluate candidate-job fit with AI scoring
- ·Grade a single CV against a JD (0–100)
- ·Bulk-grade up to 20 candidates
- ·Ranked results by fit score
openjobs-jobs-search
ClawHubSearch active job postings and fetch job details
- ·Daily active job search
- ·Job detail lookup by returned job ID
- ·Public job field selection
openjobs-company-search
ClawHubSearch company records and fetch company details
- ·Quarterly company snapshot search
- ·Company detail lookup by returned company ID
- ·Public company field selection
openjobs-ai-talent-search
ClawHubSearch academic scholars and AI research talent
- ·Scholar and researcher filters
- ·Academic metrics and research areas
- ·Direct scholar result documents
Installation
npx - recommended single install
npx skills install OpenJobsAI/openjobs-openclaw-skillsOpenClaw / ClawHub
Inside any OpenClaw-compatible agent, say Install skills: OpenJobsAI/openjobs-openclaw-skills to install all public OpenJobs skills at once. ClawHub installs one skill at a time; start with the platform assistant, then add domain skills when your client does not support repository installs:
clawhub install openjobs-platform-assistant
clawhub install openjobs-people-search
clawhub install openjobs-people-match
clawhub install openjobs-jobs-search
clawhub install openjobs-company-search
clawhub install openjobs-ai-talent-searchClaude Code
# Via terminal
claude plugin marketplace add OpenJobsAI/openjobs-openclaw-skills
# Inside the chat
/plugin marketplace add OpenJobsAI/openjobs-openclaw-skillsAuthentication
After installation, set your MIRA_KEY environment variable so the skill can authenticate automatically:
export MIRA_KEY="mira_xxxxxxxxxxxx"Get your key from the API Keys page. The skill reads $MIRA_KEY from the environment and passes it automatically as a Bearer token on every request.
Quick Start: Direct API Call
Prefer calling the REST API directly? Set $MIRA_KEY to your API key, then make your first request:
export MIRA_KEY="mira_xxxxxxxxxxxx"
curl -X POST "https://mira-api.openjobs-ai.com/v1/people-grade" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"cv": "10 years Python backend development, AWS certified",
"jd": "Senior Python engineer with cloud experience"
}'All responses follow a unified envelope format:
{ "code": 200, "msg": "ok", "data": { ... } }"data": null. For example: { "code": 401, "msg": "API key not found", "data": null }Authentication
All requests must include your API key as a Bearer token in the Authorization header:
curl -X POST "https://mira-api.openjobs-ai.com/v1/..." \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json"| Header | Value | Description |
|---|---|---|
| Authorization | Bearer $MIRA_KEY | Required. Your Mira API key (starts with mira_) |
| Content-Type | application/json | Required for all POST requests with a body |
Natural Language People Search
/v1/people-searchNatural-language people search. Mira converts the request into a controlled, policy-filtered search over approved public profile fields and returns profile IDs only.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| text | string (1-5000 chars) | Yes | Natural-language people search query |
| size | integer (1-1000) | No | Maximum profile IDs to return. Defaults to 1000 |
curl -X POST "https://mira-api.openjobs-ai.com/v1/people-search" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "search all us data engineers",
"size": 1000
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"profile_ids": ["PavstrIWX_ZuAc2AOAZXHA", "ItGafMDFS3n8phCHDDyvEA"]
}
}/entity/v1/profiles/detail-by-id after search to fetch full profile documents. For structured filters, use /v1/people-fast-search.Search People
/v1/people-fast-searchStructured field search that bypasses AI parsing for faster results. It returns string profile IDs only. At least one search filter is required. Returns up to 1000 profile IDs for public API keys.
Request Parameters
All filter fields are optional, but at least one search condition must be provided. size controls result count and does not count as a search condition.
Basic Info
| Parameter | Type | Description |
|---|---|---|
| size | integer (1-1000) | Maximum profile IDs to return. Defaults to 1000 |
| full_name | string (max 200) | Full name (exact match) |
| headline | string (max 200) | Professional headline (fuzzy match) |
| is_working | boolean | Currently employed (exact match) |
| is_decision_maker | boolean | Is a decision maker |
Location
| Parameter | Type | Description |
|---|---|---|
| country | string (max 100) | Country (exact match). Use full name: "United States" not "US" |
| city | string (max 100) | City name (exact match) |
| state | string (max 100) | State or province (exact match). Use full name: "California" not "CA" |
Current Position
| Parameter | Type | Description |
|---|---|---|
| active_title | string (max 200) | Current job title (fuzzy match) |
| management_level | string (max 50) | Management level (exact match). See valid values |
| active_department | string (max 200) | Current department (fuzzy match) |
Work Experience
| Parameter | Type | Description |
|---|---|---|
| experience_months_min | integer (≥0) | Minimum total experience (months) |
| experience_months_max | integer (≥0) | Maximum total experience (months) |
| company_name | string (max 200) | Company name (phrase match) |
| industry | string (max 100) | Industry (exact match). See valid values |
| company_type | string (max 50) | Company type (exact match). See valid values |
| level | string (max 50) | Seniority level (exact match). See valid values |
| role | string (max 50) | Role type (exact match). See valid values |
| skills | string[] (max 20 items) | Required skills list |
| skills_operator | string | Skill matching logic: AND or OR (default: AND) |
| certifications | string (max 200) | Certifications (fuzzy match, e.g. "AWS", "PMP") |
| languages | string[] (max 20 items) | Required languages (all must match) |
Education
| Parameter | Type | Description |
|---|---|---|
| degree_level_min | integer (≥0) | Minimum degree level |
| institution_name | string (max 200) | Institution name (fuzzy match) |
| major | string (max 200) | Major or field of study (fuzzy match) |
| institution_ranking_max | integer (≥1) | Max institution ranking (e.g. 100 = Top 100) |
curl -X POST "https://mira-api.openjobs-ai.com/v1/people-fast-search" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"country": "United States",
"skills": ["Python", "AWS"],
"skills_operator": "AND",
"experience_months_min": 60,
"is_working": true,
"size": 1000
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"profile_ids": ["PavstrIWX_ZuAc2AOAZXHA", "ItGafMDFS3n8phCHDDyvEA"]
}
}/entity/v1/profiles/detail-by-id. Entity detail endpoints accept up to 100 string type IDs or LinkedIn URLs per request.| HTTP Status | Reason |
|---|---|
| 400 | No filter condition provided |
| 422 | Invalid parameter format or value |
Profile Details
/entity/v1/profiles/detail-by-idFetch full profile documents after people search returns string profile IDs. Detail endpoints are capped at 100 string type IDs or LinkedIn URLs per request so clients can batch and page explicitly.
Lookup by Profile ID
| Parameter | Type | Required | Description |
|---|---|---|---|
| profile_ids | string[] (1-100 items) | Yes | String profile IDs returned by people search endpoints |
| _source / source | array, object, or boolean | No | Optional public profile field selection. Defaults to public profile detail fields |
curl -X POST "https://mira-api.openjobs-ai.com/entity/v1/profiles/detail-by-id" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"profile_ids": ["PavstrIWX_ZuAc2AOAZXHA", "ItGafMDFS3n8phCHDDyvEA"],
"_source": ["profile_id", "linkedin_url", "full_name", "address", "active_experience_title", "skills"]
}'Lookup by LinkedIn URL
/entity/v1/profiles/detail-by-linkedin-url| Parameter | Type | Required | Description |
|---|---|---|---|
| linkedin_urls | string[] (1-100 items) | Yes | LinkedIn profile URLs to fetch |
| _source / source | array, object, or boolean | No | Optional public profile field selection. Defaults to public profile detail fields |
curl -X POST "https://mira-api.openjobs-ai.com/entity/v1/profiles/detail-by-linkedin-url" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"linkedin_urls": ["https://www.linkedin.com/in/xxx"],
"_source": ["profile_id", "full_name", "address", "active_experience_title"]
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"total": 2,
"found": 1,
"not_found": ["ItGafMDFS3n8phCHDDyvEA"],
"results": [
{
"profile_id": "PavstrIWX_ZuAc2AOAZXHA",
"full_name": "Jane Doe",
"active_experience_title": "Data Engineer",
"address": { "state": "California", "country": "United States" },
"skills": ["python", "sql", "aws"]
}
]
}
}202603 profile snapshot, so current titles, employers, education, skills, and other profile facts can lag behind real-world changes.If _source is omitted, Mira returns the default public profile detail fields. The table below shows every public profile source field and whether it is returned by default. In field arrays or includes objects, education and experience are accepted request aliases that expand to the listed public education.* and experience.* fields before querying.
Public profile _source fields
| Field | Type | Default |
|---|---|---|
profile_id | string | Yes |
linkedin_url | string | Yes |
address | object | Yes |
active_experience_title | string | Yes |
full_name | string | Yes |
first_name | string | Yes |
last_name | string | Yes |
is_working | boolean | Yes |
education.degree_level | string / number | Yes |
education.major | string | Yes |
education.institution_name | string | Yes |
education.begin_year | integer | Yes |
education.end_year | integer | Yes |
education.is_current | boolean | Yes |
experience.title | string | Yes |
experience.role | string | Yes |
experience.company_name | string | Yes |
experience.company_type | string | Yes |
experience.industry | string | Yes |
experience.level | string | Yes |
experience.duration_months | integer | Yes |
experience.is_current | boolean | Yes |
experience.address_city | string | Yes |
experience.address_state | string | Yes |
experience.address_country | string | Yes |
experience.start_time | date string | Yes |
experience.end_time | date string | Yes |
experience.company_size_range | string | Yes |
skills | array | Yes |
awards | array | Yes |
certifications | array | Yes |
publications | array | Yes |
patents | array | Yes |
courses | array | Yes |
is_decision_maker | boolean | Yes |
education | request alias for education.* fields | Alias only |
experience | request alias for experience.* fields | Alias only |
Grade Candidate
/v1/people-gradeSubmit a candidate CV and job description. AI evaluates the match and returns a score (0–100) with reasoning.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| cv | string (1–5000 chars) | Yes | Candidate resume text |
| jd | string (1–5000 chars) | Yes | Job description text |
curl -X POST "https://mira-api.openjobs-ai.com/v1/people-grade" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"cv": "10 years Python backend development...",
"jd": "Senior Python engineer with cloud experience..."
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"total_score": {
"rating": 85,
"description": "- Strong Python background with 10+ years directly matching the requirement.\n- Extensive backend and cloud experience aligns well with the role.\n- Financial services exposure is an added advantage."
}
}
}rating is an integer from 0 to 100. description contains the AI reasoning behind the score.Compare Candidates
/v1/people-compareCompare multiple candidates side by side. Returns structured data including current position, highest education, skills, and languages.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| linkedin_urls | string[] (2–10 items) | Yes | LinkedIn URLs of candidates to compare |
curl -X POST "https://mira-api.openjobs-ai.com/v1/people-compare" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"linkedin_urls": [
"https://www.linkedin.com/in/xxx",
"https://www.linkedin.com/in/yyy"
]
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"total_requested": 2,
"total_found": 2,
"not_found": [],
"comparisons": [
{
"linkedin_url": "https://www.linkedin.com/in/xxx",
"full_name": "Jane Doe",
"headline": "Senior Python Engineer | Backend | Cloud",
"location": { "country": "United States", "city": "San Francisco" },
"is_working": true,
"total_experience_months": 120,
"current_position": {
"title": "Senior Software Engineer",
"company": "Acme Corp",
"industry": "Software Development"
},
"highest_education": {
"degree": "Bachelor of Science, Computer Science",
"institution": "State University",
"major": "Computer Science"
},
"skills": ["python", "fastapi", "postgresql", "docker", "aws"],
"languages": ["English"],
"is_decision_maker": false
},
{
"linkedin_url": "https://www.linkedin.com/in/yyy",
"full_name": "John Smith",
"headline": "Backend Engineer | Python | AWS",
"location": { "country": "United States", "city": "Austin" },
"is_working": true,
"total_experience_months": 144,
"current_position": {
"title": "Senior Backend Engineer",
"company": "Tech Solutions Inc",
"industry": "IT Services and IT Consulting"
},
"highest_education": {
"degree": "Bachelor of Engineering, Computer Science",
"institution": "University of Technology",
"major": "Computer Science"
},
"skills": ["python", "aws", "docker", "postgresql", "kubernetes"],
"languages": ["English"],
"is_decision_maker": false
}
]
}
}Bulk Grade
/v1/people-bulk-gradeGrade multiple candidates against a single job description in one request. Results are sorted by score in descending order.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| linkedin_urls | string[] (1–20 items) | Yes | Candidate LinkedIn URLs to grade |
| jd | string (10–5000 chars) | Yes | Job description text |
curl -X POST "https://mira-api.openjobs-ai.com/v1/people-bulk-grade" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"linkedin_urls": [
"https://www.linkedin.com/in/xxx",
"https://www.linkedin.com/in/yyy"
],
"jd": "Senior Python Engineer with 5+ years experience in backend development and AWS..."
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"jd_preview": "Senior Python Engineer with 5+ years experience in backend development and AWS...",
"total_requested": 2,
"total_graded": 2,
"total_failed": 0,
"not_found": [],
"rankings": [
{
"linkedin_url": "https://www.linkedin.com/in/xxx",
"total_score": {
"rating": 92,
"description": "- Strong Python background with 10+ years directly matching the requirement.\n- Extensive backend and AWS experience aligns well with the role."
},
"error": null
},
{
"linkedin_url": "https://www.linkedin.com/in/yyy",
"total_score": {
"rating": 74,
"description": "- Meets the Python experience requirement.\n- AWS and DevOps skills are relevant but backend focus is less prominent."
},
"error": null
}
]
}
}total_score will be null, error will contain the error message, and the entry will appear at the bottom of the rankings list.Unlock Contacts
/v1/people-unlockRetrieve email contact information for candidates by LinkedIn URL. Mira checks quota for the maximum possible request cost before calling the unlock service, then charges only returned contacts after the response.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| linkedin_urls | string[] (1-10 items) | Yes | LinkedIn URLs to unlock. Preflight requires 200 quota points per requested URL; final charge is 200 points per unlocked contact. |
200 * len(linkedin_urls). The final charge can be lower when some URLs do not return contact information.curl -X POST "https://mira-api.openjobs-ai.com/v1/people-unlock" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"linkedin_urls": [
"https://www.linkedin.com/in/xxx",
"https://www.linkedin.com/in/yyy"
]
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"list": [
{
"linkedinUrl": "https://www.linkedin.com/in/xxx",
"personEmail": "jane.doe@gmail.com",
"workEmail": "jane.doe@acme.com"
},
{
"linkedinUrl": "https://www.linkedin.com/in/yyy",
"personEmail": "john.smith@gmail.com",
"workEmail": null
}
]
}
}| HTTP Status | Reason |
|---|---|
| 402 | Insufficient quota (need N points, have M) |
Search Jobs
/v1/job-fast-searchStructured field search over active job postings. Queries the daily active job index and returns string job IDs only. At least one filter field is required. Returns up to 1000 job IDs for public API keys.
Request Parameters
All filter fields are optional, but at least one search condition must be provided. size controls result count and does not count as a search condition.
| Parameter | Type | Description |
|---|---|---|
| size | integer (1-1000) | Maximum job IDs to return. Defaults to 1000 |
| title | string (max 200) | Job title (fuzzy match) |
| description | string (max 500) | Job description keywords (fuzzy match) |
| company_name | string (max 200) | Company name (phrase match) |
| seniority | string (max 100) | Seniority level (fuzzy match, e.g. "Entry level", "Mid-Senior level") |
| employment_type | string (max 100) | Employment type (fuzzy match, e.g. "Full-time", "Part-time") |
| location | string (max 200) | Job location (fuzzy match) |
| country_iso_2 | string (2 chars) | Country ISO 3166-1 alpha-2 code (e.g. "US") |
| state | string (max 100) | State or region (fuzzy match) |
| city | string (max 100) | City (fuzzy match) |
| industries | string (max 200) | Industries (fuzzy match) |
| functions | string (max 200) | Job functions (fuzzy match) |
curl -X POST "https://mira-api.openjobs-ai.com/v1/job-fast-search" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Python Engineer",
"country_iso_2": "US",
"employment_type": "Full-time",
"seniority": "Mid-Senior level",
"size": 1000
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"job_ids": ["01CWlhuF85DP45jLrytvOw", "0FVdRCfvTIaZPxHk25jMeA"]
}
}not_found from detail lookup after the posting closes or is removed.Job Detail by ID
/entity/v1/jobs/detail-by-id| Parameter | Type | Required | Description |
|---|---|---|---|
| job_ids | string[] (1-100 items) | Yes | String job IDs returned by job search |
| _source / source | array, object, or boolean | No | Optional public job field selection. Defaults to public job detail fields |
curl -X POST "https://mira-api.openjobs-ai.com/entity/v1/jobs/detail-by-id" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"job_ids": ["01CWlhuF85DP45jLrytvOw", "0FVdRCfvTIaZPxHk25jMeA"],
"_source": ["id", "title", "company_name", "location", "seniority", "industries", "url"]
}'If _source is omitted, Mira returns the default public job detail fields. The response includes total, found, not_found, and results. Public job _source supports parent objects such as company, regions, salary, and recruiter, plus the documented dot-path fields such as company.name and salary.string for narrower responses.
Public job _source fields
| Field | Type | Default |
|---|---|---|
id | string | Yes |
source_id | string | No |
title | string | Yes |
description | string | Yes |
company | object | Yes |
company.name | string | Via company |
company.url | string | Via company |
company.logo_url | string | Via company |
company_name | string | Yes |
company_id | string | No |
country | string | Yes |
country_iso_2 | string | Yes |
state | string | Yes |
city | string | Yes |
location | string | Yes |
regions | object | Yes |
regions.region | string | Via regions |
functions | string | Yes |
industries | string | Yes |
seniority | string | Yes |
salary | object | Yes |
salary.string | string | Via salary |
salary.min_value | string | Via salary |
salary.max_value | string | Via salary |
salary.currency | string | Via salary |
salary.unit | string | Via salary |
employment_type | string | Yes |
posted | string | Yes |
url | string | Yes |
external_url | string | Yes |
applicants_count | string | Yes |
recruiter | object | Yes |
recruiter.profile_url | string | Via recruiter |
recruiter.name | string | Via recruiter |
recruiter.description | string | Via recruiter |
required_months_of_experience | integer | Yes |
application_active | integer flag | Yes |
deleted | integer flag | No |
created_at | date string | Yes |
updated_at | date string | Yes |
| HTTP Status | Reason |
|---|---|
| 400 | No filter condition provided |
| 422 | Invalid parameter format or value |
Search Companies
/v1/company-fast-searchStructured field search over company records. Queries the company snapshot and returns string company IDs only. At least one filter field is required. Returns up to 1000 company IDs for public API keys.
Request Parameters
All filter fields are optional, but at least one search condition must be provided. size controls result count and does not count as a search condition.
| Parameter | Type | Description |
|---|---|---|
| size | integer (1-1000) | Maximum company IDs to return. Defaults to 1000 |
| name | string (max 200) | Company name (fuzzy match) |
| type | string | Company type (exact filter) |
| industry | string (max 200) | Industry (fuzzy match) |
| categories_and_keywords | string (max 300) | Categories or keywords (fuzzy match) |
| size_range | string | Company size range (exact filter) |
| full_address | string (max 500) | Headquarters address text (fuzzy match) |
| is_b2b | boolean | B2B company flag |
curl -X POST "https://mira-api.openjobs-ai.com/v1/company-fast-search" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"industry": "Artificial Intelligence",
"type": "Privately Held",
"full_address": "United States",
"size": 1000
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"company_ids": ["3m6btXkZ6PIFuQCMZ9hR4A", "8Nf8gQXW1vR2mJp0P5sTUA"]
}
}202603 company snapshot, so company size, funding, revenue, headquarters, and social URL facts can lag behind real-world changes.Company Detail by ID
/entity/v1/companies/detail-by-id| Parameter | Type | Required | Description |
|---|---|---|---|
| company_ids | string[] (1-100 items) | Yes | String company IDs returned by company search |
| _source / source | array, object, or boolean | No | Optional public company field selection. Defaults to public company detail fields |
curl -X POST "https://mira-api.openjobs-ai.com/entity/v1/companies/detail-by-id" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"company_ids": ["3m6btXkZ6PIFuQCMZ9hR4A"],
"_source": ["id", "name", "type", "industry", "size_range", "hq_country", "website"]
}'Response Example
{
"code": 200,
"msg": "ok",
"data": {
"total": 1,
"found": 1,
"not_found": [],
"results": [
{
"id": "3m6btXkZ6PIFuQCMZ9hR4A",
"name": "Example AI",
"type": "Privately Held",
"industry": "Technology, Information and Media",
"size_range": "51-200 employees",
"hq_country": "United States",
"website": "https://example.com"
}
]
}
}Public company _source fields
Company fields are mostly flat. stock_ticker can be requested as the parent object, or narrowed with stock_ticker.exchange and stock_ticker.ticker.
| Field | Type | Default |
|---|---|---|
id | string | Yes |
name | string | Yes |
type | string | Yes |
founded_year | string | Yes |
followers_count | integer | Yes |
website | string | Yes |
facebook_url | string | No |
twitter_url | string | No |
linkedin_url | string | Yes |
logo_url | string | Yes |
size_range | string | Yes |
employees_count | integer | Yes |
industry | string | Yes |
categories_and_keywords | string | Yes |
annual_revenue_source_1 | number | No |
annual_revenue_currency_source_1 | string | No |
annual_revenue_source_5 | integer | No |
annual_revenue_currency_source_5 | string | No |
employees_count_change_yearly_percentage | number | No |
last_funding_round_date | date string | No |
last_funding_round_amount_raised | integer | No |
hq_full_address | string | Yes |
hq_country | string | No |
hq_regions | string | No |
hq_country_iso2 | string | No |
hq_country_iso3 | string | No |
hq_city | string | No |
hq_state | string | No |
hq_street | string | No |
hq_zipcode | string | No |
last_updated_at | date string | Yes |
stock_ticker | object | No |
stock_ticker.exchange | string | No |
stock_ticker.ticker | string | No |
is_b2b | integer flag | Yes |
| HTTP Status | Reason |
|---|---|
| 400 | No filter condition provided |
| 422 | Invalid parameter format or value |
Search Scholars
/v1/scholar-fast-searchStructured field search for academic scholars. At least one filter field is required. Returns up to 1000 results for public API keys. Non-public contact fields are not included in the response.
Request Parameters
All fields are optional, but at least one must be provided.
Basic Info & Location
| Parameter | Type | Description |
|---|---|---|
| full_name | string (max 200) | Full name (exact match) |
| size | integer (1-1000) | Maximum scholar profiles to return. Defaults to 1000 |
| headline | string (max 200) | Professional headline (fuzzy match) |
| country | string (max 100) | Country (exact match) |
| city | string (max 100) | City (exact match) |
Position & Affiliation
| Parameter | Type | Description |
|---|---|---|
| current_position | string (max 200) | Current position title (fuzzy match) |
| current_position_type | string (max 100) | Current position type (exact match) |
| active_title | string (max 200) | Active experience title (fuzzy match) |
| management_level | string (max 50) | Management level (exact match) |
| affiliations | string (max 200) | Affiliated institution/organization (fuzzy match) |
Research Areas & Skills
| Parameter | Type | Description |
|---|---|---|
| areas | string[] (max 20 items) | Research areas |
| areas_operator | string | Area matching logic: AND or OR (default: AND) |
| skills | string[] (max 20 items) | Skills |
| skills_operator | string | Skill matching logic: AND or OR (default: AND) |
Academic Metrics
| Parameter | Type | Description |
|---|---|---|
| total_citations_min | integer (≥0) | Minimum total citations |
| total_citations_max | integer (≥0) | Maximum total citations |
| h_index_min | integer (≥0) | Minimum h-index (all time) |
Education & Articles
| Parameter | Type | Description |
|---|---|---|
| university | string (max 200) | University name (fuzzy match) |
| major | string (max 200) | Major or field of study (fuzzy match) |
| degree_level_min | integer (≥0) | Minimum degree level |
| article_title | string (max 500) | Article title keyword (fuzzy match) |
| article_publication | string (max 200) | Publication/journal name (fuzzy match) |
| experience_months_min | integer (≥0) | Minimum total experience in months |
| experience_months_max | integer (≥0) | Maximum total experience in months |
curl -X POST "https://mira-api.openjobs-ai.com/v1/scholar-fast-search" \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"areas": ["Machine Learning", "Natural Language Processing"],
"areas_operator": "AND",
"country": "United States",
"h_index_min": 20,
"size": 1000
}'Response Example
{
"code": 200,
"msg": "ok",
"data": [
{
"full_name": "Dr. Jane Smith",
"headline": "Associate Professor of Computer Science",
"location_struct": {
"country": "United States",
"city": "Stanford"
},
"current_position": "Associate Professor",
"current_position_type": "Faculty",
"affiliations": "Stanford University",
"areas": ["Machine Learning", "Natural Language Processing", "Deep Learning"],
"skills": ["Python", "TensorFlow", "PyTorch"],
"total_citations": 15200,
"h_index": { "all": 42 },
"education": [
{
"university": "MIT",
"major": "Computer Science",
"degree_level": 3
}
],
"articles": [
{
"title": "Attention Mechanisms in Neural Networks",
"publication": "NeurIPS 2023"
}
]
}
]
}data is a direct array of scholar profiles, up to 1000 results for public API keys.| HTTP Status | Reason |
|---|---|
| 400 | No filter condition provided |
| 422 | Invalid parameter format or value |
OpenJobs CLI
Deprecated
OpenJobs CLI is no longer maintained
The CLI package is kept here as a deprecated reference only. New integrations should use the REST API, MCP Protocol, or OpenJobs agent skills.
| Package | Status | Recommended path |
|---|---|---|
| @openjobs-ai/cli | Deprecated; no longer maintained | Use REST API, MCP Protocol, or agent skills |
MCP Protocol
The Mira API supports the Model Context Protocol (MCP), enabling direct integration with AI assistants like Claude.
| Transport | URL | Protocol Version |
|---|---|---|
| Streamable HTTP | https://mira-api.openjobs-ai.com/mcp | MCP 2025-03-26 |
| SSE (legacy) | https://mira-api.openjobs-ai.com/sse | MCP 2024-11-05 |
Initialize MCP Session
curl -X POST https://mira-api.openjobs-ai.com/mcp \
-H "Authorization: Bearer $MIRA_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": { "name": "my-agent", "version": "1.0" }
}
}'Claude Code Setup
Connect the Mira API to Claude Code as an MCP server:
claude mcp add --scope user --transport http \
mira-api-http \
https://mira-api.openjobs-ai.com/mcp \
--header "Authorization: Bearer $MIRA_KEY"--scope project instead of --scope user to restrict the server to the current project only.Claude Desktop
Add the Mira API to your claude_desktop_config.json to use Mira tools directly inside Claude Desktop:
{
"mcpServers": {
"mira-api": {
"url": "https://mira-api.openjobs-ai.com/mcp",
"headers": {
"Authorization": "Bearer $MIRA_KEY"
}
}
}
}$MIRA_KEY with your actual API key value in the config file.Search Filters Reference
Exact match enum values for the endpoint. These strings must be passed exactly as listed.
Valid values for role
Administrative, C-Suite, Consulting, Customer Service, Design, Education,
Engineering and Technical, Finance & Accounting, Human Resources, Legal,
Marketing, Medical, Operations, Other, Product, Project Management,
Real Estate, Research, Sales, TradesValid values for level
C-Level, Director, Founder, Head, Intern, Manager, Owner, Partner,
President/Vice President, Senior, SpecialistValid values for company_type
Educational, Government Agency, Nonprofit, Partnership,
Privately Held, Public Company, Self-Employed, Self-OwnedValid values for industry
Accommodation Services, Administrative and Support Services, Construction,
Consumer Services, Education, Entertainment Providers,
Farming, Ranching, Forestry, Financial Services, Government Administration,
Holding Companies, Hospitals and Health Care, Manufacturing,
Oil, Gas, and Mining, Professional Services,
Real Estate and Equipment Rental Services, Retail,
Technology, Information and Media,
Transportation, Logistics, Supply Chain and Storage,
Utilities, WholesaleError Codes
All error responses use the unified format: { "code": 4xx/5xx, "msg": "<error message>", "data": null }
| HTTP Status | code | Description |
|---|---|---|
| 400 | 400 | Invalid or missing request parameters |
| 401 | 401 | Missing or invalid Authorization header / API key not found |
| 402 | 402 | Quota exhausted (need N points, have M) |
| 403 | 403 | API key disabled, expired, or insufficient scope |
| 404 | 404 | Route not found |
| 422 | 422 | Invalid parameter format or value |
| 429 | 429 | Rate limit exceeded (RPM) |
| 503 | 503 | Feature unavailable |
| 500 | 500 | Internal server error |
Sunset Adjustments
These older public workflows are tracked as sunset adjustments in Mira API 2.1.1. Use the replacement route shown below.
| Sunset adjustment | Replacement |
|---|---|
| POST /v1/people-search/profile-ids | POST /v1/people-search |
| POST /v1/people-search/profiles | POST /v1/people-search, then POST /entity/v1/profiles/detail-by-id |
| POST /v1/people-lookup | POST /entity/v1/profiles/detail-by-linkedin-url |