---
title: Quick Start
weight: 2
layout: guides
---
## Overview
To use LedgerSync, you must carry out an `Operation`. The operation will be ledger-specific and will require the
following:
1. Client
2. Resource(s)
## 1. Create a client
Clients are responsible for the authentication and requests for a specific ledger. In this example, we will assume you
are using the QuickBooks Online ledger.
Note: Each ledger has different requirements for authentication. Please visit the
ledger-specific pages to learn more.
```ruby
client = LedgerSync::Ledgers::QuickBooksOnline::Client.new(
access_token: access_token, # assuming this is defined
client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'],
client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'],
realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'],
refresh_token: refresh_token # assuming this is defined
)
```
## 2. Create resource(s)
Create a resource on which to operate. Some resources have references to other resources. You can use
`Util::ResourcesBuilder` to create resources and relationships from a structured hash.
Note: Resources are ledger-specific, meaning they may have different attributes and
references compared to other ledgers. Please visit [the Reference](/reference) to learn about resource
attributes.
```ruby
resource = LedgerSync::Ledgers::QuickBooksOnline::Customer.new(
DisplayName: 'Sample Customer',
external_id: customer_external_id # A unique ID from your platform
)
```
## 3. Create an operation
Given our `client` and `resource` from above, we can now create an `Operation`. Operations are typically CRUD-like
methods, typically (though not always) only making a single request.
Operations automatically determine a `Serializer` and `Deserializer`. These serializers are used to translate to and
the from the ruby `Resource` in the format required by the ledger.
```ruby
operation = LedgerSync::Ledgers::QuickBooksOnline::Customer::Operations::Create.new(
client: client,
resource: resource
)
```
## 4. Perform the operation
The next step is to perform the operation. You can do this by simply calling `perform`.
```ruby
result = operation.perform # Returns a LedgerSync::OperationResult
```
This method will return a
`LedgerSync::OperationResult` which is a special object allowing you to determine the success of the operation, access
responses values (serialized and deserialized), and investigate failures.
```ruby
if result.success?
resource = result.operation.resource
# Do something with resource
else # result.failure?
raise result.error
end
```
## 5. Save updates to authentication
Because QuickBooks Online uses Oauth 2, you must always be sure to save the access_token, refresh_token, and expirations
as they can change with any API call. Operations will always save values back to the client.
### Automatically update values in .env
If you have a `.env` file present in the root directory of your project, the client will automatically comment out old values and update new
values.
If you want to disable this functionality, you can do so by setting `update_dotenv` to `false` when instantiating the
object:
```ruby
client = LedgerSync::Ledgers::QuickBooksOnline::Client.new(
access_token: access_token, # assuming this is defined
client_id: ENV['QUICKBOOKS_ONLINE_CLIENT_ID'],
client_secret: ENV['QUICKBOOKS_ONLINE_CLIENT_SECRET'],
realm_id: ENV['QUICKBOOKS_ONLINE_REALM_ID'],
refresh_token: refresh_token, # assuming this is defined
update_dotenv: false
)
```
### Manually save values
```ruby
result.operation.client.ledger_attributes_to_save.each do |key, value|
# save values
end
```
## Summary
That's it! Assuming proper authentication values and valid values on the resource, this will result in a new customer
being created in QuickBooks Online.
There are many other resources and operations that can be performed in QuickBooks Online. For a complete guide of these
and other ledgers, visit [the Reference](/reference).