> For the complete documentation index, see [llms.txt](https://docs.spurtcommerce.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.spurtcommerce.com/api-reference/vendor/catalog/categories.md).

# Categories

Create, edit, list and remove product categories and manage category SEO.

## List or retrieve Category

> Get /api/category\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Categories\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/ProductController.ts\`\
> \
> \*\*Request example provenance:\*\* Fields shown in CategoryController example.\
> \
> \*\*Response example provenance:\*\* Fields shown in CategoryController example.\
> \
> \> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/category":{"get":{"operationId":"getApiCategory","summary":"List or retrieve Category","description":"Get /api/category\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Categories\n\n**Implementation source:** `src/api/vendor/controllers/ProductController.ts`\n\n**Request example provenance:** Fields shown in CategoryController example.\n\n**Response example provenance:** Fields shown in CategoryController example.\n\n> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.","tags":["Categories"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter limit."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter offset."},{"name":"keyword","in":"query","required":false,"schema":{"type":"string"},"description":"Query parameter keyword."},{"name":"status","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter status."},{"name":"count","in":"query","required":false,"schema":{"type":"boolean"},"description":"Query parameter count."}],"responses":{"200":{"description":"Successful response. Fields shown in CategoryController example.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":"integer"},"name":{"type":"string"},"categorySlug":{"type":"string"},"parentInt":{"type":"integer"},"sortOrder":{"type":"integer"},"levels":{"type":"string"},"isActive":{"type":"integer"}},"additionalProperties":true}}},"additionalProperties":true}}}}}}}}}
```

## Create or process Category

> Post /api/category\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Categories\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/ProductController.ts\`\
> \
> \*\*Request example provenance:\*\* Source-defined in AddCategoryRequest / CategoryController.\
> \
> \*\*Response example provenance:\*\* Exact API comment example.\
> \
> \> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/category":{"post":{"operationId":"postApiCategory","summary":"Create or process Category","description":"Post /api/category\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Categories\n\n**Implementation source:** `src/api/vendor/controllers/ProductController.ts`\n\n**Request example provenance:** Source-defined in AddCategoryRequest / CategoryController.\n\n**Response example provenance:** Exact API comment example.\n\n> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.","tags":["Categories"],"responses":{"200":{"description":"Successful response. Exact API comment example.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"object","properties":{"categoryId":{"type":"integer"},"name":{"type":"string"},"categorySlug":{"type":"string"},"parentInt":{"type":"integer"},"sortOrder":{"type":"integer"},"isActive":{"type":"integer"}},"additionalProperties":true}},"additionalProperties":true}}}},"400":{"description":"Error response example. Exact API comment example.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}}},"requestBody":{"required":false,"description":"Sample request body. Source-defined in AddCategoryRequest / CategoryController.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"image":{"type":"string"},"parentInt":{"type":"integer"},"sortOrder":{"type":"integer"},"status":{"type":"integer"},"categorySlug":{"type":"string"},"categoryDescription":{"type":"string"}},"additionalProperties":true}}}}}}}}
```

## Remove Category

> Delete /api/category\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Categories\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/ProductController.ts\`\
> \
> \*\*Request example provenance:\*\* Source-defined in DeleteCategoryRequest / CategoryController.\
> \
> \*\*Response example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \> \*\*Example status: Illustrative.\*\* The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/category":{"delete":{"operationId":"deleteApiCategory","summary":"Remove Category","description":"Delete /api/category\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Categories\n\n**Implementation source:** `src/api/vendor/controllers/ProductController.ts`\n\n**Request example provenance:** Source-defined in DeleteCategoryRequest / CategoryController.\n\n**Response example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n> **Example status: Illustrative.** The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.","tags":["Categories"],"responses":{"200":{"description":"Successful response. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema. Example is illustrative and does not guarantee a stable response contract.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Error response example. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}}},"requestBody":{"required":false,"description":"Sample request body. Source-defined in DeleteCategoryRequest / CategoryController.","content":{"application/json":{"schema":{"type":"object","properties":{"categoryId":{"type":"integer"}},"additionalProperties":true}}}}}}}}
```

## List or retrieve Category Category Detail

> Get /api/category/category-detail\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Categories\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/ProductController.ts\`\
> \
> \*\*Request example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \*\*Response example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \> \*\*Example status: Illustrative.\*\* The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/category/category-detail":{"get":{"operationId":"getApiCategoryCategoryDetail","summary":"List or retrieve Category Category Detail","description":"Get /api/category/category-detail\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Categories\n\n**Implementation source:** `src/api/vendor/controllers/ProductController.ts`\n\n**Request example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n**Response example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n> **Example status: Illustrative.** The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.","tags":["Categories"],"parameters":[{"name":"categoryId","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter categoryId."}],"responses":{"200":{"description":"Successful response. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema. Example is illustrative and does not guarantee a stable response contract.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"object","properties":{"categoryId":{"type":"integer"},"name":{"type":"string"},"categorySlug":{"type":"string"},"parentInt":{"type":"integer"},"sortOrder":{"type":"integer"},"isActive":{"type":"integer"}},"additionalProperties":true}},"additionalProperties":true}}}},"400":{"description":"Error response example. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}}}}}}}
```

## Update Category

> Put /api/category/:id\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Categories\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/ProductController.ts\`\
> \
> \*\*Request example provenance:\*\* Source-defined in UpdateCategoryRequest / CategoryController.\
> \
> \*\*Response example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \> \*\*Example status: Illustrative.\*\* The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/category/{id}":{"put":{"operationId":"putApiCategoryId","summary":"Update Category","description":"Put /api/category/:id\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Categories\n\n**Implementation source:** `src/api/vendor/controllers/ProductController.ts`\n\n**Request example provenance:** Source-defined in UpdateCategoryRequest / CategoryController.\n\n**Response example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n> **Example status: Illustrative.** The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.","tags":["Categories"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Value for id."}],"responses":{"200":{"description":"Successful response. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema. Example is illustrative and does not guarantee a stable response contract.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"object","properties":{"categoryId":{"type":"integer"},"name":{"type":"string"},"categorySlug":{"type":"string"},"parentInt":{"type":"integer"},"sortOrder":{"type":"integer"},"isActive":{"type":"integer"}},"additionalProperties":true}},"additionalProperties":true}}}},"400":{"description":"Error response example. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}}},"requestBody":{"required":false,"description":"Sample request body. Source-defined in UpdateCategoryRequest / CategoryController.","content":{"application/json":{"schema":{"type":"object","properties":{"categoryId":{"type":"integer"},"name":{"type":"string"},"parentInt":{"type":"integer"},"sortOrder":{"type":"integer"},"status":{"type":"integer"},"categorySlug":{"type":"string"}},"additionalProperties":true}}}}}}}}
```

## List or retrieve Category Seo

> Get /api/vendor-category-seo\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Category SEO\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/BlogSeoController.ts\`\
> \
> \*\*Request example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \*\*Response example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \> \*\*Example status: Illustrative.\*\* The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/vendor-category-seo":{"get":{"operationId":"getApiVendorCategorySeo","summary":"List or retrieve Category Seo","description":"Get /api/vendor-category-seo\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Category SEO\n\n**Implementation source:** `src/api/vendor/controllers/BlogSeoController.ts`\n\n**Request example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n**Response example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n> **Example status: Illustrative.** The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.","tags":["Categories"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter limit."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter offset."},{"name":"keyword","in":"query","required":false,"schema":{"type":"string"},"description":"Query parameter keyword."},{"name":"status","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter status."},{"name":"count","in":"query","required":false,"schema":{"type":"boolean"},"description":"Query parameter count."}],"responses":{"200":{"description":"Successful response. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema. Example is illustrative and does not guarantee a stable response contract.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":"integer"},"metaTitle":{"type":"string"},"metaDescription":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true}}}},"400":{"description":"Error response example. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}}}}}}}
```

## List or retrieve Category Seo

> Get /api/vendor-category-seo/:categoryId\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Category SEO\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/BlogSeoController.ts\`\
> \
> \*\*Request example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \*\*Response example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \> \*\*Example status: Illustrative.\*\* The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/vendor-category-seo/{categoryId}":{"get":{"operationId":"getApiVendorCategorySeoCategoryid","summary":"List or retrieve Category Seo","description":"Get /api/vendor-category-seo/:categoryId\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Category SEO\n\n**Implementation source:** `src/api/vendor/controllers/BlogSeoController.ts`\n\n**Request example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n**Response example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n> **Example status: Illustrative.** The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.","tags":["Categories"],"parameters":[{"name":"categoryId","in":"path","required":true,"schema":{"type":"string"},"description":"Value for categoryId."}],"responses":{"200":{"description":"Successful response. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema. Example is illustrative and does not guarantee a stable response contract.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":"integer"},"metaTitle":{"type":"string"},"metaDescription":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true}}}},"400":{"description":"Error response example. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}}}}}}}
```

## Create or process Category Seo

> Post /api/vendor-category-seo/:categoryId\
> \
> \*\*Authentication:\*\* Vendor bearer token required for protected operations; verify exact permission decorator in controller.\
> \
> \*\*Feature area:\*\* Category SEO\
> \
> \*\*Implementation source:\*\* \`src/api/vendor/controllers/BlogSeoController.ts\`\
> \
> \*\*Request example provenance:\*\* Illustrative SEO body; confirm entity-specific DTO fields in the controller.\
> \
> \*\*Response example provenance:\*\* Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\
> \
> \> \*\*Example status: Illustrative.\*\* The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Vendor API","version":"6.0.0"},"tags":[{"name":"Categories","description":"Create, edit, list and remove product categories and manage category SEO."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Paste the JWT access token returned by the corresponding login endpoint."}}},"paths":{"/api/vendor-category-seo/{categoryId}":{"post":{"operationId":"postApiVendorCategorySeoCategoryid","summary":"Create or process Category Seo","description":"Post /api/vendor-category-seo/:categoryId\n\n**Authentication:** Vendor bearer token required for protected operations; verify exact permission decorator in controller.\n\n**Feature area:** Category SEO\n\n**Implementation source:** `src/api/vendor/controllers/BlogSeoController.ts`\n\n**Request example provenance:** Illustrative SEO body; confirm entity-specific DTO fields in the controller.\n\n**Response example provenance:** Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.\n\n> **Example status: Illustrative.** The example is included to demonstrate request/response shape in the reference UI; verify the owning controller and request DTO before using it as a contract.","tags":["Categories"],"parameters":[{"name":"categoryId","in":"path","required":true,"schema":{"type":"string"},"description":"Value for categoryId."}],"responses":{"200":{"description":"Successful response. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema. Example is illustrative and does not guarantee a stable response contract.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"object","properties":{"categoryId":{"type":"integer"},"metaTitle":{"type":"string"},"metaDescription":{"type":"string"}},"additionalProperties":true}},"additionalProperties":true}}}},"400":{"description":"Error response example. Illustrative response envelope only. This route inventory does not include its route-specific @apiSuccessExample; response fields and messages must be verified in the matching controller/service. The example is intended to show the common response-wrapper style, not to define a guaranteed response schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"}},"additionalProperties":true}}}}},"requestBody":{"required":false,"description":"Sample request body. Illustrative SEO body; confirm entity-specific DTO fields in the controller. Treat this as an illustrative example, not a complete DTO contract.","content":{"application/json":{"schema":{"type":"object","properties":{"metaTitle":{"type":"string"},"metaDescription":{"type":"string"},"metaKeyword":{"type":"string"},"metaUrl":{"type":"string"}},"additionalProperties":true}}}}}}}}
```
