How do I simplify the code in C#?
Alright, let's see if we can simplifyabstract this for you. I'm not going to say simplify because often times abstracting something is far from simplifying it.

I think you can turn the method into something like this:

public void Method&lt;T&gt;(Context context, Action&lt;T, Class&gt; body, EventLog log = null)
{
    Class myClass = ConvertToMyClass();
    T apiCall = Activator.CreateInstance(typeof(T), new [] { context });
    if (log != null)
    {
        eventLog.WriteEntry("Starting");
    }

    try
    {
        body(apiCall, class);
        IsCallSuccess = true;
    }
    catch (Exception e)
    {
        if (log != null)
        {
            eventLog.WriteEntry("error");
        }

        IsCallSuccess = false;
        CallErrorMessage = e.Message;
    }
}


... then you should be able to call it like this:

// Method1
Method&lt;ApiCall1&gt;(
    yourContextInstance,
    (apiCall, myClass) =&gt;
    {
        apiCall.Call1(myClass, null, false);
    },
    yourLogInstance);

// Method2
Method&lt;ApiCall2&gt;(
    yourContextInstance,
    (apiCall, myClass) =&gt;
    {
        apiCall.Call1(myClass);
        NewItemID = myClass.ItemID;
    },
    yourLogInstance);

// Method3
Method&lt;ApiCall3&gt;(
    yourContextInstance,
    (apiCall, myClass) =&gt;
    {
        apiCall.Call3(myClass, "param1");
        UpdatedItemID = myClass.UpdatedItemID;
    },
    yourLogInstance);


... one caveat is NewItemID and UpdatedItemID. If you're not making these calls from inside the class Method is defined in, you may need to modify this a tad to get the Method to return and integer instead.