Rank
70
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Xpersona Agent
Share real-time organizational context with your AI agent — query your context graph, manage records, and receive live insights --- name: nex description: Share real-time organizational context with your AI agent — query your context graph, manage records, and receive live insights metadata: {"clawdbot": {"emoji": "\U0001F4CA", "homepage": "https://github.com/nex-crm/nex-as-a-skill", "primaryEnv": "NEX_API_KEY", "requires": {"env": ["NEX_API_KEY"], "bins": ["curl", "jq", "bash"]}, "files": ["scripts/nex-api.sh"]}} --- Nex - Real-time Organiza
git clone https://github.com/nex-crm/nex-as-a-skill.gitOverall rank
#48
Adoption
3 GitHub stars
Trust
Unknown
Freshness
Feb 25, 2026
Freshness
Last checked Feb 25, 2026
Best For
nex is best for take, be, two workflows where OpenClaw compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB OPENCLEW, runtime-metrics, public facts pack
Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.
Overview
Share real-time organizational context with your AI agent — query your context graph, manage records, and receive live insights --- name: nex description: Share real-time organizational context with your AI agent — query your context graph, manage records, and receive live insights metadata: {"clawdbot": {"emoji": "\U0001F4CA", "homepage": "https://github.com/nex-crm/nex-as-a-skill", "primaryEnv": "NEX_API_KEY", "requires": {"env": ["NEX_API_KEY"], "bins": ["curl", "jq", "bash"]}, "files": ["scripts/nex-api.sh"]}} --- Nex - Real-time Organiza Capability contract not published. No trust telemetry is available yet. 3 GitHub stars reported by the source. Last updated 4/15/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Feb 25, 2026
Vendor
Nex Crm
Artifacts
0
Benchmarks
0
Last release
Unpublished
Install & run
git clone https://github.com/nex-crm/nex-as-a-skill.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.
Public facts
Vendor
Nex Crm
Protocol compatibility
OpenClaw
Adoption signal
3 GitHub stars
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.
Captured outputs
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
json
{
"skills": {
"entries": {
"nex": {
"enabled": true,
"env": {
"NEX_API_KEY": "sk-your_key_here"
}
}
}
}
}json
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/objects",
"timeout": 120
}json
{
"tool": "exec",
"command": "printf '%s' '{\"query\":\"What do I know about John?\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/context/ask",
"timeout": 120
}json
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/insights?last=1h' | jq '[.insights[] | {type, content}]'",
"timeout": 120
}json
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh sse /v1/insights/stream",
"timeout": 120
}json
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/insights?last=1h' | jq '[.insights[] | {type, content, confidence_level, who: .target.hint}]'",
"timeout": 120
}Editorial read
Docs source
GITHUB OPENCLEW
Editorial quality
ready
Share real-time organizational context with your AI agent — query your context graph, manage records, and receive live insights --- name: nex description: Share real-time organizational context with your AI agent — query your context graph, manage records, and receive live insights metadata: {"clawdbot": {"emoji": "\U0001F4CA", "homepage": "https://github.com/nex-crm/nex-as-a-skill", "primaryEnv": "NEX_API_KEY", "requires": {"env": ["NEX_API_KEY"], "bins": ["curl", "jq", "bash"]}, "files": ["scripts/nex-api.sh"]}} --- Nex - Real-time Organiza
Nex shares real-time organizational context with your AI agent: query your context graph, process conversations, receive live insights, and manage the underlying records, schemas, relationships, tasks, and notes.
~/.openclaw/openclaw.json:
{
"skills": {
"entries": {
"nex": {
"enabled": true,
"env": {
"NEX_API_KEY": "sk-your_key_here"
}
}
}
}
}
scripts/nex-api.sh)https://app.nex.ai/api/developers only$NEX_API_KEY environment variable (never from prompts)printf '%s' pipe) to avoid shell injectionset -euo pipefail for safe shell executionIMPORTANT — Safe command construction:
printf '%s' '{...}' to pipe JSON via stdin — printf '%s' does not interpret escape sequences or variables in the format argumentjq -n --arg q "user text" '{query: $q}'| URL Pattern | Methods | Data Sent |
|-------------|---------|-----------|
| https://app.nex.ai/api/developers/v1/* | GET, POST, PUT, PATCH, DELETE | Context queries, records, insights, text content |
CRITICAL: The Nex API can take 10-60 seconds to respond. You MUST set timeout: 120 on every exec tool call.
All API calls go through the wrapper script at {baseDir}/scripts/nex-api.sh:
GET request:
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/objects",
"timeout": 120
}
POST with JSON body (pipe body via stdin):
{
"tool": "exec",
"command": "printf '%s' '{\"query\":\"What do I know about John?\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/context/ask",
"timeout": 120
}
GET with jq post-processing (pipe output through jq):
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/insights?last=1h' | jq '[.insights[] | {type, content}]'",
"timeout": 120
}
SSE stream:
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh sse /v1/insights/stream",
"timeout": 120
}
Nex API responses (especially Insights and List Records) can be 10KB-100KB+. The exec tool may truncate output. You MUST handle this properly.
Pipe output through jq to extract only what you need:
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/insights?last=1h' | jq '[.insights[] | {type, content, confidence_level, who: .target.hint}]'",
"timeout": 120
}
Rules for processing API output:
{ or [, the output may be truncated — retry with a smaller page size or time window.Each API key has scopes that control access. Request the scopes you need when creating your key at https://app.nex.ai/settings/developer
| Scope | Grants Access To |
|-------|-----------------|
| object.read | List objects, view schema, get object definitions |
| object.write | Create/update/delete object definitions and attributes |
| record.read | Get, list, search records, timeline |
| record.write | Create, update, upsert, delete records |
| list.read | View lists and list definitions |
| list.member.read | View list members |
| list.member.write | Add, update, delete list members |
| relationship.read | Read relationship definitions |
| relationship.write | Create/delete relationship definitions and instances |
| task.read | Read tasks |
| task.write | Create/update/delete tasks |
| note.read | Read notes |
| note.write | Create/update/delete notes |
| insight.stream | Insights REST + SSE stream |
Before calling an endpoint, decide which approach fits:
| Situation | Use | Why | |-----------|-----|-----| | You have structured data with known fields (name, email, company) | Create/Update Record | Deterministic, exact field mapping | | You have unstructured text (meeting notes, email, conversation) | ProcessText API | AI extracts entities, creates/updates records, AND generates insights automatically | | You're unsure which attributes to pass or the data is messy | ProcessText API | Let AI figure out the entities and relationships -- it also discovers things you'd miss | | You know the exact object slug and want a filtered list | AI List Job | Natural language query against a known object type | | You're not sure which object type to query, or the question is open-ended | Ask API | Searches across all entity types and the full context graph | | You need to read/export specific records by ID or with pagination | Get/List Records | Direct data access | | You want to find records by name across all types | Search API | Fast text search across all object types |
Key insight: ProcessText does everything Create/Update Record does, plus it extracts relationships, generates insights, and handles ambiguity. Prefer ProcessText when working with conversational or unstructured data. Only use the deterministic Record APIs when you have clean, structured data with known attribute slugs.
Create a new custom object type.
Endpoint: POST /v1/objects
Scope: object.write
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| name | string | yes | Display name |
| name_plural | string | no | Plural display name |
| slug | string | yes | URL-safe identifier |
| description | string | no | Description |
| type | string | no | "person", "company", "custom", "deal" (default: "custom") |
{
"tool": "exec",
"command": "printf '%s' '{\"name\":\"Project\",\"name_plural\":\"Projects\",\"slug\":\"project\",\"description\":\"Project tracker\",\"type\":\"custom\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/objects",
"timeout": 120
}
Get a single object definition with its attributes.
Endpoint: GET /v1/objects/{slug}
Scope: object.read
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/objects/project",
"timeout": 120
}
Discover available object types (person, company, etc.) and their attribute schemas. Call this first to learn what fields are available before creating or querying records.
Endpoint: GET /v1/objects
Scope: object.read
Query Parameters:
include_attributes (boolean, optional) -- Set true to include attribute definitions{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/objects?include_attributes=true'",
"timeout": 120
}
Response:
{
"data": [
{
"id": "123",
"slug": "person",
"name": "Person",
"name_plural": "People",
"type": "object",
"description": "A contact or person",
"attributes": [
{
"id": "1",
"slug": "name",
"name": "Name",
"type": "name",
"options": {
"is_required": true,
"is_unique": false,
"is_multi_value": false
}
}
]
}
]
}
Update an existing object definition.
Endpoint: PATCH /v1/objects/{slug}
Scope: object.write
Request body (all fields optional):
| Field | Type | Description |
|-------|------|-------------|
| name | string | New display name |
| name_plural | string | New plural name |
| description | string | New description |
{
"tool": "exec",
"command": "printf '%s' '{\"name\":\"Updated Project\",\"description\":\"Updated description\"}' | bash {baseDir}/scripts/nex-api.sh PATCH /v1/objects/project",
"timeout": 120
}
Delete an object definition and all its records.
Endpoint: DELETE /v1/objects/{slug}
Scope: object.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/objects/project",
"timeout": 120
}
Add a new attribute to an object type.
Endpoint: POST /v1/objects/{slug}/attributes
Scope: object.write
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| name | string | yes | Display name |
| slug | string | yes | URL-safe identifier |
| type | string | yes | "text", "number", "email", "phone", "url", "date", "boolean", "currency", "location", "select", "social_profile", "domain", "full_name" |
| description | string | no | Description |
| options | object | no | is_required, is_unique, is_multi_value, use_raw_format, is_whole_number, select_options |
{
"tool": "exec",
"command": "printf '%s' '{\"name\":\"Status\",\"slug\":\"status\",\"type\":\"select\",\"description\":\"Current status\",\"options\":{\"is_required\":true,\"select_options\":[{\"name\":\"Open\"},{\"name\":\"In Progress\"},{\"name\":\"Done\"}]}}' | bash {baseDir}/scripts/nex-api.sh POST /v1/objects/project/attributes",
"timeout": 120
}
Update an existing attribute definition.
Endpoint: PATCH /v1/objects/{slug}/attributes/{attr_id}
Scope: object.write
Request body (all fields optional):
| Field | Type | Description |
|-------|------|-------------|
| name | string | New display name |
| description | string | New description |
| options | object | is_required, select_options, use_raw_format, is_whole_number |
{
"tool": "exec",
"command": "printf '%s' '{\"name\":\"Updated Status\",\"options\":{\"is_required\":false}}' | bash {baseDir}/scripts/nex-api.sh PATCH /v1/objects/project/attributes/456",
"timeout": 120
}
Remove an attribute from an object type.
Endpoint: DELETE /v1/objects/{slug}/attributes/{attr_id}
Scope: object.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/objects/project/attributes/456",
"timeout": 120
}
Prefer ProcessText over these endpoints when your input is unstructured text (conversation transcripts, meeting notes, emails). ProcessText automatically creates and updates records, extracts relationships, and generates insights -- all from raw text. Use the endpoints below only when you have clean, structured data with known attribute slugs and values.
Create a new record for an object type.
Endpoint: POST /v1/objects/{slug}
Scope: record.write
Request body:
attributes (required) -- Must include name (string or object). Additional fields depend on the object schema.{
"tool": "exec",
"command": "printf '%s' '{\"attributes\":{\"name\":{\"first_name\":\"Jane\",\"last_name\":\"Doe\"},\"email\":\"jane@example.com\",\"company\":\"Acme Corp\"}}' | bash {baseDir}/scripts/nex-api.sh POST /v1/objects/person",
"timeout": 120
}
Response:
{
"id": "789",
"object_id": "123",
"type": "person",
"workspace_id": "111",
"attributes": {
"name": {"first_name": "Jane", "last_name": "Doe"},
"email": "jane@example.com",
"company": "Acme Corp"
},
"created_at": "2026-02-11T10:00:00Z",
"updated_at": "2026-02-11T10:00:00Z"
}
Create a record if it doesn't exist, or update it if a match is found on the specified attribute.
Endpoint: PUT /v1/objects/{slug}
Scope: record.write
Request body:
attributes (required) -- Must include name when creatingmatching_attribute (required) -- Slug or ID of the attribute to match on (e.g., email){
"tool": "exec",
"command": "printf '%s' '{\"matching_attribute\":\"email\",\"attributes\":{\"name\":\"Jane Doe\",\"email\":\"jane@example.com\",\"job_title\":\"VP of Sales\"}}' | bash {baseDir}/scripts/nex-api.sh PUT /v1/objects/person",
"timeout": 120
}
Retrieve a specific record by its ID.
Endpoint: GET /v1/records/{record_id}
Scope: record.read
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/records/789",
"timeout": 120
}
Update specific attributes on an existing record. Only the provided attributes are changed.
Endpoint: PATCH /v1/records/{record_id}
Scope: record.write
Request body:
attributes -- Object with the fields to update{
"tool": "exec",
"command": "printf '%s' '{\"attributes\":{\"job_title\":\"CTO\",\"phone\":\"+1-555-0123\"}}' | bash {baseDir}/scripts/nex-api.sh PATCH /v1/records/789",
"timeout": 120
}
Permanently delete a record.
Endpoint: DELETE /v1/records/{record_id}
Scope: record.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/records/789",
"timeout": 120
}
List records for an object type with optional filtering, sorting, and pagination.
Endpoint: POST /v1/objects/{slug}/records
Scope: record.read
Request body:
attributes -- Which attributes to return: "all", "primary", "none", or a custom objectlimit (integer) -- Number of records to returnoffset (integer) -- Pagination offsetsort -- Object with attribute (slug) and direction ("asc" or "desc"){
"tool": "exec",
"command": "printf '%s' '{\"attributes\":\"all\",\"limit\":10,\"offset\":0,\"sort\":{\"attribute\":\"updated_at\",\"direction\":\"desc\"}}' | bash {baseDir}/scripts/nex-api.sh POST /v1/objects/person/records",
"timeout": 120
}
Response:
{
"data": [
{
"id": "789",
"type": "person",
"attributes": {"name": "Jane Doe", "email": "jane@example.com"},
"created_at": "2026-02-11T10:00:00Z",
"updated_at": "2026-02-11T10:00:00Z"
}
],
"total": 42,
"limit": 10,
"offset": 0
}
Get paginated timeline events for a record (tasks, notes, attribute changes, etc.).
Endpoint: GET /v1/records/{record_id}/timeline
Scope: record.read
Query Parameters:
limit (int) -- Max events (1-100, default: 50)cursor (string) -- Pagination cursor from previous response{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/records/1001/timeline?limit=20'",
"timeout": 120
}
Response:
{
"data": [
{
"id": "5000",
"resource_type": "task",
"resource_id": "800",
"event_type": "created",
"event_payload": {
"task": {"id": "800", "title": "Follow up", "priority": "high"}
},
"event_timestamp": "2026-02-13T10:00:00Z",
"created_by": "developer_api"
}
],
"has_next_page": true,
"next_cursor": "4999"
}
Resource types: entity, task, note, list_item, attribute
Event types: created, updated, deleted, archived
Define a relationship type between two object types.
Endpoint: POST /v1/relationships
Scope: relationship.write
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| type | string | yes | "one_to_one", "one_to_many", "many_to_many" |
| entity_definition_1_id | string | yes | First object definition ID |
| entity_definition_2_id | string | yes | Second object definition ID |
| entity_1_to_2_predicate | string | no | Label for 1->2 direction |
| entity_2_to_1_predicate | string | no | Label for 2->1 direction |
{
"tool": "exec",
"command": "printf '%s' '{\"type\":\"one_to_many\",\"entity_definition_1_id\":\"123\",\"entity_definition_2_id\":\"456\",\"entity_1_to_2_predicate\":\"has\",\"entity_2_to_1_predicate\":\"belongs to\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/relationships",
"timeout": 120
}
Response:
{
"id": "789",
"type": "one_to_many",
"entity_definition_1_id": "123",
"entity_definition_2_id": "456",
"entity_1_to_2_predicate": "has",
"entity_2_to_1_predicate": "belongs to",
"created_at": "2026-02-13T10:00:00Z"
}
Get all relationship definitions in the workspace.
Endpoint: GET /v1/relationships
Scope: relationship.read
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/relationships",
"timeout": 120
}
Remove a relationship definition.
Endpoint: DELETE /v1/relationships/{id}
Scope: relationship.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/relationships/789",
"timeout": 120
}
Link two records using an existing relationship definition.
Endpoint: POST /v1/records/{record_id}/relationships
Scope: relationship.write
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| definition_id | string | yes | Relationship definition ID |
| entity_1_id | string | yes | First record ID |
| entity_2_id | string | yes | Second record ID |
{
"tool": "exec",
"command": "printf '%s' '{\"definition_id\":\"789\",\"entity_1_id\":\"1001\",\"entity_2_id\":\"2002\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/records/1001/relationships",
"timeout": 120
}
Remove a relationship between two records.
Endpoint: DELETE /v1/records/{record_id}/relationships/{relationship_id}
Scope: relationship.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/records/1001/relationships/5001",
"timeout": 120
}
Get all lists associated with an object type.
Endpoint: GET /v1/objects/{slug}/lists
Scope: list.read
Parameters:
slug (path) -- Object type slug (e.g., person, company)include_attributes (query, optional) -- Include attribute definitions{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/objects/person/lists?include_attributes=true'",
"timeout": 120
}
Response:
{
"data": [
{
"id": "456",
"slug": "vip-contacts",
"name": "VIP Contacts",
"type": "list",
"attributes": []
}
]
}
Create a new list under an object type.
Endpoint: POST /v1/objects/{slug}/lists
Scope: object.write
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| name | string | yes | List display name |
| name_plural | string | no | Plural name |
| slug | string | yes | URL-safe identifier |
| description | string | no | Description |
{
"tool": "exec",
"command": "printf '%s' '{\"name\":\"VIP Contacts\",\"slug\":\"vip-contacts\",\"description\":\"High-value contacts\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/objects/contact/lists",
"timeout": 120
}
Get a list definition by ID.
Endpoint: GET /v1/lists/{id}
Scope: list.read
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/lists/300",
"timeout": 120
}
Delete a list definition.
Endpoint: DELETE /v1/lists/{id}
Scope: object.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/lists/300",
"timeout": 120
}
Add an existing record to a list.
Endpoint: POST /v1/lists/{id}
Scope: list.member.write
Request body:
parent_id (required) -- ID of the existing record to addattributes (optional) -- List-specific attribute values{
"tool": "exec",
"command": "printf '%s' '{\"parent_id\":\"789\",\"attributes\":{\"status\":\"active\"}}' | bash {baseDir}/scripts/nex-api.sh POST /v1/lists/456",
"timeout": 120
}
Add a record to a list, or update its list-specific attributes if already a member.
Endpoint: PUT /v1/lists/{id}
Scope: list.member.write
{
"tool": "exec",
"command": "printf '%s' '{\"parent_id\":\"789\",\"attributes\":{\"priority\":\"high\"}}' | bash {baseDir}/scripts/nex-api.sh PUT /v1/lists/456",
"timeout": 120
}
Get paginated records from a specific list.
Endpoint: POST /v1/lists/{id}/records
Scope: list.member.read
Request body: Same as List Records (attributes, limit, offset, sort)
{
"tool": "exec",
"command": "printf '%s' '{\"attributes\":\"all\",\"limit\":20}' | bash {baseDir}/scripts/nex-api.sh POST /v1/lists/456/records",
"timeout": 120
}
Update list-specific attributes for a record within a list.
Endpoint: PATCH /v1/lists/{id}/records/{record_id}
Scope: list.member.write
{
"tool": "exec",
"command": "printf '%s' '{\"attributes\":{\"status\":\"closed-won\"}}' | bash {baseDir}/scripts/nex-api.sh PATCH /v1/lists/456/records/789",
"timeout": 120
}
Remove a record from a list.
Endpoint: DELETE /v1/lists/{id}/records/{record_id}
Scope: record.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/lists/300/records/4001",
"timeout": 120
}
Create a new task, optionally linked to records and assigned to users.
Endpoint: POST /v1/tasks
Scope: task.write
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| title | string | yes | Task title (non-empty) |
| description | string | no | Task description |
| priority | string | no | "low", "medium", "high", "urgent" (default: "unspecified") |
| due_date | string (RFC3339) | no | Due date |
| entity_ids | string[] | no | Associated record IDs |
| assignee_ids | string[] | no | Assigned user IDs |
{
"tool": "exec",
"command": "printf '%s' '{\"title\":\"Follow up with client\",\"description\":\"Discuss contract renewal\",\"priority\":\"high\",\"due_date\":\"2026-03-01T09:00:00Z\",\"entity_ids\":[\"1001\",\"1002\"],\"assignee_ids\":[\"50\"]}' | bash {baseDir}/scripts/nex-api.sh POST /v1/tasks",
"timeout": 120
}
Response:
{
"id": "800",
"title": "Follow up with client",
"description": "Discuss contract renewal",
"priority": "high",
"due_date": "2026-03-01T09:00:00Z",
"assignee_ids": ["50"],
"entity_ids": ["1001", "1002"],
"created_by": "developer_api",
"created_at": "2026-02-13T10:00:00Z"
}
List tasks with optional filtering.
Endpoint: GET /v1/tasks
Scope: task.read
Query Parameters:
| Param | Type | Description |
|-------|------|-------------|
| entity_id | string | Filter by associated record |
| assignee_id | string | Filter by assignee |
| search | string | Search task titles |
| is_completed | bool | true/false |
| limit | int | Max results (1-500, default: 100) |
| offset | int | Pagination offset (default: 0) |
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/tasks?entity_id=1001&is_completed=false&limit=20'",
"timeout": 120
}
Response:
{
"data": [],
"has_more": true,
"total": 47,
"next_offset": 20
}
Get a single task by ID.
Endpoint: GET /v1/tasks/{task_id}
Scope: task.read
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/tasks/800",
"timeout": 120
}
Update a task's fields. All fields are optional.
Endpoint: PATCH /v1/tasks/{task_id}
Scope: task.write
Request body (all fields optional):
| Field | Type | Description |
|-------|------|-------------|
| title | string | New title (cannot be empty) |
| description | string | New description (empty string clears it) |
| priority | string | New priority (empty string clears it) |
| due_date | string (RFC3339) | New due date |
| is_completed | bool | Mark complete/incomplete |
| entity_ids | string[] | Replace associated records |
| assignee_ids | string[] | Replace assignees |
{
"tool": "exec",
"command": "printf '%s' '{\"priority\":\"urgent\",\"is_completed\":true}' | bash {baseDir}/scripts/nex-api.sh PATCH /v1/tasks/800",
"timeout": 120
}
Archive a task (soft delete). Sets archived_at timestamp — the task is not permanently removed.
Endpoint: DELETE /v1/tasks/{task_id}
Scope: task.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/tasks/800",
"timeout": 120
}
Create a new note, optionally linked to a record.
Endpoint: POST /v1/notes
Scope: note.write
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| title | string | yes | Note title (non-empty) |
| content | string | no | Note body text |
| entity_id | string | no | Associated record ID |
{
"tool": "exec",
"command": "printf '%s' '{\"title\":\"Meeting notes\",\"content\":\"Discussed Q3 roadmap...\",\"entity_id\":\"1001\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/notes",
"timeout": 120
}
Response:
{
"id": "900",
"title": "Meeting notes",
"content": "Discussed Q3 roadmap...",
"entity_id": "1001",
"created_by": "developer_api",
"created_at": "2026-02-13T10:00:00Z"
}
List notes, optionally filtered by associated record.
Endpoint: GET /v1/notes
Scope: note.read
Query Parameters:
| Param | Type | Description |
|-------|------|-------------|
| entity_id | string | Filter notes by associated record |
Response capped at 200 notes max.
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/notes?entity_id=1001'",
"timeout": 120
}
Get a single note by ID.
Endpoint: GET /v1/notes/{note_id}
Scope: note.read
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/notes/900",
"timeout": 120
}
Update a note's fields.
Endpoint: PATCH /v1/notes/{note_id}
Scope: note.write
Request body (all fields optional):
| Field | Type | Description |
|-------|------|-------------|
| title | string | New title |
| content | string | New content |
| entity_id | string | Change associated record |
{
"tool": "exec",
"command": "printf '%s' '{\"title\":\"Updated meeting notes\",\"content\":\"Added action items...\"}' | bash {baseDir}/scripts/nex-api.sh PATCH /v1/notes/900",
"timeout": 120
}
Archive a note (soft delete). Sets archived_at timestamp — the note is not permanently removed.
Endpoint: DELETE /v1/notes/{note_id}
Scope: note.write
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh DELETE /v1/notes/900",
"timeout": 120
}
Search records by name across all object types.
Endpoint: POST /v1/search
Scope: record.read
Request body:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| query | string | yes | Search query (1-500 chars) |
{
"tool": "exec",
"command": "printf '%s' '{\"query\":\"john doe\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/search",
"timeout": 120
}
Response:
{
"results": {
"person": [
{
"id": "1001",
"primary_value": "John Doe",
"matched_value": "John Doe",
"score": 0.95,
"entity_definition_id": "10"
}
],
"company": [
{
"id": "2001",
"primary_value": "Doe Industries",
"matched_value": "Doe Industries",
"score": 0.72,
"entity_definition_id": "11"
}
]
},
"errored_search_types": []
}
Results are grouped by object type (e.g., "person", "company", "deal"). If some search types fail, partial results are returned with errored_search_types listing which types had errors.
Use this when you need to recall information about contacts, companies, or relationships.
Endpoint: POST /v1/context/ask
Scope: record.read
{
"tool": "exec",
"command": "printf '%s' '{\"query\":\"What do I know about John Smith?\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/context/ask",
"timeout": 120
}
Response:
{
"answer": "John Smith is a VP of Sales at Acme Corp...",
"entities_considered": [
{"id": 123, "name": "John Smith", "type": "contact"}
],
"signals_used": [
{"id": 456, "content": "Met at conference last month"}
],
"metadata": {
"query_type": "entity_specific"
}
}
Example queries:
Use this to ingest new information from conversations, meeting notes, or other text.
Endpoint: POST /v1/context/text
Scope: record.write
Request body:
content (required) -- The text to processcontext (optional) -- Additional context about the text (e.g., "Sales call notes"){
"tool": "exec",
"command": "printf '%s' '{\"content\":\"Had a great call with John Smith from Acme Corp.\",\"context\":\"Sales call notes\"}' | bash {baseDir}/scripts/nex-api.sh POST /v1/context/text",
"timeout": 120
}
Response:
{
"artifact_id": "abc123"
}
After calling ProcessText, use Get Artifact Status to check processing results.
Check the processing status and results after calling ProcessText.
Endpoint: GET /v1/context/artifacts/{artifact_id}
Scope: record.read
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET /v1/context/artifacts/abc123",
"timeout": 120
}
Response:
{
"operation_id": 48066188026052610,
"status": "completed",
"result": {
"entities_extracted": [
{"name": "John Smith", "type": "PERSON", "action": "created"},
{"name": "Acme Corp", "type": "COMPANY", "action": "updated"}
],
"entities_created": 1,
"entities_updated": 1,
"relationships": 1,
"insights": [
{"content": "Acme Corp expanding to APAC", "confidence": 0.85}
],
"tasks": []
},
"created_at": "2026-02-05T10:30:00Z",
"completed_at": "2026-02-05T10:30:15Z"
}
Status values: pending, processing, completed, failed
Typical workflow:
artifact_idstatus is completed or failedUse natural language to search your context graph and generate a curated list of contacts or companies. Use this when you know the object type (contact or company) and want AI to filter and rank matches. If you're unsure which object type applies or the question is open-ended, use the Ask API instead.
Endpoint: POST /v1/context/list/jobs
Scope: list.member.write
Request body:
query (required) -- Natural language search queryobject_type (optional) -- "contact" or "company" (default: "contact")limit (optional) -- Number of results (default: 50, max: 100)include_attributes (optional) -- Include all entity attribute values (default: false){
"tool": "exec",
"command": "printf '%s' '{\"query\":\"high priority contacts in enterprise deals\",\"object_type\":\"contact\",\"limit\":20,\"include_attributes\":true}' | bash {baseDir}/scripts/nex-api.sh POST /v1/context/list/jobs",
"timeout": 120
}
Response:
{
"message": {
"job_id": "12345678901234567",
"status": "pending"
}
}
Check status and results of an AI list generation job. Poll until status is completed or failed.
Endpoint: GET /v1/context/list/jobs/{job_id}
Scope: list.member.read
Query Parameters:
include_attributes (boolean, optional) -- Include full attributes for each entity{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/context/list/jobs/12345678901234567?include_attributes=true'",
"timeout": 120
}
Response (completed):
{
"message": {
"job_id": "12345678901234567",
"status": "completed",
"created_at": "2026-02-11T10:00:00Z",
"count": 5,
"query_interpretation": "Finding contacts involved in enterprise-level deals marked as high priority",
"entities": [
{
"id": "789",
"name": "Jane Doe",
"type": "contact",
"reason": "Lead on $500K enterprise deal with Acme Corp, marked high priority",
"highlights": [
"Contract negotiation in progress",
"Budget approved Q1 2026",
"Executive sponsor confirmed"
],
"attributes": {}
}
]
}
}
Status values: pending, processing, completed, failed
Typical workflow:
job_idstatus is completed or failedQuery insights by time window. Supports two modes.
Endpoint: GET /v1/insights
Scope: insight.stream
Query Parameters:
last -- Duration window, e.g., 30m, 2h, 1h30mfrom + to -- UTC time range in RFC3339 formatlimit (optional) -- Max results (default: 20, max: 100)If neither last nor from/to is specified, returns the most recent insights (default 20).
Last 30 minutes:
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/insights?last=30m'",
"timeout": 120
}
Between two dates:
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/insights?from=2026-02-07T00:00:00Z&to=2026-02-08T00:00:00Z'",
"timeout": 120
}
Recommended: Pipe through jq to extract a summary (responses can be 10-100KB+):
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh GET '/v1/insights?last=1h' | jq '{insight_count: (.insights | length), insights: [.insights[] | {type, content, confidence_level, who: .target.hint, entity_type: .target.entity_type}]}'",
"timeout": 120
}
When to use:
Notable insight categories (summarize for user review):
confidence_level of "high" or "very_high")Receive insights as they are discovered in real time.
Endpoint: GET /v1/insights/stream
Scope: insight.stream
{
"tool": "exec",
"command": "bash {baseDir}/scripts/nex-api.sh sse /v1/insights/stream",
"timeout": 120
}
Connection behavior:
: connected workspace_id=... token_id=... on connectioninsight.replay events (up to 20): keepalive) sent every 30 secondsevent: insight.batch.created\ndata: {...}\n\nEvent payload structure:
{
"workspace": {
"name": "Acme Corp",
"slug": "acme",
"business_info": {"name": "Acme Corp", "domain": "acme.com"}
},
"insights": [{
"type": "opportunity",
"type_description": "A potential business opportunity",
"content": "Budget approval expected next quarter",
"confidence": 0.85,
"confidence_level": "high",
"target": {
"type": "entity",
"entity_type": "person",
"hint": "John Smith",
"signals": [{"type": "email", "value": "john@acme.com"}]
},
"evidence": [{
"excerpt": "We should have budget approval by Q2",
"artifact": {"type": "email", "subject": "RE: Proposal"}
}]
}],
"insight_count": 1,
"emitted_at": "2026-02-05T10:30:00Z"
}
Insight types: opportunity, risk, relationship, preference, milestone, activity, characteristic, role_detail
When to use: Keep the SSE connection open in the background during active conversations. For one-off queries, use the Ask API instead.
| Status Code | Meaning | Action | |-------------|---------|--------| | 400 | Invalid request | Check request body and parameters | | 401 | Invalid API key | Check NEX_API_KEY is set correctly | | 403 | Missing scope | Verify API key has the required scope | | 404 | Not found | Check the record/object/list ID exists | | 429 | Rate limited | Wait and retry with exponential backoff | | 500 | Server error | Retry after a brief delay |
Good use cases:
Not for:
Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.
Machine interfaces
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/snapshot"
curl -s "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/contract"
curl -s "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/trust"
Operational fit
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_OPENCLEW",
"generatedAt": "2026-04-17T05:10:05.943Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "take",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "be",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "two",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile capability:take|supported|profile capability:be|supported|profile capability:two|supported|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Nex Crm",
"href": "https://github.com/nex-crm/nex-as-a-skill",
"sourceUrl": "https://github.com/nex-crm/nex-as-a-skill",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T05:21:22.124Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-04-15T05:21:22.124Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "3 GitHub stars",
"href": "https://github.com/nex-crm/nex-as-a-skill",
"sourceUrl": "https://github.com/nex-crm/nex-as-a-skill",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T05:21:22.124Z",
"isPublic": true
},
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/nex-crm-nex-as-a-skill/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to nex and adjacent AI workflows.