SlideShare a Scribd company logo
Intuit Developer Group
Oauth for QuickBooks Online REST services
JarredKeneally
Intuit Developer Relations
Who’s in the room?
2
• What’s your role?
- ProductManager
- Engineer?
• Worked with OAuth-authorized APIs before?
- OAuth 1.0a?
- OAuth 2.0?
• What languages are you working in?
- Java?
- .NET?
- NodeJS?
3
What is OAuth?
Industry Standard in durableauthentication & authorization (AuthN & AuthZ)
Token Provisioning,Use,Revocation
Replacesprocesses thatinvolve you storing username+passwordfor services you do not
provide
Widely adopted,tested,and supported
4
How does OAuth work?
When you create an App on developer.intuit.com you get an OAuth consumerkey & secret
Use the consumerkey to get a requesttoken (server-to-servercall)
Open a browserwindow to Intuit for the user to authorizethe token request
Upon authorization by the user,a redirectcallback to your serverfrom the browserwindow
provides a tokenVerifier
When you get the token verifier,the responseshouldclose the popup window.
Make server-to-servercallto exchangerequestTokenand tokenVerifierfor an accessTokenand
accessTokenSecret
5
The OAuth Authorization Conversation
6
Why is OAuth “hard”?
Oauth 1.0a was designed for potentially insecure communication channels
Client and Serverneed to implementcryptographyto sign & verify every requestusing the token secret
If you get the signature wrong,the requestis rejected
You are signing a signature base string composed ofthe requestmethod,scheme,server,path,GET
query parameters,and oauth parametersin the header(exceptthe oauth_signature parameteritself)in
alphabeticalorder.
• Example:
GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k
3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-
SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size
%3Doriginal
• If you get the base string wrong, then the signature won’t match the base string calculated by the server and the request
is rejected.
7
Libraries Help. A Lot
Signpostlibrary (oauth.signpost.*)
DevDefined.OAuth
The “request”module (npm installrequest)
PECL OAuth library or OAuthSimple
oauth Gem
Java
.Net
NodeJS
PHP
Ruby
8
Critical URLs
RequestToken endpoint: https://oauth.intuit.com/oauth/v1/get_request_token
UserAuthorizationURL:https://appcenter.intuit.com/Connect/Begin
Access Tokenendpoint:https://oauth.intuit.com/oauth/v1/get_access_token
You will typically need to configure any library you use with these three key endpoints.
Reconnectendpoint:https://appcenter.intuit.com/api/v1/connection/reconnect
Tokensexpire 180 days aftergrant
Within 30 days of expiry,callthe reconnectAPIto ensure uninterruptedservicefor your users
9
Oauth Tokens & Secrets are “Top Secret” Data
Yourclient credentials(ConsumerSecret)representthe ability to get a user to authorize access
to their data thinking they are granting that access to you!
If a black hatcan get your secret,they can use yourbrand to do bad things
Your consumersecretshould alwaysbe encrypted when at-rest.
An access token represents a long-term authorization foryourapp to accessa given user’s data
unattended.
Accesstoken and AccessToken Secretdata should*always*be stored in encrypted storageand the
encryptionkey shouldnotbe stored in the same place!
Access tokens& secrets shouldneverbe delivered to a browser
Nevermake a call to ourAPIs directly from client-side Javascript
For native client-side code in mobile devices:4-leggedOAuth
10
Connect to QuickBooks – The Client Side
• We provide a JS library to help manage the flow
- https://js.appcenter.intuit.com/Content/IA/intuit.ipp.anywhere-1.3.2.js
- Call intuit.ipp.anywhere.setup(params)
o Params is a dictionary withgrantURL,datasources object,andpayment options object
o grantURL is the URL on your server to start the Oauth process
- When Connect To QuickBooks button is clicked call
intuit.ipp.anywhere.controller.onConnectToIntuitClicked()
o Opens a new popup window
o Initiates a sessionwithIntuit withthe parameters you suppliedregarding data sources needed, etc.
o Redirects to your Grant URL
o Your GrantURL redirects back to us for the user to authorize the connection
o We redirect back to your callback URL withthe token verifier
o Your response closes the popup window
11
Gotcha!
Currentimplementationrestricts each app to one OAuth token per company!
Same usergranting a token to the same app for the same company:
• no error, previous token invalidated, new token granted.
Differentuser granting a token to the same app for the same company:
• Error! User informed that user X already subscribed to the app for this company, OAuth token is denied.
We did this to preventtwo users from connecting the same app unaware ofeach other and creating
duplicate data.
There are legitimate use-cases for multiple tokens (i.e.multiple stores on an e-commercesite for
differentregions),we’re consideringoptions.
12
Explore the OAuth Samples
.NET: https://github.com/IntuitDeveloper/oauth-dotnet
Java:https://github.com/IntuitDeveloper/oauth-java
PHP: https://github.com/IntuitDeveloper/oauth-php
NodeJS:https://www.npmjs.com/package/node-quickbooks
npm installnode-quickbooks
cd node_modules/node-quickbooks/example
Ruby:https://github.com/ruckus/quickbooks-ruby
13
Putting it all together
14
Q & A
Contact Us:
@IntuitDeveloper
@JarredKeneally
developer.intuit.com
Oauth 1.0
15
Oauth 1.0a
16
Oauth 1.0a
17
• An elegant and cohesive ecosystem API
- Envisioned as a graph
- Consumed by 1P through an internal SDK
- Experienced through projections
• High degree of automation – architected for testability
• Architecture
- Domain variability expressed consistently through Json Schema
• Accelerates decomposition through orchestrated graph queries and writes
• Enables innovation, balancing speed with governance
• Dog-fooding: identical functionality, quality, and availability for 1st, 2nd, and
3rd parties
V4 Services Overview
V4
3rd
2nd
1st
18
Putting it all together
19
V4 Endpoint
V4 Decomposed Services
Putting it all together – ideal V4 services state
20
Internal SDK
V3 EndpointTranslation
QBO UX
Widgets
(Mobile, Web,
Future 3P)
1P 2P / 3P
Official 3P SDKs (e.g. Java, .net, PHP)
App /
Integration
App /
Integration
App /
Integration
Many (~50%) of our 3P developers also use SDKs.
Our official 3P SDKs will evolve to support multiple
API version interoperability.
Many of our 3P developers
write directly to rest APIs.
Our 1P teams
will make heavy
use of an internal
SDK that
enforces internal
best practices
around building
great offerings.
Our translation
infrastructure
makes it possible to
extend the lifetime
of API versions – a
tremendous
developer benefit
for 1P, 2P, and 3P
personas.
Accountin
g
Payroll Payments Money
Movemen
t & Risk
Transactio
ns
ReportingCompany Accountan
t
Integratio
ns
Network Indirect
Tax
Inventory
21
V4 API Services Developer Benefit
22
QBO UX
Widgets
(Mobile,Web,
Future 3P)
V4 QBO Services
App /
Integration
Complete and Consistent Foundation for Developers
• 2P/3P Developers can do anything that the UI can do
• All QBO uses the same services – so no more one-off behaviors
• Apps enjoy the same reliability as core QBO
V3 App
V3 Endpoint V4 Endpoint
V4 App
Translation
App Durability
• API version translation means that developerinvestment is durable
• No more deprecation cost for developers (and the QuickBooks team)
QBO Services
V4.1 Endpoint
V4.1 App
Translation
QBO Services
V4.n Endpoint
V4.n App
Translation
QBO Services
Grow My Business
Deliver Awesome Experiences Quickly
Access
New Connections
Retention
Active Connections
Speed
Time to Launch
Value
Integration Star Rating
+
+
DEVELOPER SEGMENT
23
V4 is a graph
V4 {
companies: {
bills: { vendor: { } }
employees: { }
vendors: { }
items: { }
}
users: {
…
}
}
Root of the graph
Has an array of
companies
Which has an array of
bills
…
24
Projections of the Graph
V4 {
companies: {
bills: {
vendor: { }
}
…
REST
GET https://v4.api.intuit.com/companies/1234/bills/1234/vendor
BATCH
POST https://v4.api.intuit.com/companies/1234/entities
[{vendor}, {employee}, {bill1}, {bill2}, {query}]
SIMPLE QUERY
GET
https://v4.api.intuit.com/companies/1234/bills?where=“vendor.name=J
eff”
GRAPH QUERY
POST https://v4.api.intuit.com/graphql
{ company(id: “1234”) {
bills(first: 100, where: “vendor.name=Jeff”) {
edges {
node {
id
txnDate
}
}
}
25
Normalized to a Batch…
Domains implement BATCH
REST SIMPLE QUERY GRAPH QL
Projections
BATCH
BATCH
26

More Related Content

PPTX
Intuit QuickBooks Payments API
PDF
Deep Dive on the QuickBooks Online API and Intuit Developer Platform
PDF
Business Impact (Nordic APIS April 2014)
PPTX
Executing on API Developer Experience
PDF
apidays LIVE Paris - Potential of API integrations, common traps and advices ...
PPTX
Transforming Your Business Through APIs
PDF
I Love APIs 2015: Advanced Crash Course in Apigee Edge Workshop
PDF
Who Cares About APIs? (NordicAPIS April 2014)
Intuit QuickBooks Payments API
Deep Dive on the QuickBooks Online API and Intuit Developer Platform
Business Impact (Nordic APIS April 2014)
Executing on API Developer Experience
apidays LIVE Paris - Potential of API integrations, common traps and advices ...
Transforming Your Business Through APIs
I Love APIs 2015: Advanced Crash Course in Apigee Edge Workshop
Who Cares About APIs? (NordicAPIS April 2014)

What's hot (20)

PDF
Building an API Security Strategy
PDF
apidays LIVE Paris - Succeeding with API Programs by Kiran Nadgir
PDF
apidays LIVE Australia 2021 - Designing Embedded Platforms by Jeremy Glassenb...
PDF
Gravitee API Management - Ahmet AYDIN
PPTX
Bigger, Better Business With OAuth
PPTX
A Definition of Done for DevSecOps
PPTX
Balancing Security & Developer Enablement in Enterprise Mobility - Jaime Ryan...
PPT
Cloud Foundry Summit 2014: Introducing Cloud Foundry Integration for Eclipse
PDF
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
PDF
Contract {Collaboration} Driven Development - APIdays Interface 2020
PDF
How to Achieve Agile API Security
PDF
Apigee Edge: Intro to Microgateway
PPTX
BDD Approach with Karate Framework in Service Tests
PDF
apidays LIVE Jakarta - What will the next generation of API Portals look like...
PPTX
Camunda BPM - Said Mengi
PPTX
APIs: The New Security Layer
PDF
APIdays Paris 2019 - API Security Tips for Developers by Isabelle Mauny, 42Cr...
PPTX
apidays LIVE Paris - Interface Economy: The true potential of APIs by Kristof...
PDF
INTERFACE, by apidays - A cloud-native approach for open banking in action b...
PDF
APIdays Paris 2019 - API Gateway & Identity Providers, a Match Made in Micros...
Building an API Security Strategy
apidays LIVE Paris - Succeeding with API Programs by Kiran Nadgir
apidays LIVE Australia 2021 - Designing Embedded Platforms by Jeremy Glassenb...
Gravitee API Management - Ahmet AYDIN
Bigger, Better Business With OAuth
A Definition of Done for DevSecOps
Balancing Security & Developer Enablement in Enterprise Mobility - Jaime Ryan...
Cloud Foundry Summit 2014: Introducing Cloud Foundry Integration for Eclipse
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
Contract {Collaboration} Driven Development - APIdays Interface 2020
How to Achieve Agile API Security
Apigee Edge: Intro to Microgateway
BDD Approach with Karate Framework in Service Tests
apidays LIVE Jakarta - What will the next generation of API Portals look like...
Camunda BPM - Said Mengi
APIs: The New Security Layer
APIdays Paris 2019 - API Security Tips for Developers by Isabelle Mauny, 42Cr...
apidays LIVE Paris - Interface Economy: The true potential of APIs by Kristof...
INTERFACE, by apidays - A cloud-native approach for open banking in action b...
APIdays Paris 2019 - API Gateway & Identity Providers, a Match Made in Micros...
Ad

Viewers also liked (20)

PPTX
Deconstructing API Security
PDF
eBook: The Appification of Small Business
PPTX
Securing api with_o_auth2
PPT
Informatiebeveiliging: Modellen Raamwerken Methodes
PDF
REST Basics
PPTX
API Security: Securing Digital Channels and Mobile Apps Against Hacks
PDF
Layer 7 & Oracle: Cyber Defense for SOA & REST
PDF
Lessons of the Past: Intuit
PPTX
Intuit We Care and Give Back by Kara DeFrias
PPTX
QuickBooks Connect 2016 - Implementing analytic and optimization tools on you...
PDF
QuickBooks Connect 2015: Hackathon Kickoff
PPTX
What Lawyers Can Learn From Accountants and their Journey to the Cloud
PDF
Running a Business is No Small Feat!
PDF
From Idea to Successful App
PDF
“Build it and They Will Come” May Not Work: Investing Early in Developer Success
PPTX
QuickBooks Connect 2016 - Marketing your app: learn from your developer peers
PPTX
QuickBooks Connect 2016 - Building your first QuickBooks App integration
PPTX
QuickBooks Connect 2016 - How small business can benefit from developer innov...
PDF
QuickBooks Connect 2015: VIP Developer Session
PPTX
QuickBooks Connect 2016 - The 12 golden rules for building products that cust...
Deconstructing API Security
eBook: The Appification of Small Business
Securing api with_o_auth2
Informatiebeveiliging: Modellen Raamwerken Methodes
REST Basics
API Security: Securing Digital Channels and Mobile Apps Against Hacks
Layer 7 & Oracle: Cyber Defense for SOA & REST
Lessons of the Past: Intuit
Intuit We Care and Give Back by Kara DeFrias
QuickBooks Connect 2016 - Implementing analytic and optimization tools on you...
QuickBooks Connect 2015: Hackathon Kickoff
What Lawyers Can Learn From Accountants and their Journey to the Cloud
Running a Business is No Small Feat!
From Idea to Successful App
“Build it and They Will Come” May Not Work: Investing Early in Developer Success
QuickBooks Connect 2016 - Marketing your app: learn from your developer peers
QuickBooks Connect 2016 - Building your first QuickBooks App integration
QuickBooks Connect 2016 - How small business can benefit from developer innov...
QuickBooks Connect 2015: VIP Developer Session
QuickBooks Connect 2016 - The 12 golden rules for building products that cust...
Ad

Similar to OAuth for QuickBooks Online REST Services (20)

PPTX
VIP Developer Day Kick Off - QuickBooks Connect Sydney 2017
PDF
Developing Apps on The QuickBooks Platform
PPTX
Building the Next Generation of QuickBooks App Integrations, QuickBooks Conne...
PPTX
Intuit anywhere developer policies and guidelines
PPTX
From Idea to Published App, QuickBooks Connect 2017
PPTX
QuickBooks Connect 2016 - Using WebHooks to handle data changes in your app
PDF
The Future of the Web - Cold Front conference 2016
PDF
Authentication with OAuth and Connected Apps
PDF
OAuth 2.0 for developers – the technology you need but never really learned
PPTX
Citi Accelerator Meetup 6/22/15
POTX
Harmony, Sandbox, and You: Intuit Developer Webinar, January 2015
PPTX
Introduction to OAuth
PPTX
Introduction to OAuth 2.0 - the technology you need but never really learned
PDF
The Future of Progressive Web Apps - Google for Indonesia
PPT
Velocity 2014: Accelerate Your User Experience With Client-side JavaScript
PPTX
Saas webinar-dec6-01
PDF
RESTful services and OAUTH protocol in IoT
PPTX
The Momentum of QuickBooks Developers: the Road to Success, QuickBooks Connec...
PDF
The Future of Progressive Web Apps - View Source conference, Berlin 2016
VIP Developer Day Kick Off - QuickBooks Connect Sydney 2017
Developing Apps on The QuickBooks Platform
Building the Next Generation of QuickBooks App Integrations, QuickBooks Conne...
Intuit anywhere developer policies and guidelines
From Idea to Published App, QuickBooks Connect 2017
QuickBooks Connect 2016 - Using WebHooks to handle data changes in your app
The Future of the Web - Cold Front conference 2016
Authentication with OAuth and Connected Apps
OAuth 2.0 for developers – the technology you need but never really learned
Citi Accelerator Meetup 6/22/15
Harmony, Sandbox, and You: Intuit Developer Webinar, January 2015
Introduction to OAuth
Introduction to OAuth 2.0 - the technology you need but never really learned
The Future of Progressive Web Apps - Google for Indonesia
Velocity 2014: Accelerate Your User Experience With Client-side JavaScript
Saas webinar-dec6-01
RESTful services and OAUTH protocol in IoT
The Momentum of QuickBooks Developers: the Road to Success, QuickBooks Connec...
The Future of Progressive Web Apps - View Source conference, Berlin 2016

More from Intuit Developer (8)

PPTX
Anatomy of a Quality App, QuickBooks Connect 2017
PPTX
Data Integrations that Delight! QuickBooks Connect San Jose 2017
PPTX
50 Niche Apps in 50 Minutes
PDF
Developer Day Tech Session at QuickBooks Connect Sydney 2017
PPTX
QuickBooks Connect 2016 - Designing for mobile
PPTX
QuickBooks Connect 2016 - Building a global app: understanding the Global Tax...
PPTX
How to Pitch an App at a Hackathon
PPTX
Small Business Web and Open APIs
Anatomy of a Quality App, QuickBooks Connect 2017
Data Integrations that Delight! QuickBooks Connect San Jose 2017
50 Niche Apps in 50 Minutes
Developer Day Tech Session at QuickBooks Connect Sydney 2017
QuickBooks Connect 2016 - Designing for mobile
QuickBooks Connect 2016 - Building a global app: understanding the Global Tax...
How to Pitch an App at a Hackathon
Small Business Web and Open APIs

Recently uploaded (20)

PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PDF
WOOl fibre morphology and structure.pdf for textiles
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
Enhancing emotion recognition model for a student engagement use case through...
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
August Patch Tuesday
PDF
STKI Israel Market Study 2025 version august
PDF
A novel scalable deep ensemble learning framework for big data classification...
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PPTX
Modernising the Digital Integration Hub
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Web App vs Mobile App What Should You Build First.pdf
PPTX
Chapter 5: Probability Theory and Statistics
PPTX
Programs and apps: productivity, graphics, security and other tools
PPT
What is a Computer? Input Devices /output devices
PDF
Getting started with AI Agents and Multi-Agent Systems
PPTX
1. Introduction to Computer Programming.pptx
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
WOOl fibre morphology and structure.pdf for textiles
Group 1 Presentation -Planning and Decision Making .pptx
Enhancing emotion recognition model for a student engagement use case through...
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
Hindi spoken digit analysis for native and non-native speakers
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Assigned Numbers - 2025 - Bluetooth® Document
August Patch Tuesday
STKI Israel Market Study 2025 version august
A novel scalable deep ensemble learning framework for big data classification...
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
Modernising the Digital Integration Hub
Module 1.ppt Iot fundamentals and Architecture
Web App vs Mobile App What Should You Build First.pdf
Chapter 5: Probability Theory and Statistics
Programs and apps: productivity, graphics, security and other tools
What is a Computer? Input Devices /output devices
Getting started with AI Agents and Multi-Agent Systems
1. Introduction to Computer Programming.pptx

OAuth for QuickBooks Online REST Services

  • 1. Intuit Developer Group Oauth for QuickBooks Online REST services JarredKeneally Intuit Developer Relations
  • 2. Who’s in the room? 2 • What’s your role? - ProductManager - Engineer? • Worked with OAuth-authorized APIs before? - OAuth 1.0a? - OAuth 2.0? • What languages are you working in? - Java? - .NET? - NodeJS?
  • 3. 3 What is OAuth? Industry Standard in durableauthentication & authorization (AuthN & AuthZ) Token Provisioning,Use,Revocation Replacesprocesses thatinvolve you storing username+passwordfor services you do not provide Widely adopted,tested,and supported
  • 4. 4 How does OAuth work? When you create an App on developer.intuit.com you get an OAuth consumerkey & secret Use the consumerkey to get a requesttoken (server-to-servercall) Open a browserwindow to Intuit for the user to authorizethe token request Upon authorization by the user,a redirectcallback to your serverfrom the browserwindow provides a tokenVerifier When you get the token verifier,the responseshouldclose the popup window. Make server-to-servercallto exchangerequestTokenand tokenVerifierfor an accessTokenand accessTokenSecret
  • 6. 6 Why is OAuth “hard”? Oauth 1.0a was designed for potentially insecure communication channels Client and Serverneed to implementcryptographyto sign & verify every requestusing the token secret If you get the signature wrong,the requestis rejected You are signing a signature base string composed ofthe requestmethod,scheme,server,path,GET query parameters,and oauth parametersin the header(exceptthe oauth_signature parameteritself)in alphabeticalorder. • Example: GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k 3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC- SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size %3Doriginal • If you get the base string wrong, then the signature won’t match the base string calculated by the server and the request is rejected.
  • 7. 7 Libraries Help. A Lot Signpostlibrary (oauth.signpost.*) DevDefined.OAuth The “request”module (npm installrequest) PECL OAuth library or OAuthSimple oauth Gem Java .Net NodeJS PHP Ruby
  • 8. 8 Critical URLs RequestToken endpoint: https://oauth.intuit.com/oauth/v1/get_request_token UserAuthorizationURL:https://appcenter.intuit.com/Connect/Begin Access Tokenendpoint:https://oauth.intuit.com/oauth/v1/get_access_token You will typically need to configure any library you use with these three key endpoints. Reconnectendpoint:https://appcenter.intuit.com/api/v1/connection/reconnect Tokensexpire 180 days aftergrant Within 30 days of expiry,callthe reconnectAPIto ensure uninterruptedservicefor your users
  • 9. 9 Oauth Tokens & Secrets are “Top Secret” Data Yourclient credentials(ConsumerSecret)representthe ability to get a user to authorize access to their data thinking they are granting that access to you! If a black hatcan get your secret,they can use yourbrand to do bad things Your consumersecretshould alwaysbe encrypted when at-rest. An access token represents a long-term authorization foryourapp to accessa given user’s data unattended. Accesstoken and AccessToken Secretdata should*always*be stored in encrypted storageand the encryptionkey shouldnotbe stored in the same place! Access tokens& secrets shouldneverbe delivered to a browser Nevermake a call to ourAPIs directly from client-side Javascript For native client-side code in mobile devices:4-leggedOAuth
  • 10. 10 Connect to QuickBooks – The Client Side • We provide a JS library to help manage the flow - https://js.appcenter.intuit.com/Content/IA/intuit.ipp.anywhere-1.3.2.js - Call intuit.ipp.anywhere.setup(params) o Params is a dictionary withgrantURL,datasources object,andpayment options object o grantURL is the URL on your server to start the Oauth process - When Connect To QuickBooks button is clicked call intuit.ipp.anywhere.controller.onConnectToIntuitClicked() o Opens a new popup window o Initiates a sessionwithIntuit withthe parameters you suppliedregarding data sources needed, etc. o Redirects to your Grant URL o Your GrantURL redirects back to us for the user to authorize the connection o We redirect back to your callback URL withthe token verifier o Your response closes the popup window
  • 11. 11 Gotcha! Currentimplementationrestricts each app to one OAuth token per company! Same usergranting a token to the same app for the same company: • no error, previous token invalidated, new token granted. Differentuser granting a token to the same app for the same company: • Error! User informed that user X already subscribed to the app for this company, OAuth token is denied. We did this to preventtwo users from connecting the same app unaware ofeach other and creating duplicate data. There are legitimate use-cases for multiple tokens (i.e.multiple stores on an e-commercesite for differentregions),we’re consideringoptions.
  • 12. 12 Explore the OAuth Samples .NET: https://github.com/IntuitDeveloper/oauth-dotnet Java:https://github.com/IntuitDeveloper/oauth-java PHP: https://github.com/IntuitDeveloper/oauth-php NodeJS:https://www.npmjs.com/package/node-quickbooks npm installnode-quickbooks cd node_modules/node-quickbooks/example Ruby:https://github.com/ruckus/quickbooks-ruby
  • 13. 13 Putting it all together
  • 14. 14 Q & A Contact Us: @IntuitDeveloper @JarredKeneally developer.intuit.com
  • 18. • An elegant and cohesive ecosystem API - Envisioned as a graph - Consumed by 1P through an internal SDK - Experienced through projections • High degree of automation – architected for testability • Architecture - Domain variability expressed consistently through Json Schema • Accelerates decomposition through orchestrated graph queries and writes • Enables innovation, balancing speed with governance • Dog-fooding: identical functionality, quality, and availability for 1st, 2nd, and 3rd parties V4 Services Overview V4 3rd 2nd 1st 18
  • 19. Putting it all together 19
  • 20. V4 Endpoint V4 Decomposed Services Putting it all together – ideal V4 services state 20 Internal SDK V3 EndpointTranslation QBO UX Widgets (Mobile, Web, Future 3P) 1P 2P / 3P Official 3P SDKs (e.g. Java, .net, PHP) App / Integration App / Integration App / Integration Many (~50%) of our 3P developers also use SDKs. Our official 3P SDKs will evolve to support multiple API version interoperability. Many of our 3P developers write directly to rest APIs. Our 1P teams will make heavy use of an internal SDK that enforces internal best practices around building great offerings. Our translation infrastructure makes it possible to extend the lifetime of API versions – a tremendous developer benefit for 1P, 2P, and 3P personas. Accountin g Payroll Payments Money Movemen t & Risk Transactio ns ReportingCompany Accountan t Integratio ns Network Indirect Tax Inventory
  • 21. 21
  • 22. V4 API Services Developer Benefit 22 QBO UX Widgets (Mobile,Web, Future 3P) V4 QBO Services App / Integration Complete and Consistent Foundation for Developers • 2P/3P Developers can do anything that the UI can do • All QBO uses the same services – so no more one-off behaviors • Apps enjoy the same reliability as core QBO V3 App V3 Endpoint V4 Endpoint V4 App Translation App Durability • API version translation means that developerinvestment is durable • No more deprecation cost for developers (and the QuickBooks team) QBO Services V4.1 Endpoint V4.1 App Translation QBO Services V4.n Endpoint V4.n App Translation QBO Services
  • 23. Grow My Business Deliver Awesome Experiences Quickly Access New Connections Retention Active Connections Speed Time to Launch Value Integration Star Rating + + DEVELOPER SEGMENT 23
  • 24. V4 is a graph V4 { companies: { bills: { vendor: { } } employees: { } vendors: { } items: { } } users: { … } } Root of the graph Has an array of companies Which has an array of bills … 24
  • 25. Projections of the Graph V4 { companies: { bills: { vendor: { } } … REST GET https://v4.api.intuit.com/companies/1234/bills/1234/vendor BATCH POST https://v4.api.intuit.com/companies/1234/entities [{vendor}, {employee}, {bill1}, {bill2}, {query}] SIMPLE QUERY GET https://v4.api.intuit.com/companies/1234/bills?where=“vendor.name=J eff” GRAPH QUERY POST https://v4.api.intuit.com/graphql { company(id: “1234”) { bills(first: 100, where: “vendor.name=Jeff”) { edges { node { id txnDate } } } 25
  • 26. Normalized to a Batch… Domains implement BATCH REST SIMPLE QUERY GRAPH QL Projections BATCH BATCH 26