Recently I had an issue with a SharePoint Remote Event Receiver that was returning a 404 error.

I had given correct permission in the appmanifest.xml.

The clientcontext was being created with the following code:

var webUrl = properties.ItemEventProperties.WebUrl;
Uri webUri = new Uri(webUrl);
var realm = TokenHelper.GetRealmFromTargetUrl(webUri);
var accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, webUri.Authority, realm).AccessToken;

using (ClientContext clientContext = TokenHelper.GetClientContextWithAccessToken(webUrl, accessToken))
...

After digging around I discovered that newer SharePoint Online sites have app only permissions disabled. To enable it I ran the following powershell commands:

Connect-SPOService -URL "https://<url>-admin.sharepoint.com"
Set-SPOTenant -DisableCustomAppAuthentication $false

After this, my remote event receiver started working.