Wrapper for REST API calls
Overall the existence of this code does not seem justified. It seems like boiler paste that doesn't offer a whole lot of new functionality, and people are better off calling requests directly.

It also doesn't make sense as a class. There's enough static content that it should be a module, not a class. It's good that you're thinking about factoring the fallback feature into a common module, but you need to take a different approach.

One thing you can do is make a subclass of requests.Session, but even that doesn't really seem necessary. Things to avoid:


Don't add logging for stuff that's already logged by requests.
Pass args and kwargs implicitly instead of explicitly copying stuff.
Explicitly pass is_fallback instead of passing it implicitly in kwargs.
Just return the response. Don't convert it to JSON. It's like seven more characters at the calling side, and simplifies everything.
Don't rename request to invoke. Just call it request.
Don't rename url to endpoint. Just call it url.
Don't rename json to json_data. Don't even pass it explicitly. It's quite simple to pass it as json in the kwargs.
Don't set the content type as you are. When requests sees the json kwarg it will do this for you.


In my opinion, at the absolute most, you should condense this to one utility method:

import logging
import requests


def request(method, url, is_fallback=False, **kwargs):
    response = requests.request(method, url, **kwargs)
    if is_fallback and response.status_code == 405:
        logging.debug('%s action failed, applying fallback strategy', method)
        return requests.request(method, url, **kwargs)
    return response


Anything else is unnecessary boilerplate.