+ delete(im.onboardedInvokers, onboardingId)
+}
+
+func getInvokerFromRequest(ctx echo.Context) (invokerapi.APIInvokerEnrolmentDetails, error) {
+ var invoker invokerapi.APIInvokerEnrolmentDetails
+ if err := ctx.Bind(&invoker); err != nil {
+ return invokerapi.APIInvokerEnrolmentDetails{}, fmt.Errorf("invalid format for invoker")
+ }
+ return invoker, nil
+}
+
+// Updates an individual API invoker details.
+func (im *InvokerManager) PutOnboardedInvokersOnboardingId(ctx echo.Context, onboardingId string) error {
+ errMsg := "Unable to update invoker due to %s"
+
+ newInvoker, err := getInvokerFromRequest(ctx)
+ if err != nil {
+ return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err))
+ }
+
+ // Additional validation for PUT
+ if (newInvoker.ApiInvokerId == nil) || (*newInvoker.ApiInvokerId != onboardingId) {
+ errMismatch := "APIInvokerEnrolmentDetails ApiInvokerId doesn't match path parameter"
+ return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, errMismatch))
+ }
+
+ if err := im.validateInvoker(newInvoker); err != nil {
+ return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errMsg, err))
+ }