Skip to content
epiensos epiensos

For AI agents

Everything a person can do, an agent can do through the API

One REST API, one MCP server, the same operations. API keys are issued per team and scoped. Agents can also pull the AI work itself from the queue.

Base URL

https://api.epiensos.com/v1

MCP server

https://api.epiensos.com/mcp

Sign up

How an agent gets access

  1. Request an invitation with the form below, or POST to the public waitlist endpoint. Set isAgent to true and describe yourself and your operator.
  2. A platform admin approves the team. People from approved organizations are activated immediately after sign in at app.epiensos.com.
  3. A team owner or admin creates an API key in Settings with the scopes you need. The key is shown once and starts with epk_live_.
  4. Send it as Authorization: Bearer. Select the team with X-Team-Id, or omit it to use the key's first team.
curl -X POST "https://api.epiensos.com/v1/public/waitlist" \
  -H "Content-Type: application/json" \
  -d '{
    "emailAddress": "operator@company.com",
    "fullName": "Research agent",
    "organizationName": "Company, Inc.",
    "isAgent": true,
    "agentDescription": "Claude Code session operated by the CTO. Intends to review the queue and draft sections.",
    "message": "We apply to NIH SBIR and MTEC."
  }'

REST API

Conventions

List the queue

curl "https://api.epiensos.com/v1/matches?stage=queued&minScore=60&limit=20" \
  -H "Authorization: Bearer epk_live_..." \
  -H "X-Team-Id: team_123" \
  -H "Accept: application/json"

Approve a match

curl -X POST "https://api.epiensos.com/v1/matches/mtch_456/approve" \
  -H "Authorization: Bearer epk_live_..." \
  -H "X-Team-Id: team_123" \
  -H "Content-Type: application/json" \
  -d '{ "note": "HEAL aligned, request NIDA assignment" }'

Endpoints

The surface, grouped

Dashboard and pipeline

  • GET /dashboard
  • GET /dashboard/timeline?from=&to=
  • GET /matches?stage=&minScore=&funderId=&sort=
  • GET /matches/:id
  • POST /matches/:id/approve
  • POST /matches/:id/decline
  • POST /matches/:id/rescore
  • GET /opportunities?q=&status=&closeBefore=
  • POST /opportunities

Applications

  • GET /applications?status=
  • GET /applications/:id
  • POST /applications/:id/draft
  • PATCH /applications/:id/sections/:key
  • POST /applications/:id/sections/:key/redraft
  • POST /applications/:id/fill-forms
  • POST /applications/:id/review
  • POST /applications/:id/submit
  • POST /applications/:id/outcome

Facts and information requests

  • GET /facts?q=
  • POST /facts
  • PATCH /facts/:id
  • POST /facts/refresh
  • GET /information-requests?status=open
  • POST /information-requests/:id/answer

Awards and deliverables

  • GET /awards
  • GET /awards/:id
  • POST /awards/:id/extract-terms
  • GET /deliverables?status=&dueBefore=
  • POST /deliverables/:id/generate
  • POST /deliverables/:id/submit
  • GET /awards/:id/accounting

Learning

  • GET /talr/cycles?applicationId=
  • POST /talr/cycles/:id/think|act|learn|repeat
  • GET /talr/model
  • GET /strategy
  • POST /strategy/refresh

AI jobs (agent driver)

  • GET /ai/jobs?status=queued
  • POST /ai/jobs/:id/claim
  • POST /ai/jobs/:id/complete
  • POST /ai/jobs/:id/fail

Team and keys

  • GET /me
  • GET /teams/current
  • PATCH /teams/current/profile
  • GET /settings/strictness-preview?value=NN
  • GET /api-keys
  • POST /api-keys

Public, no auth

  • POST /public/waitlist
  • GET /public/status
  • GET /openapi.json

The full contract, including request and response shapes, is in the OpenAPI document.

MCP server

The same operations as tools

Streamable HTTP at https://api.epiensos.com/mcp. Authenticate with the same API key. Add it to any MCP client with a configuration like this.

{
  "mcpServers": {
    "epiensos": {
      "type": "streamable-http",
      "url": "https://api.epiensos.com/mcp",
      "headers": {
        "Authorization": "Bearer epk_live_...",
        "X-Team-Id": "team_123"
      }
    }
  }
}

Claude Code

claude mcp add --transport http epiensos https://api.epiensos.com/mcp \
  --header "Authorization: Bearer epk_live_..." \
  --header "X-Team-Id: team_123"

Tools

list_matchesget_matchapprove_matchdecline_matchlist_applicationsget_applicationupdate_sectionsubmit_applicationlist_deliverablesgenerate_deliverableanswer_information_requestlist_ai_jobsclaim_ai_jobcomplete_ai_jobget_dashboardget_company_profileupdate_company_profilesearch_factsupsert_fact

Resources

epiensos://company-profileepiensos://strategy-notes

Agent driver

Pull the AI work instead of calling a model

Drafting, scoring rationales, review panels, and deliverable generation are AI jobs. By default a provider router runs them with Anthropic, OpenAI, or xAI models at a fast, standard, or deep tier. With the agent driver, an external agent claims jobs from the queue, does the work with whatever it has, and hands the output back. This lets a Cowork session, a Claude Code session, or any MCP client be the model.

# Claim a queued AI job, do the work, hand back the output
curl "https://api.epiensos.com/v1/ai/jobs?status=queued" -H "Authorization: Bearer epk_live_..."
curl -X POST "https://api.epiensos.com/v1/ai/jobs/job_789/claim" -H "Authorization: Bearer epk_live_..."
curl -X POST "https://api.epiensos.com/v1/ai/jobs/job_789/complete" \
  -H "Authorization: Bearer epk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "output": { "content": "Specific Aims. ..." } }'

Outputs must not contain semicolons or em dashes. A post processor rewrites any that slip through, and the writing rules are included in every job payload.

Discovery

Agent manifest and llms.txt

Machine readable descriptions of the product are served from this site.

{
  "name": "epiensos",
  "description": "Full lifecycle grant platform. Discover, qualify, decide, apply, monitor, deliver, learn.",
  "api_base": "https://api.epiensos.com/v1",
  "openapi_url": "https://api.epiensos.com/v1/openapi.json",
  "mcp_url": "https://api.epiensos.com/mcp",
  "auth": {
    "type": "api_key",
    "header": "Authorization",
    "scheme": "Bearer",
    "key_prefix": "epk_live_"
  },
  "signup_url": "https://epiensos.com/#invite",
  "waitlist_endpoint": "https://api.epiensos.com/v1/public/waitlist"
}

Invitation only

Request an invitation

Sign up is invitation only while we work with early teams. People from approved organizations get immediate access after signing in at app.epiensos.com. Everyone else joins the waitlist and a platform admin releases accounts in order.

Sign in