---
title: "Execute a plugin with optional wildcard route routing"
method: POST
path: "/api/v1/plugins/{plugin_id}/call"
tags: ["Plugins"]
---

# Execute a plugin with optional wildcard route routing

`POST /api/v1/plugins/{plugin_id}/call`

Logs and traces are only returned when the plugin is configured with `emit_logs` / `emit_traces`.
Plugin-provided errors are normalized into a consistent payload (`code`, `details`) and a derived
message so downstream clients receive a stable shape regardless of how the handler threw.

The endpoint supports wildcard route routing, allowing plugins to implement custom routing logic:
- `/api/v1/plugins/{plugin_id}/call` - Default endpoint (route = "")
- `/api/v1/plugins/{plugin_id}/call?route=/verify` - Custom route via query parameter
- `/api/v1/plugins/{plugin_id}/call/verify` - Custom route via URL path (route = "/verify")

The route is passed to the plugin handler via the `context.route` field.
You can specify a custom route either by appending it to the URL path or by using the `route` query parameter.

## Path parameters

- `plugin_id` string, required

## Query parameters

- `route` string

## Request body

- PluginCallRequest
  - `params` unknown

## Response `200`

Plugin call successful

- ApiResponseValue
  - `data` unknown
  - `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` — BadRequest (plugin-provided)
- `401` — Unauthorized
- `404` — Not Found
- `429` — Too Many Requests
- `500` — Internal server error

## Changes

- **2026-01-13** `623b8b006d50` — 1 info
  - endpoint added
- **2026-01-12** `2a34ba35322e` — 1 breaking
  - api path removed without deprecation
- **2025-10-31** `5487da58bf15` — 1 breaking, 1 warning
  - the request property `params` became required
  - deleted the `query` request parameter `route`

[Change history](https://skmtc.dev/openzeppelin/apis/openzeppelin-relayer-api/changes/api/v1/plugins/:plugin_id/call/post.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)
