diff --git a/lib/serializer.js b/lib/serializer.js
index <HASH>..<HASH> 100644
--- a/lib/serializer.js
+++ b/lib/serializer.js
@@ -180,8 +180,13 @@ function parseRelations (data, relations, options) {
     // Without this /:collection/:id/:relatedcollection relationship
     // object is the same as /:collection/:id's.
     if (collection === name) {
+
       // fk should not be leaked out of the server
-      delete data[fkName];
+      // however, only delete if fk is not also pk. Pk will be cleaned up later
+      // and cleaning up too early results in no resource id
+      if (fkName !== options.primaryKeyField) {
+        delete data[fkName];
+      }
       relationships = parseRelations(data, relation.modelTo.relations, options);
       return false;
     }
@@ -206,8 +211,13 @@ function parseRelations (data, relations, options) {
     var relationship = null;
 
     if (!_.isUndefined(fk)) {
+
       // fk should not be leaked out of the server
-      delete data[fkName];
+      // however, only delete if fk is not also pk. Pk will be cleaned up later
+      // and cleaning up too early results in no resource id
+      if (fkName !== options.primaryKeyField) {
+        delete data[fkName];
+      }
 
       if (_.isArray(fk)) {
         relationship = makeRelations(toType, fk, options);
Guard agains pk being deleted too early

This can happen if pk is also fk