---
title: "Update plugin configuration"
method: PATCH
path: "/api/v1/plugins/{plugin_id}"
tags: ["Plugins"]
---

# Update plugin configuration

`PATCH /api/v1/plugins/{plugin_id}`

Updates mutable plugin fields such as timeout, emit_logs, emit_traces,
raw_response, allow_get_invocation, config, and forward_logs.
The plugin id and path cannot be changed after creation.

All fields are optional - only the provided fields will be updated.
To clear the `config` field, pass `"config": null`.

## Path parameters

- `plugin_id` string, required

## Request body

- UpdatePluginRequest — Request model for updating an existing plugin. All fields are optional to allow partial updates. Note: `id` and `path` are not updateable after creation.
  - `allow_get_invocation` boolean, nullable — Whether to allow GET requests to invoke plugin logic
  - `config` object, nullable — User-defined configuration accessible to the plugin (must be a JSON object) Use `null` to clear the config
  - `emit_logs` boolean, nullable — Whether to include logs in the HTTP response
  - `emit_traces` boolean, nullable — Whether to include traces in the HTTP response
  - `forward_logs` boolean, nullable — Whether to forward plugin logs into the relayer's tracing output
  - `raw_response` boolean, nullable — Whether to return raw plugin response without ApiResponse wrapper
  - `timeout` integer, nullable — Plugin timeout in seconds

## Response `200`

Plugin updated successfully

- ApiResponsePluginModel
  - `data` object
    - `allow_get_invocation` boolean — Whether to allow GET requests to invoke plugin logic
    - `config` object, nullable — User-defined configuration accessible to the plugin (must be a JSON object)
    - `emit_logs` boolean — Whether to include logs in the HTTP response
    - `emit_traces` boolean — Whether to include traces in the HTTP response
    - `forward_logs` boolean — Whether to forward plugin logs into the relayer's tracing output
    - `id` string, required — Plugin ID
    - `path` string, required — Plugin path
    - `raw_response` boolean — Whether to return raw plugin response without ApiResponse wrapper
    - `timeout` integer, required — Plugin timeout
  - `error` string
  - `metadata` PluginMetadata
    - `logs` LogEntry[], nullable
      - `level` 'log' | 'info' | 'error' | 'warn' | 'debug' | 'result', required
      - `message` string, required
    - `traces` unknown[], nullable
      - unknown
  - `pagination` PaginationMeta
    - `current_page` integer, required
    - `per_page` integer, required
    - `total_items` integer, required
  - `success` boolean, required

## Other responses

- `400` — Bad Request (invalid timeout or other validation error)
- `401` — Unauthorized
- `404` — Plugin not found
- `429` — Too Many Requests
- `500` — Internal server error

## Changes

> 18 revisions in range; 2 could not be searched.

- **2026-01-26** `5814462a76af` — 1 info
  - endpoint added
- **2025-10-31** `5487da58bf15` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/openzeppelin/apis/openzeppelin-relayer-api/changes/api/v1/plugins/:plugin_id/patch.md)

---

[API](https://skmtc.dev/openzeppelin/apis/openzeppelin-relayer-api.md) · [All operations](https://skmtc.dev/openzeppelin/apis/openzeppelin-relayer-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openzeppelin/openzeppelin-relayer-api/revisions/e6e7514284f5/schema)
