diff --git a/rcl/include/rcl/client.h b/rcl/include/rcl/client.h
index a3a5ee724..978c479c9 100644
--- a/rcl/include/rcl/client.h
+++ b/rcl/include/rcl/client.h
@@ -427,10 +427,10 @@ rcl_client_is_valid(const rcl_client_t * client);
* [1] rmw implementation defined
*
* \param[in] client The client on which to set the callback
- * \param[in] callback The callback to be called when new responses arrive
+ * \param[in] callback The callback to be called when new responses arrive, may be NULL
* \param[in] user_data Given to the callback when called later, may be NULL
* \return `RCL_RET_OK` if callback was set to the listener, or
- * \return `RCL_RET_INVALID_ARGUMENT` if `client` or `callback` is NULL, or
+ * \return `RCL_RET_INVALID_ARGUMENT` if `client` is NULL, or
* \return `RCL_RET_UNSUPPORTED` if the API is not implemented in the dds implementation
*/
RCL_PUBLIC
diff --git a/rcl/include/rcl/event.h b/rcl/include/rcl/event.h
index 0d894f61e..9a72f29b8 100644
--- a/rcl/include/rcl/event.h
+++ b/rcl/include/rcl/event.h
@@ -217,10 +217,10 @@ rcl_event_is_valid(const rcl_event_t * event);
* [1] rmw implementation defined
*
* \param[in] event The event on which to set the callback
- * \param[in] callback The callback to be called when new events occur
+ * \param[in] callback The callback to be called when new events occur, may be NULL
* \param[in] user_data Given to the callback when called later, may be NULL
* \return `RCL_RET_OK` if callback was set to the listener, or
- * \return `RCL_RET_INVALID_ARGUMENT` if `event` or `callback` is NULL, or
+ * \return `RCL_RET_INVALID_ARGUMENT` if `event` is NULL, or
* \return `RCL_RET_UNSUPPORTED` if the API is not implemented in the dds implementation
*/
RCL_PUBLIC
diff --git a/rcl/include/rcl/service.h b/rcl/include/rcl/service.h
index 43ad2f3a9..e14f62d26 100644
--- a/rcl/include/rcl/service.h
+++ b/rcl/include/rcl/service.h
@@ -458,10 +458,10 @@ rcl_service_is_valid(const rcl_service_t * service);
* [1] rmw implementation defined
*
* \param[in] service The service on which to set the callback
- * \param[in] callback The callback to be called when new requests arrive
+ * \param[in] callback The callback to be called when new requests arrive, may be NULL
* \param[in] user_data Given to the callback when called later, may be NULL
* \return `RCL_RET_OK` if callback was set to the listener, or
- * \return `RCL_RET_INVALID_ARGUMENT` if `service` or `callback` is NULL, or
+ * \return `RCL_RET_INVALID_ARGUMENT` if `service` is NULL, or
* \return `RCL_RET_UNSUPPORTED` if the API is not implemented in the dds implementation
*/
RCL_PUBLIC
diff --git a/rcl/include/rcl/subscription.h b/rcl/include/rcl/subscription.h
index 77a2f52fd..cdae37626 100644
--- a/rcl/include/rcl/subscription.h
+++ b/rcl/include/rcl/subscription.h
@@ -630,10 +630,10 @@ rcl_subscription_can_loan_messages(const rcl_subscription_t * subscription);
* [1] rmw implementation defined
*
* \param[in] subscription The subscription on which to set the callback
- * \param[in] callback The callback to be called when new messages arrive
+ * \param[in] callback The callback to be called when new messages arrive, may be NULL
* \param[in] user_data Given to the callback when called later, may be NULL
* \return `RCL_RET_OK` if successful, or
- * \return `RCL_RET_INVALID_ARGUMENT` if `subscription` or `callback` is NULL, or
+ * \return `RCL_RET_INVALID_ARGUMENT` if `subscription` is NULL, or
* \return `RCL_RET_UNSUPPORTED` if the API is not implemented in the dds implementation
*/
RCL_PUBLIC
diff --git a/rcl/src/rcl/client.c b/rcl/src/rcl/client.c
index 24f0d0c00..7cf54b35d 100644
--- a/rcl/src/rcl/client.c
+++ b/rcl/src/rcl/client.c
@@ -291,7 +291,7 @@ rcl_client_set_on_new_response_callback(
// error state already set
return RCL_RET_INVALID_ARGUMENT;
}
- RCL_CHECK_FOR_NULL_WITH_MSG(callback, "callback is invalid", return RCL_RET_INVALID_ARGUMENT);
+
return rmw_client_set_on_new_response_callback(
client->impl->rmw_handle,
callback,
diff --git a/rcl/src/rcl/event.c b/rcl/src/rcl/event.c
index dccee5254..6196442d1 100644
--- a/rcl/src/rcl/event.c
+++ b/rcl/src/rcl/event.c
@@ -228,7 +228,7 @@ rcl_event_set_callback(
// error state already set
return RCL_RET_INVALID_ARGUMENT;
}
- RCL_CHECK_FOR_NULL_WITH_MSG(callback, "callback is invalid", return RCL_RET_INVALID_ARGUMENT);
+
return rmw_event_set_callback(
&event->impl->rmw_handle,
callback,
diff --git a/rcl/src/rcl/service.c b/rcl/src/rcl/service.c
index fbdd81579..926a4437c 100644
--- a/rcl/src/rcl/service.c
+++ b/rcl/src/rcl/service.c
@@ -311,7 +311,7 @@ rcl_service_set_on_new_request_callback(
// error state already set
return RCL_RET_INVALID_ARGUMENT;
}
- RCL_CHECK_FOR_NULL_WITH_MSG(callback, "callback is invalid", return RCL_RET_INVALID_ARGUMENT);
+
return rmw_service_set_on_new_request_callback(
service->impl->rmw_handle,
callback,
diff --git a/rcl/src/rcl/subscription.c b/rcl/src/rcl/subscription.c
index 46986aa95..8972c2ea1 100644
--- a/rcl/src/rcl/subscription.c
+++ b/rcl/src/rcl/subscription.c
@@ -447,7 +447,7 @@ rcl_subscription_set_on_new_message_callback(
// error state already set
return RCL_RET_INVALID_ARGUMENT;
}
- RCL_CHECK_FOR_NULL_WITH_MSG(callback, "callback is invalid", return RCL_RET_INVALID_ARGUMENT);
+
return rmw_subscription_set_on_new_message_callback(
subscription->impl->rmw_handle,
callback,