Artifacts API

Artifacts are verifiable proof objects generated during AI execution. They provide transparent decision-making records including task plans, implementation plans, walkthroughs, verification proofs, decision records, code changes, and research summaries. Artifacts support status tracking, comments, version chains via superseding, and can be linked to conversations, messages, or workflow runs. Rate-limited to 120 requests per minute.

Artifact Metadata

Public endpoint for discovering available artifact types and statuses. No authentication required.

GET/api/v2/artifacts/meta/types

Returns the list of supported artifact types and valid status values. This endpoint is public and does not require authentication.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/meta/types

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": {
    400">class="text-emerald-400">"types": {
      400">class="text-emerald-400">"TASK_PLAN": 400">class="text-emerald-400">"task_plan",
      400">class="text-emerald-400">"IMPLEMENTATION_PLAN": 400">class="text-emerald-400">"implementation_plan",
      400">class="text-emerald-400">"WALKTHROUGH": 400">class="text-emerald-400">"walkthrough",
      400">class="text-emerald-400">"VERIFICATION_PROOF": 400">class="text-emerald-400">"verification_proof",
      400">class="text-emerald-400">"DECISION_RECORD": 400">class="text-emerald-400">"decision_record",
      400">class="text-emerald-400">"PLAN_MODE": 400">class="text-emerald-400">"plan_mode",
      400">class="text-emerald-400">"CODE_CHANGE": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"RESEARCH_SUMMARY": 400">class="text-emerald-400">"research_summary"
    },
    400">class="text-emerald-400">"statuses": {
      400">class="text-emerald-400">"DRAFT": 400">class="text-emerald-400">"draft",
      400">class="text-emerald-400">"PENDING_REVIEW": 400">class="text-emerald-400">"pending_review",
      400">class="text-emerald-400">"APPROVED": 400">class="text-emerald-400">"approved",
      400">class="text-emerald-400">"REJECTED": 400">class="text-emerald-400">"rejected",
      400">class="text-emerald-400">"SUPERSEDED": 400">class="text-emerald-400">"superseded"
    }
  }
}

Artifact CRUD

Create, retrieve, update, and delete artifacts. All authenticated endpoints require a workspace context via the x-workspace-id header or workspace_id query parameter. Returns 400 if workspace context is missing.

GET/api/v2/artifactsAuthenticated

List artifacts with optional filters. Requires workspace context. Supports filtering by type, status, workflow, conversation, and message.

Query Parameters

typestring

Filter by artifact type (task_plan, implementation_plan, walkthrough, verification_proof, decision_record, plan_mode, code_change, research_summary).

statusstring

Filter by status (draft, pending_review, approved, rejected, superseded).

workflow_iduuid

Filter by associated workflow ID.

workflow_run_iduuid

Filter by workflow run ID.

conversation_iduuid

Filter by conversation ID.

message_iduuid

Filter by message ID.

limitinteger
Default: 50

Maximum number of artifacts to return.

offsetinteger
Default: 0

Pagination offset.

Request

cURL
400">curl -X 400">GET 400">class="text-emerald-400">"https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts?400">type=code_change&status=approved&limit=10" \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": [
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e",
      400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"b2c3d4e5-f6a7-8901-bcde-f23456789012",
      400">class="text-emerald-400">"customer_id": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"subtype": null,
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware",
      400">class="text-emerald-400">"content": { 400">class="text-emerald-400">"diff": 400">class="text-emerald-400">"...", 400">class="text-emerald-400">"language": 400">class="text-emerald-400">"javascript" },
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
      400">class="text-emerald-400">"workflow_id": null,
      400">class="text-emerald-400">"workflow_run_id": null,
      400">class="text-emerald-400">"conversation_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"message_id": 400">class="text-emerald-400">"msg_1a2b3c4d-5e6f-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"parent_artifact_id": 400">class="text-emerald-400">"5a6b7c8d-9e0f-1a2b-3c4d-5e6f7a8b9c0d",
      400">class="text-emerald-400">"confidence_score": 0.92,
      400">class="text-emerald-400">"created_by": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-15T16:20:00.000Z",
      400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-18T09:10:00.000Z"
    },
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f",
      400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"b2c3d4e5-f6a7-8901-bcde-f23456789012",
      400">class="text-emerald-400">"customer_id": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"subtype": null,
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Database Migration Script",
      400">class="text-emerald-400">"content": { 400">class="text-emerald-400">"diff": 400">class="text-emerald-400">"...", 400">class="text-emerald-400">"language": 400">class="text-emerald-400">"sql" },
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
      400">class="text-emerald-400">"workflow_id": null,
      400">class="text-emerald-400">"workflow_run_id": null,
      400">class="text-emerald-400">"conversation_id": 400">class="text-emerald-400">"b2c3d4e5-f6a7-8901-bcde-f12345678901",
      400">class="text-emerald-400">"message_id": null,
      400">class="text-emerald-400">"parent_artifact_id": null,
      400">class="text-emerald-400">"confidence_score": null,
      400">class="text-emerald-400">"created_by": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-17T11:45:00.000Z",
      400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-17T11:45:00.000Z"
    }
  ],
  400">class="text-emerald-400">"meta": {
    400">class="text-emerald-400">"count": 2,
    400">class="text-emerald-400">"limit": 10,
    400">class="text-emerald-400">"offset": 0
  }
}
GET/api/v2/artifacts/:idAuthenticated

Get a single artifact by ID including its full content. Requires workspace context.

Path Parameters

iduuidrequired

The artifact ID.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e",
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"b2c3d4e5-f6a7-8901-bcde-f23456789012",
    400">class="text-emerald-400">"customer_id": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
    400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
    400">class="text-emerald-400">"subtype": null,
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware",
    400">class="text-emerald-400">"content": {
      400">class="text-emerald-400">"diff": 400">class="text-emerald-400">"+400">import rateLimit 400">from 'express-rate-limit';\n+400">const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });",
      400">class="text-emerald-400">"language": 400">class="text-emerald-400">"javascript",
      400">class="text-emerald-400">"file_path": 400">class="text-emerald-400">"src/middleware/rate-limit.js"
    },
    400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
    400">class="text-emerald-400">"workflow_id": null,
    400">class="text-emerald-400">"workflow_run_id": null,
    400">class="text-emerald-400">"conversation_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    400">class="text-emerald-400">"message_id": 400">class="text-emerald-400">"msg_1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    400">class="text-emerald-400">"parent_artifact_id": 400">class="text-emerald-400">"5a6b7c8d-9e0f-1a2b-3c4d-5e6f7a8b9c0d",
    400">class="text-emerald-400">"related_artifacts": [],
    400">class="text-emerald-400">"confidence_score": 0.92,
    400">class="text-emerald-400">"review_policy": 400">class="text-emerald-400">"agent_decides",
    400">class="text-emerald-400">"created_by": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
    400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-15T16:20:00.000Z",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-18T09:10:00.000Z"
  }
}
POST/api/v2/artifactsAuthenticated

Create a new artifact. Type must be one of the valid artifact types returned by the meta/types endpoint. Title is required. Content defaults to empty object. Can be linked to a conversation, message, workflow, or parent artifact.

Body Parameters

typestringrequired

Artifact type: task_plan, implementation_plan, walkthrough, verification_proof, decision_record, plan_mode, code_change, or research_summary.

subtypestring

Optional subtype for further classification.

titlestringrequired

Descriptive title for the artifact.

contentobject

Artifact content (structure varies by type). Defaults to empty object.

workflow_iduuid

Associated workflow ID.

workflow_run_iduuid

Associated workflow run ID.

parent_artifact_iduuid

Parent artifact ID for version chains.

related_artifactsuuid[]

Array of related artifact IDs.

conversation_iduuid

Conversation that produced this artifact (for inline chat display).

message_iduuid

Specific message that produced this artifact.

confidenceobject

Confidence scoring object with score field.

review_policystring

Review policy: always_proceed, agent_decides, or request_review.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012" \
  -d '{
    400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"task_plan",
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Implement OAuth2 Authentication Flow",
    400">class="text-emerald-400">"content": {
      400">class="text-emerald-400">"objective": 400">class="text-emerald-400">"Add OAuth2 support for third-party integrations",
      400">class="text-emerald-400">"steps": [
        { 400">class="text-emerald-400">"id": 1, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Install passport-oauth2 dependency", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"5m" },
        { 400">class="text-emerald-400">"id": 2, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Create OAuth strategy configuration", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"30m" },
        { 400">class="text-emerald-400">"id": 3, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Add callback route handler", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"20m" },
        { 400">class="text-emerald-400">"id": 4, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Write integration tests", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"45m" }
      ],
      400">class="text-emerald-400">"total_estimated_time": 400">class="text-emerald-400">"1h 40m"
    },
    400">class="text-emerald-400">"conversation_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    400">class="text-emerald-400">"review_policy": 400">class="text-emerald-400">"request_review"
  }'

Response 201

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"b2c3d4e5-f6a7-8901-bcde-f23456789012",
    400">class="text-emerald-400">"customer_id": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
    400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"task_plan",
    400">class="text-emerald-400">"subtype": null,
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Implement OAuth2 Authentication Flow",
    400">class="text-emerald-400">"content": {
      400">class="text-emerald-400">"objective": 400">class="text-emerald-400">"Add OAuth2 support for third-party integrations",
      400">class="text-emerald-400">"steps": [
        { 400">class="text-emerald-400">"id": 1, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Install passport-oauth2 dependency", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"5m" },
        { 400">class="text-emerald-400">"id": 2, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Create OAuth strategy configuration", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"30m" },
        { 400">class="text-emerald-400">"id": 3, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Add callback route handler", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"20m" },
        { 400">class="text-emerald-400">"id": 4, 400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Write integration tests", 400">class="text-emerald-400">"estimated_time": 400">class="text-emerald-400">"45m" }
      ],
      400">class="text-emerald-400">"total_estimated_time": 400">class="text-emerald-400">"1h 40m"
    },
    400">class="text-emerald-400">"status": 400">class="text-emerald-400">"draft",
    400">class="text-emerald-400">"conversation_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    400">class="text-emerald-400">"message_id": null,
    400">class="text-emerald-400">"parent_artifact_id": null,
    400">class="text-emerald-400">"related_artifacts": [],
    400">class="text-emerald-400">"review_policy": 400">class="text-emerald-400">"request_review",
    400">class="text-emerald-400">"created_by": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
    400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T10:30:00.000Z",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T10:30:00.000Z"
  }
}
PATCH/api/v2/artifacts/:idAuthenticated

Update an artifact's title, content, confidence, or review policy. Requires workspace context.

Path Parameters

iduuidrequired

The artifact ID.

Body Parameters

titlestring

Updated title.

contentobject

Updated content object.

confidenceobject

Updated confidence scoring. The score field is extracted and stored.

review_policystring

Updated review policy.

Request

cURL
400">curl -X 400">PATCH https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012" \
  -d '{
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Implement OAuth2 Authentication Flow (Updated)",
    400">class="text-emerald-400">"confidence": { 400">class="text-emerald-400">"score": 0.95 }
  }'

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"b2c3d4e5-f6a7-8901-bcde-f23456789012",
    400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"task_plan",
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Implement OAuth2 Authentication Flow (Updated)",
    400">class="text-emerald-400">"content": { 400">class="text-emerald-400">"..." : 400">class="text-emerald-400">"..." },
    400">class="text-emerald-400">"status": 400">class="text-emerald-400">"draft",
    400">class="text-emerald-400">"confidence_score": 0.95,
    400">class="text-emerald-400">"review_policy": 400">class="text-emerald-400">"request_review",
    400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T10:30:00.000Z",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T10:45:00.000Z"
  }
}
DELETE/api/v2/artifacts/:idAuthenticated

Permanently delete an artifact. Does not affect other artifacts in the version chain. Requires workspace context.

Path Parameters

iduuidrequired

The artifact ID.

Request

cURL
400">curl -X 400">DELETE https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"message": 400">class="text-emerald-400">"Artifact deleted"
}

Status & Comments

Transition artifacts through their lifecycle and add review comments. Valid statuses are: draft, pending_review, approved, rejected, and superseded.

POST/api/v2/artifacts/:id/statusAuthenticated

Transition an artifact to a new status. The status must be a valid ARTIFACT_STATUS value. Records which user performed the review.

Path Parameters

iduuidrequired

The artifact ID.

Body Parameters

statusstringrequired

New status: draft, pending_review, approved, rejected, or superseded.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b/status \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012" \
  -d 400">class="text-emerald-400">'{ "status": "approved" }'

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
    400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"task_plan",
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Implement OAuth2 Authentication Flow (Updated)",
    400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
    400">class="text-emerald-400">"reviewed_by": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T11:00:00.000Z"
  }
}
POST/api/v2/artifacts/:id/commentsAuthenticated

Add a comment to an artifact. Comments are stored as part of the artifact. Supports optional position data for inline annotations.

Path Parameters

iduuidrequired

The artifact ID.

Body Parameters

contentstringrequired

The comment text.

positionobject

Optional position data for inline comments (e.g., line numbers, offsets).

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b/comments \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012" \
  -d '{
    400">class="text-emerald-400">"content": 400">class="text-emerald-400">"Looks good. Consider adding rate limiting per IP in addition to per user.",
    400">class="text-emerald-400">"position": { 400">class="text-emerald-400">"step_id": 2 }
  }'

Response 201

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
    400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"task_plan",
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Implement OAuth2 Authentication Flow (Updated)",
    400">class="text-emerald-400">"comments": [
      {
        400">class="text-emerald-400">"id": 400">class="text-emerald-400">"cmt_4b5c6d7e-8f9a-0b1c-2d3e-4f5a6b7c8d9e",
        400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
        400">class="text-emerald-400">"content": 400">class="text-emerald-400">"Looks good. Consider adding rate limiting per IP in addition to per user.",
        400">class="text-emerald-400">"position": { 400">class="text-emerald-400">"step_id": 2 },
        400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T11:15:00.000Z"
      }
    ],
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T11:15:00.000Z"
  }
}

Version Chain

Artifacts can be superseded to create version chains. When an artifact is superseded, its status is set to "superseded" and a new artifact is created with a parent_artifact_id linking back to the original. The chain endpoint traverses these links to show the full evolution history.

POST/api/v2/artifacts/:id/supersedeAuthenticated

Create a new version of an artifact. The original is marked as superseded. The new artifact inherits the type, subtype, and workflow_id from the original. Title and content can be overridden.

Path Parameters

iduuidrequired

The artifact ID to supersede.

Body Parameters

titlestring

Title for the new version. Defaults to the original title.

contentobject

Content for the new version. Defaults to the original content.

confidenceobject

Confidence scoring for the new version.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e/supersede \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012" \
  -d '{
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware v4",
    400">class="text-emerald-400">"content": {
      400">class="text-emerald-400">"diff": 400">class="text-emerald-400">"+400">const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 200, keyGenerator: (req) => req.ip });",
      400">class="text-emerald-400">"language": 400">class="text-emerald-400">"javascript"
    }
  }'

Response 201

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"f1a2b3c4-d5e6-f7a8-b9c0-d1e2f3a4b5c6",
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"b2c3d4e5-f6a7-8901-bcde-f23456789012",
    400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
    400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware v4",
    400">class="text-emerald-400">"content": {
      400">class="text-emerald-400">"diff": 400">class="text-emerald-400">"+400">const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 200, keyGenerator: (req) => req.ip });",
      400">class="text-emerald-400">"language": 400">class="text-emerald-400">"javascript"
    },
    400">class="text-emerald-400">"status": 400">class="text-emerald-400">"draft",
    400">class="text-emerald-400">"parent_artifact_id": 400">class="text-emerald-400">"7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e",
    400">class="text-emerald-400">"created_by": 400">class="text-emerald-400">"8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
    400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T12:00:00.000Z",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T12:00:00.000Z"
  }
}
GET/api/v2/artifacts/:id/chainAuthenticated

Get the full version chain for an artifact. Traverses parent_artifact_id links to return all ancestors and descendants in chronological order.

Path Parameters

iduuidrequired

The ID of any artifact in the chain.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e/chain \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": [
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"superseded",
      400">class="text-emerald-400">"parent_artifact_id": null,
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-10T08:00:00.000Z"
    },
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"5a6b7c8d-9e0f-1a2b-3c4d-5e6f7a8b9c0d",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"superseded",
      400">class="text-emerald-400">"parent_artifact_id": 400">class="text-emerald-400">"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-12T14:30:00.000Z"
    },
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"superseded",
      400">class="text-emerald-400">"parent_artifact_id": 400">class="text-emerald-400">"5a6b7c8d-9e0f-1a2b-3c4d-5e6f7a8b9c0d",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-15T16:20:00.000Z"
    },
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"f1a2b3c4-d5e6-f7a8-b9c0-d1e2f3a4b5c6",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware v4",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"draft",
      400">class="text-emerald-400">"parent_artifact_id": 400">class="text-emerald-400">"7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T12:00:00.000Z"
    }
  ]
}

Context Queries

Fetch artifacts by their context -- either the conversation they were created in or the workflow run that produced them. These endpoints are useful for displaying artifacts inline within chat or workflow execution views.

GET/api/v2/artifacts/conversation/:conversationIdAuthenticated

Get all artifacts associated with a conversation. Used for inline artifact display in the chat interface.

Path Parameters

conversationIduuidrequired

The conversation ID.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/conversation/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": [
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"code_change",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"API Rate Limiter Middleware",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
      400">class="text-emerald-400">"conversation_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"message_id": 400">class="text-emerald-400">"msg_1a2b3c4d-5e6f-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-15T16:20:00.000Z"
    },
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"9e0f1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"task_plan",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Implement OAuth2 Authentication Flow",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
      400">class="text-emerald-400">"conversation_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"message_id": null,
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T10:30:00.000Z"
    }
  ]
}
GET/api/v2/artifacts/workflow/:runIdAuthenticated

Get all artifacts produced by a specific workflow execution run.

Path Parameters

runIduuidrequired

The workflow run ID.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/artifacts/workflow/e5f6a7b8-c9d0-1234-ef56-789012345678 \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_API_KEY" \
  -H 400">class="text-emerald-400">"x-workspace-id: b2c3d4e5-f6a7-8901-bcde-f23456789012"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"data": [
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"ab12cd34-ef56-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"task_plan",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Sales Report Generation Plan",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
      400">class="text-emerald-400">"workflow_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"workflow_run_id": 400">class="text-emerald-400">"e5f6a7b8-c9d0-1234-ef56-789012345678",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T18:00:01.000Z"
    },
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"bc23de45-f678-9012-bcde-f23456789012",
      400">class="text-emerald-400">"400">type": 400">class="text-emerald-400">"walkthrough",
      400">class="text-emerald-400">"title": 400">class="text-emerald-400">"Sales Report Generation - Execution Summary",
      400">class="text-emerald-400">"status": 400">class="text-emerald-400">"approved",
      400">class="text-emerald-400">"workflow_id": 400">class="text-emerald-400">"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      400">class="text-emerald-400">"workflow_run_id": 400">class="text-emerald-400">"e5f6a7b8-c9d0-1234-ef56-789012345678",
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T18:00:47.000Z"
    }
  ]
}