DocsAPI Reference

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.

HostURLUse
Production APIhttps://mira-api.openjobs-ai.comREST and MCP calls
Platform dashboardhttps://platform.openjobs-ai.comSign in, create API keys, manage usage and quota
Note
Mira API 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-search and job detail lookup with POST /entity/v1/jobs/detail-by-id.
  • Adds public company search with POST /v1/company-fast-search and company detail lookup with POST /entity/v1/companies/detail-by-id.
  • Raises public search result windows from 100 to 1000 for people, jobs, companies, and scholars.
  • Raises entity detail batch limits from 50 to 100 string IDs or LinkedIn URLs per request.
  • Limits POST /v1/people-unlock to 10 LinkedIn 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_found after 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

bash
curl -s https://mira-api.openjobs-ai.com/version
json
{
  "code": 200,
  "msg": "ok",
  "data": {
    "version": "2.1.2"
  }
}

API Key Status

bash
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.

text
> 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 shortlist

OpenJobsAI / openjobs-openclaw-skills

github.com/OpenJobsAI/openjobs-openclaw-skills

View on GitHub

Available Skills

openjobs-platform-assistant

ClawHub

Default 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

ClawHub

Search, 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

ClawHub

Evaluate 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

ClawHub

Search 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

ClawHub

Search 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

ClawHub

Search academic scholars and AI research talent

  • ·Scholar and researcher filters
  • ·Academic metrics and research areas
  • ·Direct scholar result documents

Installation

npx - recommended single install

bash
npx skills install OpenJobsAI/openjobs-openclaw-skills

OpenClaw / 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:

bash
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-search

Claude Code

bash
# Via terminal
claude plugin marketplace add OpenJobsAI/openjobs-openclaw-skills

# Inside the chat
/plugin marketplace add OpenJobsAI/openjobs-openclaw-skills

Authentication

After installation, set your MIRA_KEY environment variable so the skill can authenticate automatically:

bash
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.

Tip
Prefer MCP for deeper tool integration with your agent? See the section for Streamable HTTP and SSE transport options.

Quick Start: Direct API Call

Prefer calling the REST API directly? Set $MIRA_KEY to your API key, then make your first request:

bash
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:

json
{ "code": 200, "msg": "ok", "data": { ... } }
Note
Error responses use the same format with non-200 codes and "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:

bash
curl -X POST "https://mira-api.openjobs-ai.com/v1/..." \
  -H "Authorization: Bearer $MIRA_KEY" \
  -H "Content-Type: application/json"
HeaderValueDescription
AuthorizationBearer $MIRA_KEYRequired. Your Mira API key (starts with mira_)
Content-Typeapplication/jsonRequired for all POST requests with a body
Tip
Manage and rotate your API keys from the API Keys page in the dashboard.
POST/v1/people-search

Natural-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

ParameterTypeRequiredDescription
textstring (1-5000 chars)YesNatural-language people search query
sizeinteger (1-1000)NoMaximum profile IDs to return. Defaults to 1000
bash
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

json
{
  "code": 200,
  "msg": "ok",
  "data": {
    "profile_ids": ["PavstrIWX_ZuAc2AOAZXHA", "ItGafMDFS3n8phCHDDyvEA"]
  }
}
Tip
Use /entity/v1/profiles/detail-by-id after search to fetch full profile documents. For structured filters, use /v1/people-fast-search.
POST/v1/people-fast-search

Structured 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

ParameterTypeDescription
sizeinteger (1-1000)Maximum profile IDs to return. Defaults to 1000
full_namestring (max 200)Full name (exact match)
headlinestring (max 200)Professional headline (fuzzy match)
is_workingbooleanCurrently employed (exact match)
is_decision_makerbooleanIs a decision maker

Location

ParameterTypeDescription
countrystring (max 100)Country (exact match). Use full name: "United States" not "US"
citystring (max 100)City name (exact match)
statestring (max 100)State or province (exact match). Use full name: "California" not "CA"

Current Position

ParameterTypeDescription
active_titlestring (max 200)Current job title (fuzzy match)
management_levelstring (max 50)Management level (exact match). See valid values
active_departmentstring (max 200)Current department (fuzzy match)

Work Experience

ParameterTypeDescription
experience_months_mininteger (≥0)Minimum total experience (months)
experience_months_maxinteger (≥0)Maximum total experience (months)
company_namestring (max 200)Company name (phrase match)
industrystring (max 100)Industry (exact match). See valid values
company_typestring (max 50)Company type (exact match). See valid values
levelstring (max 50)Seniority level (exact match). See valid values
rolestring (max 50)Role type (exact match). See valid values
skillsstring[] (max 20 items)Required skills list
skills_operatorstringSkill matching logic: AND or OR (default: AND)
certificationsstring (max 200)Certifications (fuzzy match, e.g. "AWS", "PMP")
languagesstring[] (max 20 items)Required languages (all must match)

Education

ParameterTypeDescription
degree_level_mininteger (≥0)Minimum degree level
institution_namestring (max 200)Institution name (fuzzy match)
majorstring (max 200)Major or field of study (fuzzy match)
institution_ranking_maxinteger (≥1)Max institution ranking (e.g. 100 = Top 100)
Note
For all valid enum values (role, level, industry, company_type), see the .
bash
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

json
{
  "code": 200,
  "msg": "ok",
  "data": {
    "profile_ids": ["PavstrIWX_ZuAc2AOAZXHA", "ItGafMDFS3n8phCHDDyvEA"]
  }
}
Note
Fetch full profile records with /entity/v1/profiles/detail-by-id. Entity detail endpoints accept up to 100 string type IDs or LinkedIn URLs per request.
HTTP StatusReason
400No filter condition provided
422Invalid parameter format or value

Profile Details

POST/entity/v1/profiles/detail-by-id

Fetch 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

ParameterTypeRequiredDescription
profile_idsstring[] (1-100 items)YesString profile IDs returned by people search endpoints
_source / sourcearray, object, or booleanNoOptional public profile field selection. Defaults to public profile detail fields
bash
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

POST/entity/v1/profiles/detail-by-linkedin-url
ParameterTypeRequiredDescription
linkedin_urlsstring[] (1-100 items)YesLinkedIn profile URLs to fetch
_source / sourcearray, object, or booleanNoOptional public profile field selection. Defaults to public profile detail fields
bash
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

json
{
  "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"]
      }
    ]
  }
}
Note
Profile data is refreshed on a quarterly cadence. This public reference is aligned to the 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

FieldTypeDefault
profile_idstringYes
linkedin_urlstringYes
addressobjectYes
active_experience_titlestringYes
full_namestringYes
first_namestringYes
last_namestringYes
is_workingbooleanYes
education.degree_levelstring / numberYes
education.majorstringYes
education.institution_namestringYes
education.begin_yearintegerYes
education.end_yearintegerYes
education.is_currentbooleanYes
experience.titlestringYes
experience.rolestringYes
experience.company_namestringYes
experience.company_typestringYes
experience.industrystringYes
experience.levelstringYes
experience.duration_monthsintegerYes
experience.is_currentbooleanYes
experience.address_citystringYes
experience.address_statestringYes
experience.address_countrystringYes
experience.start_timedate stringYes
experience.end_timedate stringYes
experience.company_size_rangestringYes
skillsarrayYes
awardsarrayYes
certificationsarrayYes
publicationsarrayYes
patentsarrayYes
coursesarrayYes
is_decision_makerbooleanYes
educationrequest alias for education.* fieldsAlias only
experiencerequest alias for experience.* fieldsAlias only

Grade Candidate

POST/v1/people-grade

Submit a candidate CV and job description. AI evaluates the match and returns a score (0–100) with reasoning.

Request Parameters

ParameterTypeRequiredDescription
cvstring (1–5000 chars)YesCandidate resume text
jdstring (1–5000 chars)YesJob description text
bash
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

json
{
  "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."
    }
  }
}
Note
rating is an integer from 0 to 100. description contains the AI reasoning behind the score.

Compare Candidates

POST/v1/people-compare

Compare multiple candidates side by side. Returns structured data including current position, highest education, skills, and languages.

Request Parameters

ParameterTypeRequiredDescription
linkedin_urlsstring[] (2–10 items)YesLinkedIn URLs of candidates to compare
bash
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

json
{
  "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

POST/v1/people-bulk-grade

Grade multiple candidates against a single job description in one request. Results are sorted by score in descending order.

Request Parameters

ParameterTypeRequiredDescription
linkedin_urlsstring[] (1–20 items)YesCandidate LinkedIn URLs to grade
jdstring (10–5000 chars)YesJob description text
Note
Concurrency limit: up to 5 simultaneous AI grading requests per call.
bash
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

json
{
  "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
      }
    ]
  }
}
Note
If grading fails for a candidate, 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

POST/v1/people-unlock

Retrieve 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

ParameterTypeRequiredDescription
linkedin_urlsstring[] (1-10 items)YesLinkedIn URLs to unlock. Preflight requires 200 quota points per requested URL; final charge is 200 points per unlocked contact.
Warning
The batch is rejected with HTTP 402 if remaining quota cannot cover 200 * len(linkedin_urls). The final charge can be lower when some URLs do not return contact information.
bash
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

json
{
  "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 StatusReason
402Insufficient quota (need N points, have M)
POST/v1/job-fast-search

Structured 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.

ParameterTypeDescription
sizeinteger (1-1000)Maximum job IDs to return. Defaults to 1000
titlestring (max 200)Job title (fuzzy match)
descriptionstring (max 500)Job description keywords (fuzzy match)
company_namestring (max 200)Company name (phrase match)
senioritystring (max 100)Seniority level (fuzzy match, e.g. "Entry level", "Mid-Senior level")
employment_typestring (max 100)Employment type (fuzzy match, e.g. "Full-time", "Part-time")
locationstring (max 200)Job location (fuzzy match)
country_iso_2string (2 chars)Country ISO 3166-1 alpha-2 code (e.g. "US")
statestring (max 100)State or region (fuzzy match)
citystring (max 100)City (fuzzy match)
industriesstring (max 200)Industries (fuzzy match)
functionsstring (max 200)Job functions (fuzzy match)
bash
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

json
{
  "code": 200,
  "msg": "ok",
  "data": {
    "job_ids": ["01CWlhuF85DP45jLrytvOw", "0FVdRCfvTIaZPxHk25jMeA"]
  }
}
Note
Job search reflects the daily active posting set. A job ID found on an earlier day can return not_found from detail lookup after the posting closes or is removed.

Job Detail by ID

POST/entity/v1/jobs/detail-by-id
ParameterTypeRequiredDescription
job_idsstring[] (1-100 items)YesString job IDs returned by job search
_source / sourcearray, object, or booleanNoOptional public job field selection. Defaults to public job detail fields
bash
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

FieldTypeDefault
idstringYes
source_idstringNo
titlestringYes
descriptionstringYes
companyobjectYes
company.namestringVia company
company.urlstringVia company
company.logo_urlstringVia company
company_namestringYes
company_idstringNo
countrystringYes
country_iso_2stringYes
statestringYes
citystringYes
locationstringYes
regionsobjectYes
regions.regionstringVia regions
functionsstringYes
industriesstringYes
senioritystringYes
salaryobjectYes
salary.stringstringVia salary
salary.min_valuestringVia salary
salary.max_valuestringVia salary
salary.currencystringVia salary
salary.unitstringVia salary
employment_typestringYes
postedstringYes
urlstringYes
external_urlstringYes
applicants_countstringYes
recruiterobjectYes
recruiter.profile_urlstringVia recruiter
recruiter.namestringVia recruiter
recruiter.descriptionstringVia recruiter
required_months_of_experienceintegerYes
application_activeinteger flagYes
deletedinteger flagNo
created_atdate stringYes
updated_atdate stringYes
HTTP StatusReason
400No filter condition provided
422Invalid parameter format or value
POST/v1/company-fast-search

Structured 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.

ParameterTypeDescription
sizeinteger (1-1000)Maximum company IDs to return. Defaults to 1000
namestring (max 200)Company name (fuzzy match)
typestringCompany type (exact filter)
industrystring (max 200)Industry (fuzzy match)
categories_and_keywordsstring (max 300)Categories or keywords (fuzzy match)
size_rangestringCompany size range (exact filter)
full_addressstring (max 500)Headquarters address text (fuzzy match)
is_b2bbooleanB2B company flag
bash
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

json
{
  "code": 200,
  "msg": "ok",
  "data": {
    "company_ids": ["3m6btXkZ6PIFuQCMZ9hR4A", "8Nf8gQXW1vR2mJp0P5sTUA"]
  }
}
Note
Company data is refreshed on a quarterly cadence. This public reference is aligned to the 202603 company snapshot, so company size, funding, revenue, headquarters, and social URL facts can lag behind real-world changes.

Company Detail by ID

POST/entity/v1/companies/detail-by-id
ParameterTypeRequiredDescription
company_idsstring[] (1-100 items)YesString company IDs returned by company search
_source / sourcearray, object, or booleanNoOptional public company field selection. Defaults to public company detail fields
bash
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

json
{
  "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.

FieldTypeDefault
idstringYes
namestringYes
typestringYes
founded_yearstringYes
followers_countintegerYes
websitestringYes
facebook_urlstringNo
twitter_urlstringNo
linkedin_urlstringYes
logo_urlstringYes
size_rangestringYes
employees_countintegerYes
industrystringYes
categories_and_keywordsstringYes
annual_revenue_source_1numberNo
annual_revenue_currency_source_1stringNo
annual_revenue_source_5integerNo
annual_revenue_currency_source_5stringNo
employees_count_change_yearly_percentagenumberNo
last_funding_round_datedate stringNo
last_funding_round_amount_raisedintegerNo
hq_full_addressstringYes
hq_countrystringNo
hq_regionsstringNo
hq_country_iso2stringNo
hq_country_iso3stringNo
hq_citystringNo
hq_statestringNo
hq_streetstringNo
hq_zipcodestringNo
last_updated_atdate stringYes
stock_tickerobjectNo
stock_ticker.exchangestringNo
stock_ticker.tickerstringNo
is_b2binteger flagYes
HTTP StatusReason
400No filter condition provided
422Invalid parameter format or value
POST/v1/scholar-fast-search

Structured 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

ParameterTypeDescription
full_namestring (max 200)Full name (exact match)
sizeinteger (1-1000)Maximum scholar profiles to return. Defaults to 1000
headlinestring (max 200)Professional headline (fuzzy match)
countrystring (max 100)Country (exact match)
citystring (max 100)City (exact match)

Position & Affiliation

ParameterTypeDescription
current_positionstring (max 200)Current position title (fuzzy match)
current_position_typestring (max 100)Current position type (exact match)
active_titlestring (max 200)Active experience title (fuzzy match)
management_levelstring (max 50)Management level (exact match)
affiliationsstring (max 200)Affiliated institution/organization (fuzzy match)

Research Areas & Skills

ParameterTypeDescription
areasstring[] (max 20 items)Research areas
areas_operatorstringArea matching logic: AND or OR (default: AND)
skillsstring[] (max 20 items)Skills
skills_operatorstringSkill matching logic: AND or OR (default: AND)

Academic Metrics

ParameterTypeDescription
total_citations_mininteger (≥0)Minimum total citations
total_citations_maxinteger (≥0)Maximum total citations
h_index_mininteger (≥0)Minimum h-index (all time)

Education & Articles

ParameterTypeDescription
universitystring (max 200)University name (fuzzy match)
majorstring (max 200)Major or field of study (fuzzy match)
degree_level_mininteger (≥0)Minimum degree level
article_titlestring (max 500)Article title keyword (fuzzy match)
article_publicationstring (max 200)Publication/journal name (fuzzy match)
experience_months_mininteger (≥0)Minimum total experience in months
experience_months_maxinteger (≥0)Maximum total experience in months
bash
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

json
{
  "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"
        }
      ]
    }
  ]
}
Note
data is a direct array of scholar profiles, up to 1000 results for public API keys.
HTTP StatusReason
400No filter condition provided
422Invalid parameter format or value

OpenJobs CLI

Deprecated

OpenJobs CLI is no longer maintained

No active maintenance

The CLI package is kept here as a deprecated reference only. New integrations should use the REST API, MCP Protocol, or OpenJobs agent skills.

PackageStatusRecommended path
@openjobs-ai/cliDeprecated; no longer maintainedUse 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.

TransportURLProtocol Version
Streamable HTTPhttps://mira-api.openjobs-ai.com/mcpMCP 2025-03-26
SSE (legacy)https://mira-api.openjobs-ai.com/sseMCP 2024-11-05

Initialize MCP Session

bash
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:

bash
claude mcp add --scope user --transport http \
  mira-api-http \
  https://mira-api.openjobs-ai.com/mcp \
  --header "Authorization: Bearer $MIRA_KEY"
Tip
Use --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:

json
{
  "mcpServers": {
    "mira-api": {
      "url": "https://mira-api.openjobs-ai.com/mcp",
      "headers": {
        "Authorization": "Bearer $MIRA_KEY"
      }
    }
  }
}
Note
Replace $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

text
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, Trades

Valid values for level

text
C-Level, Director, Founder, Head, Intern, Manager, Owner, Partner,
President/Vice President, Senior, Specialist

Valid values for company_type

text
Educational, Government Agency, Nonprofit, Partnership,
Privately Held, Public Company, Self-Employed, Self-Owned

Valid values for industry

text
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, Wholesale

Error Codes

All error responses use the unified format: { "code": 4xx/5xx, "msg": "<error message>", "data": null }

HTTP StatuscodeDescription
400400Invalid or missing request parameters
401401Missing or invalid Authorization header / API key not found
402402Quota exhausted (need N points, have M)
403403API key disabled, expired, or insufficient scope
404404Route not found
422422Invalid parameter format or value
429429Rate limit exceeded (RPM)
503503Feature unavailable
500500Internal 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 adjustmentReplacement
POST /v1/people-search/profile-idsPOST /v1/people-search
POST /v1/people-search/profilesPOST /v1/people-search, then POST /entity/v1/profiles/detail-by-id
POST /v1/people-lookupPOST /entity/v1/profiles/detail-by-linkedin-url