Extending the BP REST API

You can extend any of the data endpoint responses by registering custom REST fields using the bp_rest_register_field() function.

Hooking to bp_rest_api_init you first need to register your custom REST field.

function example_register_activity_rest_field() {
    bp_rest_register_field(
        'activity',      // Id of the BuddyPress component the REST field is about
        'example_field', // Used into the REST response/request
        array(
            'get_callback'    => 'example_get_rest_field_callback',    // The function to use to get the value of the REST Field
            'update_callback' => 'example_update_rest_field_callback', // The function to use to update the value of the REST Field
            'schema'          => array(                                // The example_field REST schema.
                'description' => 'Example of Activity Meta Field',
                'type'        => 'string',
                'context'     => array( 'view', 'edit' ),
            ),
        )
    );
}
add_action( 'bp_rest_api_init', 'example_register_activity_rest_field' );

At line 7 of the above code, you’ll notice the get_callback parameter, you need to use it to define the function to use to retrieve the value of your custom field and add it to the REST response.

/**
 * The function to use to get the value of the REST Field.
 *
 * param  array  $array     The list of properties of the BuddyPress component's object.
 * param  string $attribute The REST Field key used into the REST response.
 * return string            The value of the REST Field to include into the REST response.
 */
function example_get_rest_field_callback( $array, $attribute ) {
    // The key of the metadata can be different from the REST Field key.
    $metadata_key = '_example_metadata_key';

    return bp_activity_get_meta( $array['id'], $metadata_key );
}

To update the value of your custom field, you’ll need to code the function you defined as the update_callback parameter you used at the registration step.

/**
 * The function to use to update the value of the REST Field.
 *
 * param  object $object    The BuddyPress component's object that was just created/updated during the request.
 *                           (in this case the BP_Activity_Activity object).
 * param  string $attribute The REST Field key used into the REST response.
 * return string $value     The value of the REST Field to save.
 */
function example_update_rest_field_callback( $object, $value, $attribute ) {
    // The key of the metadata can be different from the REST Field key.
    $metadata_key = '_example_metadata_key';

    bp_activity_update_meta( $object->id, $metadata_key, $value );
}