{"record":{"id":"25aaf89e3857d140","repo":"dapr/dapr","slug":"binding-s-does-not-support-operation-s-supporte","errorCode":null,"errorMessage":"binding %s does not support operation %s. supported operations:%s","messagePattern":"binding (.+?) does not support operation (.+?)\\. supported operations:(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/runtime/processor/binding/send.go","lineNumber":218,"sourceCode":"\n\tif binding, ok := b.compStore.GetOutputBinding(name); ok {\n\t\tops := binding.Operations()\n\t\tif slices.Contains(ops, req.Operation) {\n\t\t\tpolicyRunner := resiliency.NewRunner[*bindings.InvokeResponse](ctx,\n\t\t\t\tb.resiliency.ComponentOutboundPolicy(name, resiliency.Binding),\n\t\t\t)\n\n\t\t\treturn policyRunner(func(ctx context.Context) (*bindings.InvokeResponse, error) {\n\t\t\t\treturn binding.Invoke(ctx, req)\n\t\t\t})\n\t\t}\n\n\t\tsupported := make([]string, 0, len(ops))\n\t\tfor _, o := range ops {\n\t\t\tsupported = append(supported, string(o))\n\t\t}\n\n\t\treturn nil, fmt.Errorf(\"binding %s does not support operation %s. supported operations:%s\", name, req.Operation, strings.Join(supported, \" \"))\n\t}\n\n\treturn nil, fmt.Errorf(\"couldn't find output binding %s\", name)\n}\n\nfunc (b *binding) onAppResponse(ctx context.Context, response *bindings.AppResponse) error {\n\tif len(response.State) > 0 {\n\t\tb.wg.Add(1)\n\n\t\tgo func(reqs []state.SetRequest) {\n\t\t\tdefer b.wg.Done()\n\n\t\t\tstore, ok := b.compStore.GetStateStore(response.StoreName)\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\terr := stateLoader.PerformBulkStoreOperation(ctx, reqs,","sourceCodeStart":200,"sourceCodeEnd":236,"githubUrl":"https://github.com/dapr/dapr/blob/74ad41702745709bb15fe2114ff693b8c59bc3cc/pkg/runtime/processor/binding/send.go#L200-L236","documentation":"Thrown by SendToOutputBinding in the Dapr runtime when an invoke request targets an output binding that exists but whose component does not implement the requested operation. Each output binding component declares its capabilities via the bindings.Operations() method, and the runtime only calls binding.Invoke when slices.Contains(ops, req.Operation) matches. The error message helpfully lists every operation the component actually supports.","triggerScenarios":"Calling the output bindings API POST /v1.0/bindings/{name} with an 'operation' field the component does not export (e.g. 'get' or 'delete' on a Kafka binding that only implements 'create'), or an AppResponse from an input-binding handler with a 'to' destination whose binding cannot perform the implicitly used create operation.","commonSituations":"Assuming all bindings behave like storage bindings and supporting create/get/delete/exec; switching a binding component (e.g. redis -> kafka) without updating the operation field in app code; copying YAML examples that use operations valid only for a different binding type.","solutions":["Change the request's operation to one listed in the error message's 'supported operations:' section (most bindings only support 'create')","Check the binding component's source or docs for its Operations() implementation to know what is allowed before coding","If you need get/delete/exec semantics, use the state store, secret, or service invocation API instead of an output binding"],"exampleFix":"// before (Kafka output binding)\ncurl -X POST http://localhost:3500/v1.0/bindings/my-kafka -d '{\"operation\": \"get\", \"data\": {...}}'\n// after\n curl -X POST http://localhost:3500/v1.0/bindings/my-kafka -d '{\"operation\": \"create\", \"data\": {...}}'","handlingStrategy":"validation","validationCode":"// Before invoking, check the operation is supported\nconst SUPPORTED = ['create']; // from the error message / component docs\nif (!SUPPORTED.includes(op)) throw new Error(`unsupported op ${op}`);\nawait dapr.binding.send('my-binding', op, data);","typeGuard":"const isBindingOperation = (op) => ['create','get','delete','exec'].includes(op);","tryCatchPattern":"try { await dapr.binding.send(name, 'create', data); } catch (e) { if (e.message.includes('does not support operation')) { /* pick op from 'supported operations:' in message */ } else throw e; }","preventionTips":["Hard-code the operation as 'create' unless the component documents others","Parse the 'supported operations:' suffix of this error to build the allowed set dynamically","Pin component type in YAML and read its Operations() list in the dapr components-contrib repo"],"tags":["dapr","bindings","output-binding","configuration"],"backgroundTag":null,"analyzedSha":"74ad41702745709bb15fe2114ff693b8c59bc3cc","analyzedAt":"2026-08-16T04:22:26.543Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}