{
  "openapi": "3.0.3",
  "info": {
    "title": "Soulboard API",
    "description": "AI agent identity catalog \u2014 browse, search, and integrate hundreds of pre-built SOUL.md configs. Authenticate with an `X-Soulboard-Key` header on protected routes.",
    "version": "1.0.0",
    "contact": {
      "name": "Soulboard",
      "url": "https://soulboardai.com"
    }
  },
  "servers": [
    {
      "url": "https://api.soulboardai.com",
      "description": "Production"
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Soulboard-Key",
        "description": "Your Soulboard API key (begins with `bbk_`). Obtain one at soulboardai.com/checkout."
      }
    },
    "schemas": {
      "CatalogItem": {
        "type": "object",
        "properties": {
          "configId": {
            "type": "string",
            "format": "uuid",
            "example": "2e5e39e1-b46e-4fdb-a0a5-64da66b6e218"
          },
          "name": {
            "type": "string",
            "example": "Upwork Proposal Agent"
          },
          "role": {
            "type": "string",
            "example": "freelance-strategist"
          },
          "category": {
            "type": "string",
            "example": "freelance"
          },
          "description": {
            "type": "string",
            "example": "Writes winning Upwork proposals and optimizes freelancer profiles."
          },
          "version": {
            "type": "string",
            "example": "1.0.0"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "isNew": {
            "type": "boolean"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "license": {
            "type": "string",
            "example": "MIT",
            "nullable": true
          },
          "source": {
            "type": "string",
            "example": "awesome-openclaw-agents",
            "nullable": true
          },
          "attributionText": {
            "type": "string",
            "nullable": true
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          }
        }
      },
      "RoleDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CatalogItem"
          },
          {
            "type": "object",
            "properties": {
              "soulMdPreview": {
                "type": "string",
                "description": "First ~500 chars of the SOUL.md file"
              },
              "soulMdUrl": {
                "type": "string",
                "format": "uri",
                "description": "Pre-signed S3 URL for full SOUL.md (auth required)"
              },
              "agentsMdUrl": {
                "type": "string",
                "format": "uri",
                "description": "Pre-signed S3 URL for AGENTS.md (auth required)"
              },
              "changelog": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              }
            }
          }
        ]
      },
      "Category": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "example": "marketing"
          },
          "label": {
            "type": "string",
            "example": "Marketing"
          },
          "count": {
            "type": "integer",
            "example": 24
          }
        }
      },
      "PaginatedCatalog": {
        "type": "object",
        "properties": {
          "configs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CatalogItem"
            }
          },
          "total": {
            "type": "integer",
            "example": 243
          },
          "page": {
            "type": "integer",
            "example": 1
          },
          "limit": {
            "type": "integer",
            "example": 20
          },
          "totalPages": {
            "type": "integer",
            "example": 13
          }
        }
      },
      "CheckoutSession": {
        "type": "object",
        "properties": {
          "checkoutUrl": {
            "type": "string",
            "format": "uri",
            "example": "https://checkout.stripe.com/c/pay/cs_test_..."
          },
          "sessionId": {
            "type": "string",
            "example": "cs_test_b1p6VmV2FBBH..."
          }
        }
      },
      "PromoValidation": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "example": "Free forever \u2014 lifetime access"
          },
          "couponId": {
            "type": "string",
            "nullable": true,
            "example": "soulboard-lifetime"
          }
        }
      },
      "AccountKeyStatus": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "provisioning",
              "ready"
            ]
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "plan": {
            "type": "string",
            "enum": [
              "monthly",
              "annual"
            ]
          },
          "renewsAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "Account": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "plan": {
            "type": "string",
            "enum": [
              "monthly",
              "annual"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "revoked"
            ]
          },
          "renewsAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "paymentMethod": {
            "type": "string",
            "enum": [
              "stripe",
              "lightning"
            ]
          },
          "keyPrefix": {
            "type": "string",
            "example": "a3f9c201",
            "description": "First 8 chars of key hash \u2014 for identification only"
          },
          "cancelAtPeriodEnd": {
            "type": "boolean",
            "description": "True if cancellation is scheduled at end of billing period"
          },
          "cancelAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the subscription will cancel (if cancelAtPeriodEnd is true)"
          }
        }
      },
      "SubmitConfig": {
        "type": "object",
        "required": [
          "soulMd",
          "title",
          "category",
          "authorAttestation"
        ],
        "properties": {
          "soulMd": {
            "type": "string",
            "description": "Full SOUL.md content"
          },
          "agentsMd": {
            "type": "string",
            "description": "Optional AGENTS.md content"
          },
          "title": {
            "type": "string",
            "example": "Email Campaign Manager"
          },
          "category": {
            "type": "string",
            "example": "marketing"
          },
          "license": {
            "type": "string",
            "example": "MIT",
            "description": "Omit to default to Soulboard-original"
          },
          "authorAttestation": {
            "type": "boolean",
            "enum": [
              true
            ],
            "description": "Must be true. Confirms you have the right to license this config."
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "example": "Authentication required"
          }
        }
      },
      "ConvertResponse": {
        "type": "object",
        "required": [
          "action",
          "model",
          "generated_at",
          "similar_ids"
        ],
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "use_existing",
              "fork",
              "generate_new"
            ]
          },
          "config_id": {
            "type": "string"
          },
          "base_config_id": {
            "type": "string"
          },
          "similarity": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "similar_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "maxItems": 5
          },
          "install_snippets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "kind",
                "text"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "curl",
                    "mcp",
                    "openclaw-skill"
                  ]
                },
                "text": {
                  "type": "string"
                }
              }
            }
          },
          "soul_md": {
            "type": "string"
          },
          "agents_md": {
            "type": "string"
          },
          "diff_summary": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "latency_ms": {
            "type": "integer",
            "minimum": 0
          }
        }
      }
    }
  },
  "paths": {
    "/catalog": {
      "get": {
        "summary": "List catalog",
        "description": "Returns a paginated list of agent configs. Optionally filter by category or full-text search.",
        "operationId": "getCatalog",
        "tags": [
          "Catalog"
        ],
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "example": "marketing",
            "description": "Filter by category slug"
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Full-text search query"
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 20,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated list of configs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedCatalog"
                },
                "example": {
                  "configs": [
                    {
                      "configId": "2e5e39e1-b46e-4fdb-a0a5-64da66b6e218",
                      "name": "Upwork Proposal Agent",
                      "role": "freelance-strategist",
                      "category": "freelance",
                      "description": "Writes winning Upwork proposals and optimizes freelancer profiles.",
                      "version": "1.0.0",
                      "updatedAt": "2026-03-30T00:00:00.000Z",
                      "isNew": true,
                      "tags": [],
                      "license": "MIT",
                      "source": "awesome-openclaw-agents"
                    }
                  ],
                  "total": 243,
                  "page": 1,
                  "limit": 20,
                  "totalPages": 13
                }
              }
            }
          }
        }
      }
    },
    "/categories": {
      "get": {
        "summary": "List categories",
        "description": "Returns all categories with config counts. Public \u2014 no auth required.",
        "operationId": "getCategories",
        "tags": [
          "Catalog"
        ],
        "responses": {
          "200": {
            "description": "Category list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "categories": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Category"
                      }
                    }
                  }
                },
                "example": {
                  "categories": [
                    {
                      "slug": "marketing",
                      "label": "Marketing",
                      "count": 24
                    },
                    {
                      "slug": "development",
                      "label": "Development",
                      "count": 18
                    },
                    {
                      "slug": "business",
                      "label": "Business",
                      "count": 14
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/role/{id}": {
      "get": {
        "summary": "Get role detail",
        "description": "Returns full metadata and a SOUL.md preview for a config. Authenticated requests also receive pre-signed S3 URLs for the full SOUL.md and AGENTS.md files.",
        "operationId": "getRoleById",
        "tags": [
          "Catalog"
        ],
        "security": [
          {
            "ApiKey": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Config UUID"
          }
        ],
        "responses": {
          "200": {
            "description": "Role detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleDetail"
                },
                "example": {
                  "configId": "2e5e39e1-b46e-4fdb-a0a5-64da66b6e218",
                  "name": "Upwork Proposal Agent",
                  "category": "freelance",
                  "description": "Writes winning Upwork proposals and optimizes freelancer profiles.",
                  "version": "1.0.0",
                  "soulMdPreview": "# SOUL.md\n\nYou are Upwork Proposal, an AI freelance strategist...",
                  "soulMdUrl": "https://soulboard-catalog-dev.s3.amazonaws.com/configs/...?X-Amz-...",
                  "agentsMdUrl": null,
                  "changelog": []
                }
              }
            }
          },
          "404": {
            "description": "Config not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/convert": {
      "post": {
        "summary": "Convert job description to agent config",
        "description": "Checks the catalog for an existing/forkable identity before generating a new SOUL.md + AGENTS.md pair. Requires authentication. Free keys receive 1 conversion; premium plans are higher/unlimited per plan.",
        "operationId": "convertJobDescription",
        "tags": [
          "Catalog"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "jobDescription"
                ],
                "properties": {
                  "jobDescription": {
                    "type": "string",
                    "maxLength": 4000,
                    "description": "Plain-text job description to convert",
                    "example": "We are looking for a Senior Customer Success Manager to own relationships with our enterprise accounts..."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Structured converter decision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConvertResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid jobDescription (max 4000 chars)"
          },
          "401": {
            "description": "Auth required"
          },
          "429": {
            "description": "Daily conversion limit reached for your plan"
          },
          "502": {
            "description": "Model output failed schema validation"
          },
          "503": {
            "description": "Conversion provider unavailable or rate limited"
          }
        }
      }
    },
    "/checkout/stripe": {
      "post": {
        "summary": "Create Stripe Checkout session",
        "description": "Creates a Stripe Checkout session for a monthly or annual subscription. Returns a redirect URL. Optionally applies a promo code.",
        "operationId": "createStripeCheckout",
        "tags": [
          "Billing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "plan",
                  "email"
                ],
                "properties": {
                  "plan": {
                    "type": "string",
                    "enum": [
                      "monthly",
                      "annual"
                    ]
                  },
                  "email": {
                    "type": "string",
                    "format": "email"
                  },
                  "promoCode": {
                    "type": "string",
                    "description": "Optional promo code. Validated server-side before applying.",
                    "example": "LAUNCH50"
                  }
                }
              },
              "example": {
                "plan": "monthly",
                "email": "user@example.com"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Checkout session created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckoutSession"
                },
                "example": {
                  "checkoutUrl": "https://checkout.stripe.com/c/pay/cs_test_b1p6Vm...",
                  "sessionId": "cs_test_b1p6VmV2FBBH..."
                }
              }
            }
          },
          "400": {
            "description": "Invalid plan, missing email, or invalid promo code",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "invalid_promo": {
                    "value": {
                      "error": "Invalid or expired promo code",
                      "code": "INVALID_PROMO"
                    }
                  },
                  "bad_plan": {
                    "value": {
                      "error": "plan must be monthly or annual"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/promo/validate": {
      "get": {
        "summary": "Validate promo code",
        "description": "Checks whether a promo code is active and returns its description. Safe to call from the browser before checkout.",
        "operationId": "validatePromoCode",
        "tags": [
          "Billing"
        ],
        "parameters": [
          {
            "name": "code",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "LAUNCH50"
          }
        ],
        "responses": {
          "200": {
            "description": "Validation result (valid or not)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PromoValidation"
                },
                "examples": {
                  "valid": {
                    "value": {
                      "valid": true,
                      "description": "Free forever \u2014 lifetime access",
                      "couponId": "soulboard-lifetime"
                    }
                  },
                  "invalid": {
                    "value": {
                      "valid": false,
                      "description": null,
                      "couponId": null
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/account/key": {
      "get": {
        "summary": "Check key provisioning status",
        "description": "Poll after checkout to check whether your API key has been provisioned. Returns `provisioning` while pending, `ready` once complete. The key itself is delivered by email \u2014 it is never returned here.",
        "operationId": "getAccountKey",
        "tags": [
          "Account"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Stripe Checkout session ID"
          },
          {
            "name": "invoiceId",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "BTCPay invoice ID (Lightning payments)"
          }
        ],
        "responses": {
          "200": {
            "description": "Key is ready",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountKeyStatus"
                },
                "example": {
                  "status": "ready",
                  "email": "user@example.com",
                  "plan": "monthly",
                  "renewsAt": "2026-05-01T00:00:00.000Z"
                }
              }
            }
          },
          "202": {
            "description": "Key still being provisioned",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "example": "provisioning"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/account": {
      "get": {
        "summary": "Get account info",
        "description": "Returns plan, status, and renewal date for the authenticated key.",
        "operationId": "getAccount",
        "tags": [
          "Account"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Account details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                },
                "example": {
                  "email": "user@example.com",
                  "plan": "monthly",
                  "status": "active",
                  "renewsAt": "2026-05-01T00:00:00.000Z",
                  "paymentMethod": "stripe",
                  "keyPrefix": "a3f9c201"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/account/portal": {
      "post": {
        "summary": "Create Stripe Customer Portal session",
        "description": "Generates a Stripe Billing Portal URL for the authenticated subscriber. Redirect the user to this URL \u2014 they can cancel, update payment, and view invoice history there. Stripe-only; Lightning subscribers receive a 400.",
        "operationId": "createPortalSession",
        "tags": [
          "Account"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Portal URL generated",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "example": "https://billing.stripe.com/session/..."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "No Stripe subscription on this key"
          },
          "401": {
            "description": "Auth required"
          }
        }
      }
    },
    "/account/subscription": {
      "delete": {
        "summary": "Cancel subscription",
        "description": "Schedules cancellation of the Stripe subscription at the end of the current billing period. Access continues until `cancelAt`. Stripe-only.",
        "operationId": "cancelSubscription",
        "tags": [
          "Account"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Cancellation scheduled",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "cancelAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Access ends at this time"
                    },
                    "alreadyScheduled": {
                      "type": "boolean",
                      "description": "True if cancellation was already pending"
                    }
                  }
                },
                "example": {
                  "ok": true,
                  "cancelAt": "2026-05-01T00:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "No Stripe subscription on this key"
          },
          "401": {
            "description": "Auth required"
          }
        }
      }
    },
    "/account/rotate-key": {
      "post": {
        "summary": "Rotate API key",
        "description": "Generates a new API key and revokes the current one. The new key is returned once \u2014 store it immediately. Rate limited to 3 rotations per day.",
        "operationId": "rotateKey",
        "tags": [
          "Account"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "New key issued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "newApiKey": {
                      "type": "string",
                      "example": "bbk_a1b2c3d4e5f6..."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Auth required"
          },
          "429": {
            "description": "Rotation rate limit exceeded (3/day)"
          }
        }
      }
    },
    "/submit": {
      "post": {
        "summary": "Submit a config",
        "description": "Submit a community SOUL.md config for review. Requires authentication and an explicit author attestation. All submissions are held for review before appearing in the catalog.",
        "operationId": "submitConfig",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitConfig"
              },
              "example": {
                "soulMd": "# SOUL.md\n\nYou are an email campaign manager...",
                "title": "Email Campaign Manager",
                "category": "marketing",
                "license": "MIT",
                "authorAttestation": true
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Submission accepted for review",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    },
                    "catalogStatus": {
                      "type": "string",
                      "example": "held-review"
                    },
                    "authorAttestation": {
                      "type": "boolean"
                    },
                    "attestedAt": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing required fields or authorAttestation not true"
          },
          "401": {
            "description": "Auth required"
          }
        }
      }
    },
    "/trial/key": {
      "post": {
        "summary": "Issue an anonymous trial API key",
        "description": "Provisions a server-minted free trial key immediately. Email is optional backup delivery, not a required signup gate. If apiKey is provided with email, the existing valid key is emailed instead of creating a new one.",
        "operationId": "issueTrialKey",
        "tags": [
          "Account"
        ],
        "security": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Optional email address for backup delivery"
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Optional existing key to email as backup after server validation"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Trial key issued or emailed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "message",
                    "apiKey",
                    "emailBackup"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "example": "Trial API key created"
                    },
                    "apiKey": {
                      "type": "string",
                      "description": "The issued or validated Soulboard API key",
                      "example": "bbk_1234567890abcdef"
                    },
                    "emailBackup": {
                      "type": "boolean",
                      "description": "Whether backup email delivery succeeded",
                      "example": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid email or API key"
          },
          "429": {
            "description": "Trial key limit reached"
          }
        }
      }
    },
    "/register/free": {
      "post": {
        "summary": "Register for a free API key",
        "description": "Provisions a free Soulboard API key and returns it immediately in the response. Email delivery is attempted as backup. Free keys include full catalog access and one trial conversion.",
        "operationId": "registerFree",
        "tags": [
          "Account"
        ],
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Email address to receive your free API key"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Free key created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "message",
                    "apiKey",
                    "emailBackup"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "example": "Free API key created"
                    },
                    "apiKey": {
                      "type": "string",
                      "description": "The newly issued Soulboard API key",
                      "example": "bbk_1234567890abcdef"
                    },
                    "emailBackup": {
                      "type": "boolean",
                      "description": "Whether backup email delivery succeeded",
                      "example": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid email"
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Catalog",
      "description": "Browse and search agent configs"
    },
    {
      "name": "Billing",
      "description": "Checkout and promo code validation"
    },
    {
      "name": "Account",
      "description": "Manage your subscription and API key"
    },
    {
      "name": "Community",
      "description": "Contribute configs to the catalog"
    }
  ]
}
