{
  "protocolVersion": "1.0",
  "name": "Inficy",
  "description": "Inficy preserves AI-agent executions as canonical NexArt evidence bundles. Runtime-observed records can be verified for integrity, inspected and exported, and selected records can optionally be certified. ChatGPT sessions are a separate, agent-reported evidence class and cannot be certified.",
  "version": "1.0",
  "url": "https://inficy.com/api/public/v1",
  "documentationUrl": "https://inficy.com/llms-full.txt",
  "iconUrl": "https://inficy.com/favicon.ico",
  "provider": {
    "organization": "Inficy",
    "url": "https://inficy.com",
    "contact": "contact@artnames.io"
  },
  "preferredTransport": "JSONRPC",
  "additionalInterfaces": [
    {
      "transport": "HTTP+JSON",
      "url": "https://inficy.com/api/public/v1"
    },
    {
      "transport": "MCP",
      "url": "https://inficy.com/mcp"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": true
  },
  "securitySchemes": {
    "machineCredential": {
      "type": "http",
      "scheme": "bearer",
      "description": "Opaque machine credential issued only after a human approved the registration request."
    },
    "oauth2": {
      "type": "oauth2",
      "description": "OAuth 2.1 with dynamic client registration, used by the MCP endpoint.",
      "flows": {
        "authorizationCode": {
          "scopes": {
            "profile:read": "Read the workspace name, plan and owner contact.",
            "agents:read": "List monitored agents and their reporting status.",
            "agents:connect": "Create one-time setup codes so a coding agent can connect.",
            "activity:read": "Read execution activity, summaries and anomalies.",
            "artifacts:read": "Read sealed evidence artifacts and verification results.",
            "exports:create": "Create activity exports and retrieve their download links.",
            "billing:read": "Read plan, entitlement, usage and subscription status.",
            "billing:write": "Purchase or cancel a plan using delegated payment authority.",
            "sessions:read": "Read tracked assistant sessions and their self-reported analytics.",
            "sessions:write": "Record a tracked assistant session, its checkpoints and its agent-reported receipt.",
            "reports:read": "Read agent-reported executions and their receipts.",
            "reports:write": "Bind this connection to one agent and record agent-reported executions and steps."
          }
        }
      }
    }
  },
  "security": [
    {
      "machineCredential": []
    }
  ],
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "get_capabilities",
      "operationId": "get_capabilities",
      "name": "get capabilities",
      "description": "Describe every machine operation, scope and authorisation rule. No human step.",
      "tags": [
        "public",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_plans",
      "operationId": "get_plans",
      "name": "get plans",
      "description": "List plans, credit packs and prices. No human step.",
      "tags": [
        "public",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "register_account",
      "operationId": "register_account",
      "name": "register account",
      "description": "Request an account on behalf of a named human owner. Returns an approval URL; nothing is created until the owner approves. A human must approve before this can succeed.",
      "tags": [
        "public",
        "human-authorised"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_registration_status",
      "operationId": "get_registration_status",
      "name": "get registration status",
      "description": "Poll a registration. Once approved, returns the machine credential exactly once. No human step.",
      "tags": [
        "public",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_account",
      "operationId": "get_account",
      "name": "get account",
      "description": "Read the workspace, plan, credit balance and this credential's scopes. No human step.",
      "tags": [
        "profile:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_agents",
      "operationId": "list_agents",
      "name": "list agents",
      "description": "List monitored agents and whether each has reported yet. No human step.",
      "tags": [
        "agents:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "connect_agent",
      "operationId": "connect_agent",
      "name": "connect agent",
      "description": "Create a monitored agent and return one-time setup instructions a coding agent can execute. No human step.",
      "tags": [
        "agents:connect",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_executions",
      "operationId": "list_executions",
      "name": "list executions",
      "description": "List recorded executions, newest first, with keyset pagination. No human step.",
      "tags": [
        "activity:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_execution",
      "operationId": "get_execution",
      "name": "get execution",
      "description": "Read one execution with its verification result and derived activity. Confidential executions expose the summary only. No human step.",
      "tags": [
        "artifacts:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "verify_receipt",
      "operationId": "verify_receipt",
      "name": "verify receipt",
      "description": "Re-verify one execution's stored evidence offline against its sealed digest and return the independent verifier URL. Never calls the certification node. No human step.",
      "tags": [
        "artifacts:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_connection_status",
      "operationId": "get_connection_status",
      "name": "get connection status",
      "description": "Read whether each agent is connected and what the last observed execution was. No human step.",
      "tags": [
        "agents:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_activity_summary",
      "operationId": "get_activity_summary",
      "name": "get activity summary",
      "description": "Workspace activity rollup over a window: categories, tools, domains, value moved. No human step.",
      "tags": [
        "activity:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_anomalies",
      "operationId": "get_anomalies",
      "name": "get anomalies",
      "description": "Failed steps, human overrides and value movements worth a person's attention. No human step.",
      "tags": [
        "activity:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "create_export",
      "operationId": "create_export",
      "name": "create export",
      "description": "Create a versioned activity export (json or csv). No human step.",
      "tags": [
        "exports:create",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_export",
      "operationId": "get_export",
      "name": "get export",
      "description": "Read an export's status and metadata. No human step.",
      "tags": [
        "exports:create",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_usage",
      "operationId": "get_usage",
      "name": "get usage",
      "description": "Plan, entitlement, current-period usage and credit balance. No human step.",
      "tags": [
        "billing:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "purchase_credits",
      "operationId": "purchase_credits",
      "name": "purchase credits",
      "description": "Buy a credit pack. human_present returns a checkout URL for a person; autonomous payment is not available. A human must approve unless a signed payment mandate already covers it.",
      "tags": [
        "billing:write",
        "human-authorised"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_purchase",
      "operationId": "get_purchase",
      "name": "get purchase",
      "description": "Check whether a purchase settled and how many credits it granted. No human step.",
      "tags": [
        "billing:read",
        "autonomous"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ],
  "x-authorisation": {
    "registration_requires_human_approval": true,
    "spending_requires_signed_mandate": true,
    "scopes": [
      "profile:read",
      "agents:read",
      "agents:connect",
      "activity:read",
      "artifacts:read",
      "exports:create",
      "billing:read",
      "billing:write",
      "sessions:read",
      "sessions:write",
      "reports:read",
      "reports:write"
    ],
    "never_auto_granted": [
      "billing:write"
    ]
  },
  "x-evidence": {
    "canonical_format": "NexArt Project Bundle",
    "classes": [
      {
        "id": "runtime_observed",
        "certifiable": true,
        "counts_as_verified_run": true
      },
      {
        "id": "agent_reported",
        "certifiable": false,
        "counts_as_verified_run": false
      },
      {
        "id": "legacy_recorded",
        "certifiable": false,
        "counts_as_verified_run": false
      }
    ],
    "proof_limitations": [
      "Certification proves the state and integrity of the recorded artifact at certification time. It does not prove correctness, truth, safety, completeness or compliance.",
      "Execution time and certification time are separate. A certificate says nothing about the gap between them.",
      "Only runtime-observed executions with a canonical NexArt Project Bundle are eligible for certification.",
      "Agent-reported ChatGPT sessions are self-reported checkpoints. Inficy did not observe them and can never certify them.",
      "Nothing here evidences activity a capture integration did not observe."
    ]
  },
  "x-payments": {
    "enabled": true,
    "mode": "paid",
    "statement": "Paid plans and credit purchases are available.",
    "unavailable": []
  }
}