diff --git a/bindings/autheticatedConnection.go b/bindings/autheticatedConnection.go
index d62357dfef5b9703298751500c935034715ab760..758b8c741972d61dd6616d9e5691db83837df3d9 100644
--- a/bindings/autheticatedConnection.go
+++ b/bindings/autheticatedConnection.go
@@ -20,9 +20,10 @@ func (_ *AuthenticatedConnection) IsAuthenticated() bool {
 	return true
 }
 
-// ConnectWithAuthentication is called by the client, ie the one establishing
-// connection with the server. Once a connect.Connection has been established
+// ConnectWithAuthentication is called by the client (i.e. the one establishing
+// connection with the server). Once a connect.Connection has been established
 // with the server and then authenticate their identity to the server.
+// accepts a marshalled Identity and contact.Contact object
 func (c *Client) ConnectWithAuthentication(recipientContact []byte, myIdentity []byte) (*AuthenticatedConnection, error) {
 	cont, err := contact.Unmarshal(recipientContact)
 	if err != nil {
diff --git a/bindings/contact.go b/bindings/contact.go
index c0c9dfe9e66fcf6e5c7d996541e58647c922dbf4..db84c5c25dce6a5b679dcc097ba93cfd521b7e7c 100644
--- a/bindings/contact.go
+++ b/bindings/contact.go
@@ -11,6 +11,26 @@ import (
 	"gitlab.com/xx_network/primitives/id"
 )
 
+// Example contact.Contact:
+// {"ID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD",  // User ID (base64)
+//  // DH Public key
+//  "DhPubKey": {"Value":5897856983236448841349236507987372549159552598715284610195378196051089368134573280466076038189672561458883294904902687846973238178822842233241860785766185816826285758360932391225518001053367819933965095474045876471502521426634463472280885866375056810295845912596776232660230744646657460711296721451092117848644200333013666241751893383151321460171904648894952567100917586408052597859524654581795844734383581139432945085822846793496012536562496524464153486043864392759112173594825221043729881090076151145795436552852351725727608490246482831755459144881209180199576801001999800444715698088783576119852633280838566256264123448817581650501316117908817592489368379136557137873340250734512199521378972799693841244968719164574541767128546852594550026407820738695953499407931441091576816112217698417722574592750265071234831071430050448725796700241505489986766630847142868559624597459165280989719389157750815411870806046789780648398173408766005145891531993469827100942349,
+//               "Fingerprint":16801541511233098363},
+//  // Ownership proof for this contact
+//  "OwnershipProof":"Mjp8KAn7wK/VYYR2BOlG57a9Zh3HA/wHM8R6RnBdGnNCXMR5Mel9ESSYv3g/6b6RXKqTcDHDyd4aaP6g/Ju+dQ==",
+//  // List of associated facts
+//  "Facts":[{"Fact":"zezima","T":0}]}
+
+// Identity struct
+// Example marshalled Identity:
+// {"ID":"emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD",  // User ID (base64)
+//  // RSA Private key (PEM format)
+//  "RSAPrivatePem":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBNU15dTdhYjBJOS9UL1BFUUxtd2x3ejZHV3FjMUNYemVIVXhoVEc4bmg1WWRWSXMxCmJ2THpBVjNOMDJxdXN6K2s4TVFEWjBtejMzdkswUmhPczZIY0NUSFdzTEpXRkE5WWpzWWlCRi9qTDd1bmd1ckIKL2tvK1JJSnNrWGFWaEZaazRGdERoRXhTNWY4RnR0Qmk1NmNLZmdJQlVKT3ozZi9qQllTMkxzMlJ6cWV5YXM3SApjV2RaME9TclBTT3BiYlViU1FPbS9LWnlweGZHU21yZ2oxRUZuU1dZZ2xGZTdUOTRPbHF5MG14QTV5clVXbHorCk9sK3hHbXpCNUp4WUFSMU9oMFQrQTk4RWMrTUZHNm43L1MraDdzRDgybGRnVnJmbStFTzRCdmFKeTRESGZGMWgKNnp6QnVnY25NUVFGc0dLeDFYWC9COTVMdUpPVjdyeXlDbzZGbHdJREFRQUJBb0lCQVFDaUh6OGNlcDZvQk9RTAphUzBVRitHeU5VMnlVcVRNTWtTWThoUkh1c09CMmFheXoybHZVb3RLUHBPbjZRSWRWVTJrcE4vY2dtY0lSb2x5CkhBMDRUOHJBWVNaRlVqaVlRajkzKzRFREpJYXd2Z0YyVEs1bFoyb3oxVTdreStncU82V0RMR2Z0Q0wvODVQWEIKa210aXhnUXpRV3g1RWcvemtHdm03eURBalQxeDloNytsRjJwNFlBam5kT2xTS0dmQjFZeTR1RXBQd0kwc1lWdgpKQWc0MEFxbllZUmt4emJPbmQxWGNjdEJFN2Z1VDdrWXhoeSs3WXYrUTJwVy9BYmh6NGlHOEY1MW9GMGZwV0czCmlISDhsVXZFTkp2SUZEVHZ0UEpESlFZalBRN3lUbGlGZUdrMXZUQkcyQkpQNExzVzhpbDZOeUFuRktaY1hOQ24KeHVCendiSlJBb0dCQVBUK0dGTVJGRHRHZVl6NmwzZmg3UjJ0MlhrMysvUmpvR3BDUWREWDhYNERqR1pVd1RGVQpOS2tQTTNjS29ia2RBYlBDb3FpL0tOOVBibk9QVlZ3R3JkSE9vSnNibFVHYmJGamFTUzJQMFZnNUVhTC9rT2dUCmxMMUdoVFpIUWk1VUlMM0p4M1Z3T0ZRQ3RQOU1UQlQ0UEQvcEFLbDg3VTJXN3JTY1dGV1ZGbFNkQW9HQkFPOFUKVmhHWkRpVGFKTWVtSGZIdVYrNmtzaUlsam9aUVVzeGpmTGNMZ2NjV2RmTHBqS0ZWTzJNN3NqcEJEZ0w4NmFnegorVk14ZkQzZ1l0SmNWN01aMVcwNlZ6TlNVTHh3a1dRY1hXUWdDaXc5elpyYlhCUmZRNUVjMFBlblVoWWVwVzF5CkpkTC8rSlpQeDJxSzVrQytiWU5EdmxlNWdpcjlDSGVzTlR5enVyckRBb0dCQUl0cTJnN1RaazhCSVFUUVNrZ24Kb3BkRUtzRW4wZExXcXlBdENtVTlyaWpHL2l2eHlXczMveXZDQWNpWm5VVEp0QUZISHVlbXVTeXplQ2g5QmRkegoyWkRPNUdqQVBxVHlQS3NudFlNZkY4UDczZ1NES1VSWWVFbHFDejdET0c5QzRzcitPK3FoN1B3cCtqUmFoK1ZiCkNuWllNMDlBVDQ3YStJYUJmbWRkaXpLbEFvR0JBSmo1dkRDNmJIQnNISWlhNUNJL1RZaG5YWXUzMkVCYytQM0sKMHF3VThzOCtzZTNpUHBla2Y4RjVHd3RuUU4zc2tsMk1GQWFGYldmeVFZazBpUEVTb0p1cGJzNXA1enNNRkJ1bwpncUZrVnQ0RUZhRDJweTVwM2tQbDJsZjhlZXVwWkZScGE0WmRQdVIrMjZ4eWYrNEJhdlZJeld3NFNPL1V4Q3crCnhqbTNEczRkQW9HQWREL0VOa1BjU004c1BCM3JSWW9MQ2twcUV2U0MzbVZSbjNJd3c1WFAwcDRRVndhRmR1ckMKYUhtSE1EekNrNEUvb0haQVhFdGZ2S2tRaUI4MXVYM2c1aVo4amdYUVhXUHRteTVIcVVhcWJYUTlENkxWc3B0egpKL3R4SWJLMXp5c1o2bk9IY1VoUUwyVVF6SlBBRThZNDdjYzVzTThEN3kwZjJ0QURTQUZNMmN3PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==",
+//  // Salt for identity (base64)
+//  "Salt":"4kk02v0NIcGtlobZ/xkxqWz8uH/ams/gjvQm14QT0dI=",
+//  // DH Private key
+//  "DHKeyPrivate":"eyJWYWx1ZSI6NDU2MDgzOTEzMjA0OTIyODA5Njg2MDI3MzQ0MzM3OTA0MzAyODYwMjM2NDk2NDM5NDI4NTcxMTMwNDMzOTQwMzgyMTIyMjY4OTQzNTMyMjIyMzc1MTkzNTEzMjU4MjA4MDA0NTczMDY4MjEwNzg2NDI5NjA1MjA0OTA3MjI2ODI5OTc3NTczMDkxODY0NTY3NDExMDExNjQxNCwiRmluZ2VycHJpbnQiOjE2ODAxNTQxNTExMjMzMDk4MzYzfQ=="
+// }
 type Identity struct {
 	ID            []byte
 	RSAPrivatePem []byte
@@ -63,6 +83,7 @@ func (c *Client) MakeIdentity() ([]byte, error) {
 	return json.Marshal(&I)
 }
 
+// GetContactFromIdentity accepts a marshalled Identity object and returns a marshalled contact.Contact object
 func (c *Client) GetContactFromIdentity(identity []byte) ([]byte, error) {
 	uID, _, _, dhKey, err := c.unmarshalIdentity(identity)
 	if err != nil {
@@ -97,12 +118,12 @@ func (c *Client) unmarshalIdentity(marshaled []byte) (*id.ID, *rsa.PrivateKey, [
 	}
 
 	dhkey := c.api.GetStorage().GetE2EGroup().NewInt(1)
-	err = dhkey.UnmarshalJSON(I.DHKeyPrivate)
+	err = dhkey.UnmarshalJSON([]byte(I.DHKeyPrivate))
 	if err != nil {
 		return nil, nil, nil, nil, err
 	}
 
-	rsaPriv, err := rsa.LoadPrivateKeyFromPem(I.RSAPrivatePem)
+	rsaPriv, err := rsa.LoadPrivateKeyFromPem([]byte(I.RSAPrivatePem))
 	if err != nil {
 		return nil, nil, nil, nil, err
 	}
@@ -110,6 +131,7 @@ func (c *Client) unmarshalIdentity(marshaled []byte) (*id.ID, *rsa.PrivateKey, [
 	return uID, rsaPriv, I.Salt, dhkey, nil
 }
 
+// GetIDFromContact accepts a marshalled contact.Contact object & returns a marshalled id.ID object
 func GetIDFromContact(marshaled []byte) ([]byte, error) {
 	cnt, err := contact.Unmarshal(marshaled)
 	if err != nil {
@@ -119,15 +141,17 @@ func GetIDFromContact(marshaled []byte) ([]byte, error) {
 	return cnt.ID.Marshal(), nil
 }
 
+// GetPubkeyFromContact accepts a marshalled contact.Contact object & returns a json marshalled large.Int DhPubKey
 func GetPubkeyFromContact(marshaled []byte) ([]byte, error) {
 	cnt, err := contact.Unmarshal(marshaled)
 	if err != nil {
 		return nil, err
 	}
 
-	return cnt.ID.Marshal(), nil
+	return json.Marshal(cnt.DhPubKey)
 }
 
+// TODO: this seems completely pointless, as the FactList type is effectively the same thing
 type Fact struct {
 	Fact string
 	Type int
@@ -135,6 +159,7 @@ type Fact struct {
 
 // SetFactsOnContact replaces the facts on the contact with the passed in facts
 // pass in empty facts in order to clear the facts
+// Accepts a marshalled contact.Contact object & a marshalled list of Fact objects
 func SetFactsOnContact(marshaled []byte, facts []byte) ([]byte, error) {
 	cnt, err := contact.Unmarshal(marshaled)
 	if err != nil {
@@ -159,6 +184,7 @@ func SetFactsOnContact(marshaled []byte, facts []byte) ([]byte, error) {
 	return cnt.Marshal(), nil
 }
 
+// GetFactsFromContact accepts a marshalled contact.Contact object, returning its marshalled list of Fact objects
 func GetFactsFromContact(marshaled []byte) ([]byte, error) {
 	cnt, err := contact.Unmarshal(marshaled)
 	if err != nil {
diff --git a/bindings/delivery.go b/bindings/delivery.go
index 36a1f72652f0a2ef58576d4e7ff7821b2f463f9f..6b181741fb2c4ae6e68f182d190190e095e0bf5a 100644
--- a/bindings/delivery.go
+++ b/bindings/delivery.go
@@ -10,6 +10,8 @@ import (
 	"time"
 )
 
+// Example marshalled roundList object:
+// [1001,1003,1006]
 type roundsList []int
 
 func (rl roundsList) Marshal() ([]byte, error) {
diff --git a/bindings/inputJson_test.go b/bindings/inputJson_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..c636c9969358fc3251b44aa4a99e4009c9d470e5
--- /dev/null
+++ b/bindings/inputJson_test.go
@@ -0,0 +1,103 @@
+package bindings
+
+import (
+	"encoding/json"
+	"gitlab.com/elixxir/client/restlike"
+	"gitlab.com/elixxir/crypto/cmix"
+	"gitlab.com/elixxir/crypto/contact"
+	"gitlab.com/elixxir/crypto/cyclic"
+	dh "gitlab.com/elixxir/crypto/diffieHellman"
+	"gitlab.com/elixxir/primitives/fact"
+	"gitlab.com/xx_network/crypto/csprng"
+	"gitlab.com/xx_network/crypto/large"
+	"gitlab.com/xx_network/crypto/signature/rsa"
+	"gitlab.com/xx_network/primitives/id"
+	"testing"
+)
+
+func getGroup() *cyclic.Group {
+	return cyclic.NewGroup(
+		large.NewIntFromString("E2EE983D031DC1DB6F1A7A67DF0E9A8E5561DB8E8D4941"+
+			"3394C049B7A8ACCEDC298708F121951D9CF920EC5D146727AA4AE535B0922C688"+
+			"B55B3DD2AEDF6C01C94764DAB937935AA83BE36E67760713AB44A6337C20E7861"+
+			"575E745D31F8B9E9AD8412118C62A3E2E29DF46B0864D0C951C394A5CBBDC6ADC"+
+			"718DD2A3E041023DBB5AB23EBB4742DE9C1687B5B34FA48C3521632C4A530E8FF"+
+			"B1BC51DADDF453B0B2717C2BC6669ED76B4BDD5C9FF558E88F26E5785302BEDBC"+
+			"A23EAC5ACE92096EE8A60642FB61E8F3D24990B8CB12EE448EEF78E184C7242DD"+
+			"161C7738F32BF29A841698978825B4111B4BC3E1E198455095958333D776D8B2B"+
+			"EEED3A1A1A221A6E37E664A64B83981C46FFDDC1A45E3D5211AAF8BFBC072768C"+
+			"4F50D7D7803D2D4F278DE8014A47323631D7E064DE81C0C6BFA43EF0E6998860F"+
+			"1390B5D3FEACAF1696015CB79C3F9C2D93D961120CD0E5F12CBB687EAB045241F"+
+			"96789C38E89D796138E6319BE62E35D87B1048CA28BE389B575E994DCA7554715"+
+			"84A09EC723742DC35873847AEF49F66E43873", 16),
+		large.NewIntFromString("2", 16))
+}
+
+func TestInputMarshalling(t *testing.T) {
+	rng := csprng.NewSystemRNG()
+	uid := id.NewIdFromString("zezima", id.User, t)
+	salt := cmix.NewSalt(rng, 32)
+	pk, _ := rsa.GenerateKey(rng, 2048)
+	grp := getGroup()
+	dhpk := dh.GeneratePrivateKey(64, grp, rng)
+	dhpkJson, _ := dhpk.MarshalJSON()
+	dhpub := dh.GeneratePublicKey(dhpk, grp)
+	op := make([]byte, 64)
+	_, _ = rng.Read(op)
+	identity := Identity{
+		ID:            uid.Marshal(),
+		RSAPrivatePem: rsa.CreatePrivateKeyPem(pk),
+		Salt:          salt,
+		DHKeyPrivate:  dhpkJson,
+	}
+	c := contact.Contact{
+		ID:             uid,
+		DhPubKey:       dhpub,
+		OwnershipProof: op,
+		Facts: fact.FactList{
+			{
+				Fact: "zezima",
+				T:    fact.Username,
+			},
+		},
+	}
+
+	im, _ := json.Marshal(identity)
+	cm, _ := json.Marshal(c)
+
+	rl := roundsList{
+		1001, 1003, 1006,
+	}
+	rm, _ := json.Marshal(rl)
+
+	restlikeMessage := RestlikeMessage{
+		Version: 1,
+		Headers: []byte("contents:application/json"),
+		Content: []byte("This is a restlike message"),
+		Method:  int(restlike.Post),
+		URI:     "xx://CmixRestlike/rest",
+	}
+	rlm, _ := json.Marshal(restlikeMessage)
+
+	fl := []Fact{
+		{
+			Fact: "Zezima",
+			Type: 0,
+		},
+		{
+			Fact: "Zezima@osrs.org",
+			Type: 2,
+		},
+	}
+	flm, _ := json.Marshal(fl)
+	t.Log("Marshalled Identity object")
+	t.Log(string(im))
+	t.Log("Marshalled contact.Contact object")
+	t.Log(string(cm))
+	t.Log("Marshalled roundsList object")
+	t.Log(string(rm))
+	t.Log("Marshalled RestlikeMessage object")
+	t.Log(string(rlm))
+	t.Log("Marshalled []Fact")
+	t.Log(string(flm))
+}
diff --git a/bindings/restlike.go b/bindings/restlike.go
index 16bfc2e3bb31b04e4bd6a768a5cf69039a45d56e..cc45b2e6113578c8cf290cdebee235eddd1f8dbd 100644
--- a/bindings/restlike.go
+++ b/bindings/restlike.go
@@ -14,6 +14,13 @@ import (
 )
 
 // RestlikeMessage is the bindings representation of a restlike.Message
+// Example marshalled RestlikeMessage:
+//{"Version":1,
+// "Headers":"Y29udGVudHM6YXBwbGljYXRpb24vanNvbg==",
+// "Content":"VGhpcyBpcyBhIHJlc3RsaWtlIG1lc3NhZ2U=",
+// "Method":2,
+// "URI":"xx://CmixRestlike/rest",
+// "Error":""}
 type RestlikeMessage struct {
 	Version uint32
 	Headers []byte