Integer based rewrite isn’t recognized for value of 1

Rewrite rules in WordPress should point to index.php, and to substitute a matched value (number from address) to URL parameter (item_id) you must use $matches[1] instead of $1.

So your rule should look like this:

add_rewrite_rule('^add-item/([0-9]+)/?', 'index.php?item_id=$matches[1]', 'top');

You usually need to complete the rule with information about what is displayed. For display:

  • single post / page – add to rewrite &p={post_id} or &postname={post_slug}
  • archive page&post_type={post_type_slug}
  • custom category&{taxonomy_slug}={term_slug}.

This rule setting only the item_id query var, so if you have not added your own function to template_include filter hook, WP will display the homepage.

Edit:

Rules with and without index.php
Rewrite rules begining with index.php are stored in DB. When parsing request, WordPress get them from the DB and tries to match the request URL to one of the rules.

Rules that do not start with an index.php, do not go to the database. They are not checked when the request is being parsed by WordPress.
It is possible that they will be saved in .htaccess file, but only if you use Apache and file permissions allow for writing.

Why $item_id is NULL
example.com/add-item/1 address is recognized as a post (post type can be page or post) with several pages (post pagination). You should know that WordPress removes page number from URL if it equal to “1”.
WordPress checks whether the requested url is canonical by comparing the url with the one it generates.
Canonical URL in this case (first page of post) is example.com/add-item/ and it is not the same as the requested one example.com/add-item/1, so redirecting will be done.

I do not know what type of post is the add-item (custom post type or built in), but try this way:

add_action( 'init', 'se336565_custom_rewrite_basic' );
add_filter( 'query_vars', 'se336565_add_custom_query_var' );

function se336565_add_custom_query_var( $vars ){
  $vars[] = "item_id";
  return $vars;
}
function se336565_custom_rewrite_basic() 
{
    add_rewrite_rule('^add-item(?:/([0-9]+))/?$', 
        'index.php?post_type={custom_post_type_slug}&pagename=add-item&name=add-item&item_id=$matches[1]', 'top');
}

Replace {custom_post_type_slug} and flush the rewrite rules.

Finally, on the actual page use get_query_var( 'item_id' ).