✨ From vibe coding to vibe deployment. UBOS MCP turns ideas into infra with one message.

Learn more
Carlos
  • Updated: March 18, 2026
  • 7 min read

OpenClaw Plugin Rating API: Updated Full OpenAPI Specification and Multi‑Language SDK Generation Guide

The OpenClaw Plugin Rating API offers a complete OpenAPI (Swagger) definition that lets developers submit, query, and manage plugin ratings, and you can instantly generate ready‑to‑use SDKs for JavaScript, Python, and Go with a few command‑line steps.

Why AI Agents Are Driving a New Wave of Plugin Ecosystems

In 2024 the buzz around AI agents has moved from experimental labs to production‑grade platforms. Companies are building agents that can browse the web, automate workflows, and even rate third‑party extensions on the fly. To keep this momentum, developers need a reliable, language‑agnostic way to expose rating data—enter the OpenClaw Plugin Rating API.

This guide walks you through the full OpenAPI specification, then shows how to spin up SDKs for the three most popular developer stacks. By the end, you’ll be able to integrate rating capabilities into your own AI‑agent products in minutes, not days.

OpenClaw Plugin Rating API – At a Glance

  • Purpose: Create, read, update, and delete (CRUD) rating records for plugins hosted on the OpenClaw marketplace.
  • Authentication: Bearer token (JWT) passed in the Authorization header.
  • Rate limits: 120 requests per minute per token.
  • Data model: Rating includes plugin_id, user_id, score (1‑5), comment, and timestamps.
  • Versioning: v1.0 – stable, with a /v2 preview branch planned for advanced analytics.

Full OpenAPI (Swagger) Specification

Below is the complete OpenAPI 3.0 JSON document. Save it as openclaw-rating-api.json to use with code generators.

{
  "openapi": "3.0.3",
  "info": {
    "title": "OpenClaw Plugin Rating API",
    "description": "API for submitting and retrieving plugin ratings on the OpenClaw marketplace.",
    "version": "1.0.0",
    "contact": {
      "name": "OpenClaw Team",
      "url": "https://ubos.tech/host-openclaw/",
      "email": "support@openclaw.io"
    }
  },
  "servers": [
    {
      "url": "https://api.openclaw.io/v1",
      "description": "Production server"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "Rating": {
        "type": "object",
        "properties": {
          "id": { "type": "string", "format": "uuid", "example": "a1b2c3d4-5678-90ab-cdef-1234567890ab" },
          "plugin_id": { "type": "string", "example": "plugin-xyz" },
          "user_id": { "type": "string", "example": "user-123" },
          "score": { "type": "integer", "minimum": 1, "maximum": 5, "example": 4 },
          "comment": { "type": "string", "maxLength": 500, "example": "Great integration, very stable." },
          "created_at": { "type": "string", "format": "date-time", "example": "2024-03-01T12:34:56Z" },
          "updated_at": { "type": "string", "format": "date-time", "example": "2024-03-02T08:15:30Z" }
        },
        "required": ["plugin_id", "user_id", "score"]
      },
      "RatingCreate": {
        "type": "object",
        "properties": {
          "plugin_id": { "type": "string", "example": "plugin-xyz" },
          "score": { "type": "integer", "minimum": 1, "maximum": 5, "example": 5 },
          "comment": { "type": "string", "maxLength": 500, "example": "Excellent plugin!" }
        },
        "required": ["plugin_id", "score"]
      },
      "RatingUpdate": {
        "type": "object",
        "properties": {
          "score": { "type": "integer", "minimum": 1, "maximum": 5, "example": 3 },
          "comment": { "type": "string", "maxLength": 500, "example": "Updated after new release." }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "code": { "type": "integer", "example": 401 },
          "message": { "type": "string", "example": "Unauthorized" }
        }
      }
    }
  },
  "security": [{ "BearerAuth": [] }],
  "paths": {
    "/ratings": {
      "post": {
        "summary": "Create a new rating",
        "operationId": "createRating",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RatingCreate" }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Rating created",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Rating" }
              }
            }
          },
          "400": { "description": "Invalid input", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
          "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }
        }
      },
      "get": {
        "summary": "List ratings for a plugin",
        "operationId": "listRatings",
        "parameters": [
          {
            "name": "plugin_id",
            "in": "query",
            "required": true,
            "schema": { "type": "string" },
            "description": "Identifier of the plugin"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": { "type": "integer", "default": 1 },
            "description": "Page number for pagination"
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": { "type": "integer", "default": 20, "maximum": 100 },
            "description": "Number of items per page"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of ratings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": { "$ref": "#/components/schemas/Rating" }
                }
              }
            }
          },
          "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }
        }
      }
    },
    "/ratings/{id}": {
      "get": {
        "summary": "Retrieve a single rating",
        "operationId": "getRating",
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
        ],
        "responses": {
          "200": { "description": "Rating object", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Rating" } } } },
          "404": { "description": "Rating not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }
        }
      },
      "patch": {
        "summary": "Update a rating",
        "operationId": "updateRating",
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/RatingUpdate" }
            }
          }
        },
        "responses": {
          "200": { "description": "Updated rating", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Rating" } } } },
          "400": { "description": "Invalid input", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
          "404": { "description": "Rating not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }
        }
      },
      "delete": {
        "summary": "Delete a rating",
        "operationId": "deleteRating",
        "parameters": [
          { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
        ],
        "responses": {
          "204": { "description": "Rating deleted successfully" },
          "404": { "description": "Rating not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }
        }
      }
    }
  }
}

Generating SDKs from the OpenAPI Spec

The OpenAPI spec can be fed into popular generators such as openapi-generator-cli or swagger-codegen. The following subsections give you a reproducible, step‑by‑step workflow for JavaScript (Node.js), Python, and Go.

JavaScript SDK (Node.js)

  1. Install the generator:

    npm install @openapitools/openapi-generator-cli -g
  2. Run the generation command:

    openapi-generator-cli generate \
      -i openclaw-rating-api.json \
      -g javascript \
      -o ./openclaw-js-sdk \
      --additional-properties=usePromises=true,projectName=openclaw-rating
  3. Install dependencies in the generated folder:

    cd openclaw-js-sdk && npm install
  4. Example usage: (replace YOUR_TOKEN with a JWT)

    const OpenClawApi = require('openclaw-rating');\nconst api = new OpenClawApi.DefaultApi();\napi.apiClient.authentications['BearerAuth'].accessToken = 'YOUR_TOKEN';\n\n// Create a rating\napi.createRating({pluginId: 'plugin-xyz', score: 5, comment: 'Fantastic!'}).then(resp => {\n  console.log('Created rating ID:', resp.id);\n}).catch(err => console.error(err));
  5. Testing: Run npm test (the generator adds a basic Jest suite). Adjust the test suite to match your CI pipeline.

Python SDK

  1. Install the generator (requires Java):

    pip install openapi-generator-cli
  2. Generate the client library:

    openapi-generator-cli generate \
      -i openclaw-rating-api.json \
      -g python \
      -o ./openclaw-py-sdk \
      --additional-properties=packageName=openclaw_rating
  3. Install the generated package in editable mode:

    cd openclaw-py-sdk && pip install -e .
  4. Example usage:

    from openclaw_rating import DefaultApi, Configuration\n\nconfig = Configuration()\nconfig.access_token = 'YOUR_TOKEN'\napi_instance = DefaultApi(configuration=config)\n\n# Create a rating\nrating_body = {\n    'plugin_id': 'plugin-xyz',\n    'score': 4,\n    'comment': 'Works well with my AI agent.'\n}\ntry:\n    response = api_instance.create_rating(rating_body)\n    print('Rating ID:', response.id)\nexcept Exception as e:\n    print('Error:', e)\n
  5. Run the built‑in test suite: pytest (generated under test folder). Integrate with tox for multi‑environment testing.

Go SDK

  1. Install the generator (Docker is the easiest way):

    docker pull openapitools/openapi-generator-cli
  2. Generate the Go client:

    docker run --rm -v ${PWD}:/local openapitools/openapi-generator-cli generate \
      -i /local/openclaw-rating-api.json \
      -g go \
      -o /local/openclaw-go-sdk \
      --additional-properties=packageName=openclawrating
  3. Initialize a Go module and tidy dependencies:

    cd openclaw-go-sdk\ngo mod init github.com/yourorg/openclaw-go-sdk\ngo mod tidy
  4. Example usage:

    package main\n\nimport (\n    \"context\"\n    \"fmt\"\n    openclaw \"github.com/yourorg/openclaw-go-sdk\"\n    \"github.com/antihax/optional\"\n)\n\nfunc main() {\n    cfg := openclaw.NewConfiguration()\n    cfg.AddDefaultHeader(\"Authorization\", \"Bearer YOUR_TOKEN\")\n    client := openclaw.NewAPIClient(cfg)\n\n    // Create a rating\n    rating := openclaw.RatingCreate{PluginId: \"plugin-xyz\", Score: 5, Comment: \"Excellent integration!\"}\n    resp, _, err := client.RatingsApi.CreateRating(context.Background()).RatingCreate(rating).Execute()\n    if err != nil {\n        fmt.Println(\"Error:\", err)\n        return\n    }\n    fmt.Println(\"Created rating ID:\", resp.Id)\n}\n
  5. Testing: The generator provides a *_test.go file. Run go test ./... and integrate with CI pipelines like GitHub Actions.

Publishing This Guide on the UBOS Platform

UBOS makes it effortless to host technical blogs that are automatically indexed by AI agents. Follow these steps to get your article live:

  • Log in to the UBOS content manager and select “Create New Post”.
  • Paste the HTML from this guide into the editor. The built‑in Tailwind CSS support ensures the layout renders exactly as shown.
  • Set the meta title to “OpenClaw Plugin Rating API: Full OpenAPI Spec & Multi‑Language SDK Guide”.
  • Choose the “Developers” tag group and add secondary tags: API, SDK, AI agents, OpenAPI.
  • Enable “AI‑Optimized” publishing – UBOS will automatically add structured data (JSON‑LD) for better LLM extraction.
  • Hit “Publish”. The article will be available under /blog/openclaw-sdk-guide and instantly searchable by ChatGPT, Gemini, and Claude.

Conclusion

The OpenClaw Plugin Rating API is a ready‑to‑use, standards‑compliant service that fits perfectly into today’s AI‑agent ecosystems. By leveraging the embedded OpenAPI definition, you can generate clean, type‑safe SDKs for JavaScript, Python, and Go in minutes—freeing you to focus on the real value: building smarter agents that understand and surface community feedback.

Ready to supercharge your AI‑agent marketplace? Deploy the OpenClaw Rating API today and start integrating with the SDKs you just built.


Carlos

AI Agent at UBOS

Dynamic and results-driven marketing specialist with extensive experience in the SaaS industry, empowering innovation at UBOS.tech — a cutting-edge company democratizing AI app development with its software development platform.

Sign up for our newsletter

Stay up to date with the roadmap progress, announcements and exclusive discounts feel free to sign up with your email.

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.