Skip to content

Instantly share code, notes, and snippets.

@seankovacs
Last active October 22, 2018 17:30
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save seankovacs/bb4fe2164dc9767dee0d to your computer and use it in GitHub Desktop.
Save seankovacs/bb4fe2164dc9767dee0d to your computer and use it in GitHub Desktop.
Google Voice internal OAuth2 API
Oauth2 Scope:
https://www.googleapis.com/auth/googlevoice
+https://www.googleapis.com/auth/contacts
+https://www.googleapis.com/auth/userinfo.email
+https://www.googleapis.com/auth/userinfo.profile
+https://www.googleapis.com/auth/googletalk
++++ Folder/Label counts
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 182
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.getaccountstatus","id":"gtl_9","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{}},"apiVersion":"v0.1internal"}
+++ List convo
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 245
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.listconversations","id":"gtl_11","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"offset":0,"label":["inbox"],"limit":10,"wantTranscript":true}},"apiVersion":"v0.1internal"}
+++ search convo
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 245
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.searchconversations","id":"gtl_11","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"limit":10,"offset":0,"query":"gdbbgv","wantTranscript":true}},"apiVersion":"v0.1internal"}
++++ Full settings
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 181
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.updatesettings","id":"gtl_13","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{}},"apiVersion":"v0.1internal"}
+++ Client Settings ID?
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 184
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.getclientsettings","id":"gtl_29","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{}},"apiVersion":"v0.1internal"}
+++ get shadow number to destination # matrix
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 214
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.getbackendinfo","id":"gtl_27","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"forwardingNumber":"+[PHONE NUMBER]"}},"apiVersion":"v0.1internal"}
++++ Add/remove labels
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 291
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.updateconversationlabels","id":"gtl_33","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-
Q","request":{"addLabel":[],"conversationId":["JJKPVJQZYLUMYJWHSPXWLWTXOSGQMMIJYMMWSTOY"],"removeLabel":["unread"]}},"apiVersion":"v0.1internal"}
++++ direct dial call? useshadownumber =false is callback?
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 300
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.initcallthrough","id":"gtl_35","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"subscriberDid":"+[GV PHONE NUMBER]","outgoingNumber":"+[PHONE NUMBER]","devicePhoneNumber":"+[PHONE NUMBER]","useShadowNumber":true}},"apiVersion":"v0.1internal"}
++++ send SMS
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 288
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.sendsms","id":"gtl_41","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"subscriberDid":"+[GV PHONE NUMBER]","outgoingDestination":["+[PHONE NUMBER]"],"messageId":[3620884579],"smsMessage":"Hi"}},"apiVersion":"v0.1internal"}
+++++ send sms Multiple
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 318
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.sendsms","id":"gtl_43","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"subscriberDid":"+[GV PHONE NUMBER]","outgoingDestination":["+[PHONE NUMBER]","1-800-MY-APPLE"],"messageId":
[1018517004,1026438777],"smsMessage":"Feel"}},"apiVersion":"v0.1internal"}
++++ reply SMS adds converationId
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 345
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.sendsms","id":"gtl_123","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"smsMessage":"Hi","subscriberDid":"+[GV PHONE NUMBER]","outgoingDestination":
["+[PHONE NUMBER]"],"conversationId":"775c86bb9460e7d7bda806662735f74eb7d3f589","messageId":[1741954366]}},"apiVersion":"v0.1internal"}
+++ set DND
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 235
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.updatesettings","id":"gtl_165","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"settings":{"doNotDisturb":true,"forwardingPhone":[]}}},"apiVersion":"v0.1internal"}
+++++ get voicemail
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 234
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.fetchrecording","id":"gtl_61","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"callId":["YZQRNPMUKJYYIXZMTMJVUVPPHIXRZUGQLUJPRWKZ"]}},"apiVersion":"v0.1internal"}
++++ call back call
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQFtJvgWmCJ3lVTe2QMC3hC7gR5Zh7lPEFXMlWL8XyyhaxDGF0mCAYTd_A12Ouj7HxcLbX3w29PCvA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 277
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.initclicktocall","id":"gtl_171","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"outgoingNumber":"+[PHONE NUMBER]","subscriberDid":"+[GV PHONE NUMBER]","forwardingNumber":"+[PHONE NUMBER]"}},"apiVersion":"v0.1internal"}
+++++ cancel call back
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQEqkUYDvg9c8rDrBm5a0bpMSBFWngVwgFC01OHcV71qaKL8RZw1YilAXi6mW6R8LiI7L0LfzmIFmA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 274
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.cancelcall","id":"gtl_355","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"outgoingNumber":"+17708960082","subscriberDid":"+[GV PHONE NUMBER]","forwardingNumber":"+[PHONE NUMBER]"}},"apiVersion":"v0.1internal"}
++++ add phone to GV
POST /rpc?prettyprint=false HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer ya29.BQEqkUYDvg9c8rDrBm5a0bpMSBFWngVwgFC01OHcV71qaKL8RZw1YilAXi6mW6R8LiI7L0LfzmIFmA
Content-Type: application/json-rpc; charset=utf-8
Accept: application/json-rpc
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Length: 277
Cache-Control: no-cache
Connection: keep-alive
Proxy-Connection: keep-alive
User-Agent: com.google.GVDialer/1.6.0 google-api-objc-client/2.0 iPhone/8.1.2 hw/iPhone7_2 iPhoneUnknown (gzip)
{"method":"voice.internalMobileApi.updatesettings","id":"gtl_399","jsonrpc":"2.0","params":{"key":"AIzaSyAtigdLU79JdgGyN3adhFHRbwRRWNjIt-Q","request":
{"settings":{"forwardingPhone":[{"type":2,"policy":0,"name":"My iPhone","number":"+[PHONE NUMBER]"}]}}},"apiVersion":"v0.1internal"}
@atomkirk
Copy link

atomkirk commented Oct 22, 2018

Any ideas how I could get a token using those scopes? Using googles OAuth 2.0 playground the token returned gives me an Invalid Credentials error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment