Couchbase Lite _replicate 400 BAD REQUEST with Cordova (PhoneGap) and Ionic Framework (AngularJS) javascript $http on iOS

I cannot get Coucbase Lite _replicate to work with Cordova (PhoneGap), using the Ionic Framework (AngularJS) and $http call. $http always results in a 400 BAD REQUEST from Couchbase Lite. I’m uncertain about the proper config settings, nor how to debug the error at a deeper level (yet).

Due to my existing codebase, I want to use $ with Couchbase Lite. My Couchbase server and Sync Gateway are working together fine and are configured to use bucket shadowing between the sync bucket and primary server bucket.


CBL ERROR REASON: {“data”:{“status”:400,“error”:“bad_request”},“status”:400,“config”:{“method”:“POST”,“transformRequest”:[null],“transformResponse”:[null],“url”:“http://lite.couchbase./_replicate”,“data”:{“target”:”app-cbl",“source”:“”,“continuous”:“true”},“contentType”:“application/json”,“headers”:{“Accept”:“application/json, text/plain, /”,“Content-Type”:“application/json;charset=utf-8”}},“statusText”:"Bad Request”}

// Cordova code running on iOS
this.startReplication = function () {
var deferred = $q.defer();

// -- I have tried multiple configs, using both $http and $, and also revised source / target --
// -- This config is the closest to working, but results in a 400 error. --
var config = {
    method: 'POST',
    url: "http://lite.couchbase./_replicate",
    data: {
        target: ’app-cbl’,
        source: ’',
        continuous: 'true'
    contentType: 'application/json'

$http(config).then(function (result) {
    console.log('### CBL SUCCESS RESULT: ' + JSON.stringify(result));
}, function (reason) {
    console.log('### CBL ERROR REASON: ' + JSON.stringify(reason));
}).catch(function (err) {
    console.log('### CBL CATCH ERROR: ' + JSON.stringify(err));
return deferred.promise;

I have also tried different URLs for the sync gateway, but still get the same 400 error so I assume the error is originating locally on the iOS side.

Thank you for any assistance.

Thanks to @jens answer on the Google Groups thread.!topic/mobile-couchbase/y7Lio2PuZ78


  1. continuous should be true (as a boolean), not “true” (as a string)
  2. source missing protocol (http://)