{
  "name": "Synap by Linkrra",
  "description": "OpenAI-compatible inference on open-weight models, served on hardware Linkrra owns and operates. Send it a prompt and it answers with a model completion; ask it to list models or to estimate the cost of a job and it answers from the live price list. Zero data retention: prompts and completions are not stored, and a finished task cannot be read back.",
  "supportedInterfaces": [
    {
      "url": "https://pool.linkrra.com/a2a/v1",
      "protocolBinding": "HTTP+JSON",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Linkrra",
    "url": "https://linkrra.com"
  },
  "version": "1.0.0",
  "documentationUrl": "https://synap.linkrra.com/docs",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "securitySchemes": {
    "bearer": {
      "httpAuthSecurityScheme": {
        "scheme": "Bearer",
        "description": "A Synap API key, as \"Authorization: Bearer sk-pool-…\". Required for the chat-completion skill, which is billed per token. list-models and estimate-cost need no key. Keys are issued at https://synap.linkrra.com."
      }
    }
  },
  "securityRequirements": [
    {
      "schemes": {
        "bearer": {
          "list": []
        }
      }
    }
  ],
  "defaultInputModes": [
    "text/plain"
  ],
  "defaultOutputModes": [
    "text/plain"
  ],
  "skills": [
    {
      "id": "chat-completion",
      "name": "Chat completion",
      "description": "Answers a prompt with a completion from an open-weight model — prose, analysis or code. Billed per prompt and completion token to the Synap key on the request; with no key it returns a task in TASK_STATE_AUTH_REQUIRED and spends nothing. Name a model by putting its id in metadata.model, or leave it out and Synap routes to the cheapest model that can do the job. Stateless: send the whole conversation in the message, because nothing is remembered between calls.",
      "tags": [
        "llm",
        "inference",
        "chat",
        "code-generation",
        "openai-compatible"
      ],
      "examples": [
        "Write a Python function that parses an ISO 8601 duration.",
        "Explain the difference between a mutex and a semaphore in two sentences."
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/plain"
      ]
    },
    {
      "id": "list-models",
      "name": "List models",
      "description": "Returns the models Synap serves right now, with each one's context window, maximum output length and per-million-token price, as JSON text. Read-only, free, and needs no key. Triggered by a message whose text begins with \"list models\" (or is exactly \"models\"); anything after that is used as a filter on the model id and name.",
      "tags": [
        "catalogue",
        "models",
        "pricing",
        "discovery"
      ],
      "examples": [
        "list models",
        "models",
        "list models coder"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/plain"
      ]
    },
    {
      "id": "estimate-cost",
      "name": "Estimate cost",
      "description": "Prices a job before it is run: given a model id and a token count, returns the prompt, completion and total USD from the live price list, as JSON text. Read-only, free, and needs no key. Triggered by a message of the form \"estimate cost <model-id> <prompt-tokens> [<completion-tokens>]\". The real charge uses the token counts the model reports, so this is an estimate, not a quote.",
      "tags": [
        "pricing",
        "cost",
        "estimate",
        "budget"
      ],
      "examples": [
        "estimate cost qwen3-coder-30b 4000 1000",
        "estimate cost gpt-oss-20b 12000"
      ],
      "inputModes": [
        "text/plain"
      ],
      "outputModes": [
        "text/plain"
      ]
    }
  ]
}