@lunch-money/developer-docs 2.11.1-preview.9 → 2.11.2-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/branding-your-app.md +1 -1
- package/docs/getting-started.md +14 -10
- package/docs/introduction.md +2 -1
- package/docs/oauth/index.md +4 -4
- package/docs/oauth/native-apps.md +2 -2
- package/docs/oauth/oauth-scope-catalog-design.md +3 -3
- package/docs/oauth/register-client.md +6 -5
- package/docs/oauth/review-and-approval.md +16 -4
- package/docs/oauth/scopes.md +2 -2
- package/docs/oauth/troubleshooting.md +16 -3
- package/package.json +1 -1
- package/v2/docs/intro-to-v2.md +1 -1
- package/v2/docs/version-history.md +5 -2
- package/v2/spec/lunch-money-api-v2.yaml +41 -13
|
@@ -45,7 +45,7 @@ A few common, low-friction ways to brand an integration:
|
|
|
45
45
|
|
|
46
46
|
1. **README or docs** — a short "Built with Lunch Money" line plus the Powered by badge linking to <a href="https://lunchmoney.app/" target="_blank" rel="noopener noreferrer">lunchmoney.app</a>
|
|
47
47
|
2. **App footer or about screen** — the Powered by badge next to your own branding
|
|
48
|
-
3. **Onboarding or connect flow** — official logo when
|
|
48
|
+
3. **Onboarding or connect flow** — official logo when asking users to connect their Lunch Money account through OAuth. Applications intended for other users should not ask them to paste a personal access token; see the [OAuth overview](/oauth)
|
|
49
49
|
4. **Community listings** — consistent naming ("My Tool for Lunch Money") so users can find and trust your project
|
|
50
50
|
|
|
51
51
|
Keep your own product name primary. Lunch Money branding should signal the connection, not compete with your identity.
|
package/docs/getting-started.md
CHANGED
|
@@ -27,9 +27,11 @@ Choose the option to "Set up Demo". This will add categories, accounts, tags and
|
|
|
27
27
|

|
|
28
28
|
:::
|
|
29
29
|
|
|
30
|
-
## Getting
|
|
30
|
+
## Getting a personal access token
|
|
31
31
|
|
|
32
|
-
Lunch Money API requests are authenticated using the Bearer Token authentication method. In plain English, this means that you will pass a token associated with your budgeting account to Lunch Money. This is so we know which account to operate on and that the request came from someone who can access that account.
|
|
32
|
+
Lunch Money API requests are authenticated using the Bearer Token authentication method. In plain English, this means that you will pass a personal access token associated with your budgeting account to Lunch Money. This is so we know which account to operate on and that the request came from someone who can access that account.
|
|
33
|
+
|
|
34
|
+
This guide uses a personal access token so you can explore the API with your own budgeting account. If you are building an application that other people will connect to Lunch Money, start with the [OAuth overview](/oauth) instead.
|
|
33
35
|
|
|
34
36
|
:::tabs
|
|
35
37
|
|
|
@@ -39,25 +41,25 @@ Navigate to <a href="https://my.lunchmoney.app/developers" target="_blank" rel="
|
|
|
39
41
|

|
|
40
42
|
|
|
41
43
|
@tab 2. Request Access Token
|
|
42
|
-
In the upper right hand corner of the page, give your access token a label and specify what you are using it for. When you're done, hit the "Request Access Token" button.
|
|
44
|
+
In the upper right hand corner of the page, give your personal access token a label and specify what you are using it for. When you're done, hit the "Request Access Token" button.
|
|
43
45
|

|
|
44
46
|
|
|
45
47
|
@tab 3. Save Access Token
|
|
46
|
-
After you do this, the web page will show you a long alphanumeric string. This is your access token. Hit the copy button and save this token somewhere safe. It is only shown to you when you create it.
|
|
48
|
+
After you do this, the web page will show you a long alphanumeric string. This is your personal access token. Hit the copy button and save this token somewhere safe. It is only shown to you when you create it.
|
|
47
49
|
:::
|
|
48
50
|
|
|
49
|
-
Congratulations! You've got
|
|
51
|
+
Congratulations! You've got a personal access token and are ready to make an API request! Later, when you are more comfortable with the API, you can repeat this process to create a new personal access token associated with your real budget.
|
|
50
52
|
|
|
51
53
|
> [!WARNING]
|
|
52
|
-
> Treat your access tokens like passwords. Don't share them with anyone you don't trust.
|
|
54
|
+
> Treat your personal access tokens like passwords. Don't share them with anyone you don't trust.
|
|
53
55
|
|
|
54
|
-
If you ever worry that your access token has been compromised, you can always come back to the Developers page and hit the Revoke button.
|
|
56
|
+
If you ever worry that your personal access token has been compromised, you can always come back to the Developers page and hit the Revoke button.
|
|
55
57
|
|
|
56
58
|
> [!NOTE]
|
|
57
|
-
> Give your access tokens descriptive names so you can easily identify and revoke them later if needed.
|
|
59
|
+
> Give your personal access tokens descriptive names so you can easily identify and revoke them later if needed.
|
|
58
60
|
|
|
59
61
|
|
|
60
|
-
## Using your access token
|
|
62
|
+
## Using your personal access token
|
|
61
63
|
|
|
62
64
|
When you start to write code that makes API calls, you will need to include this token in each request using an Authorization header. Here is an example curl request:
|
|
63
65
|
|
|
@@ -68,7 +70,7 @@ curl --location 'https://api.lunchmoney.dev/v2/me' \
|
|
|
68
70
|
|
|
69
71
|
If this doesn't make sense yet, that's OK!
|
|
70
72
|
|
|
71
|
-
There is an easier way to use your access token to make requests. Head over to the [API Reference Documentation](/v2/docs).
|
|
73
|
+
There is an easier way to use your personal access token to make requests. Head over to the [API Reference Documentation](/v2/docs).
|
|
72
74
|
|
|
73
75
|
:::tabs
|
|
74
76
|
|
|
@@ -85,6 +87,8 @@ This will pop up a dialog box that you can use to send an API request. This is a
|
|
|
85
87
|
|
|
86
88
|
From here, you can explore the rest of the Lunch Money API and start thinking about what you might do with it.
|
|
87
89
|
|
|
90
|
+
When you are ready to build an application that other Lunch Money users can connect to, [learn how OAuth grants access without asking users to share personal access tokens](/oauth).
|
|
91
|
+
|
|
88
92
|
## What can you build?
|
|
89
93
|
|
|
90
94
|
The Lunch Money community has already built a wide variety of tools — automations, importers, dashboards, and more. Check out the <a href="https://lunchmoney.app/developers#community-projects" target="_blank" rel="noopener noreferrer">Developer Tools & Community Projects</a> list for inspiration, or drop by the <a href="https://discord.com/channels/842337014556262411/1134597088504729780" target="_blank" rel="noopener noreferrer">Show and Tell channel</a> on Discord to see what others are sharing.
|
package/docs/introduction.md
CHANGED
|
@@ -10,7 +10,7 @@ The v2 API is available at:
|
|
|
10
10
|
https://api.lunchmoney.dev/v2
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
To explore the API or work with your own budgeting account, create a personal access token on the <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">Developers page</a>. If you are building an application for other Lunch Money users, [use OAuth](/oauth) instead. Both kinds of access token are sent as a Bearer token with each request:
|
|
14
14
|
|
|
15
15
|
```http
|
|
16
16
|
Authorization: Bearer YOUR_ACCESS_TOKEN
|
|
@@ -59,5 +59,6 @@ Join the conversation in the <a href="https://lunchmoney.app/discord" target="_b
|
|
|
59
59
|
**Useful links:**
|
|
60
60
|
- <a href="/v2/docs">Interactive API Reference</a>
|
|
61
61
|
- [Getting started guide](/getting-started)
|
|
62
|
+
- [OAuth overview](/oauth)
|
|
62
63
|
- <a href="https://github.com/lunch-money/awesome-lunchmoney" target="_blank" rel="noopener noreferrer">Awesome Lunch Money Projects</a>
|
|
63
64
|
- [Contact: devsupport@lunchmoney.app](mailto:devsupport@lunchmoney.app)
|
package/docs/oauth/index.md
CHANGED
|
@@ -6,23 +6,23 @@ OAuth lets your application access Lunch Money on behalf of a user without askin
|
|
|
6
6
|
|
|
7
7
|
## Choose OAuth or a personal access token
|
|
8
8
|
|
|
9
|
-
| Question | Personal access token | OAuth
|
|
9
|
+
| Question | Personal access token | OAuth client |
|
|
10
10
|
| --- | --- | --- |
|
|
11
11
|
| Whose data can it access? | One budgeting account belonging to the user who created the token | One budgeting account selected by each user who authorizes the application |
|
|
12
12
|
| Best fit | API exploration, one-off scripts, and short-lived work on your own account | Persistent integrations and applications intended for other users |
|
|
13
13
|
| How is access granted? | The user creates a token on the [Developers page](https://my.lunchmoney.app/developers) in the Lunch Money web app | The user signs in and approves the permissions requested by the application |
|
|
14
14
|
| Credential handling | The user keeps the token and sends it with their own API requests; third-party applications should use OAuth instead of asking users to share one | The authorization flow delivers application-specific tokens without asking for a personal token |
|
|
15
|
-
| Permissions | Full access to the Lunch Money APIs available for that budgeting account, with no fine-grained permission controls | Only the permissions selected when the
|
|
15
|
+
| Permissions | Full access to the Lunch Money APIs available for that budgeting account, with no fine-grained permission controls | Only the permissions selected when the OAuth client was registered |
|
|
16
16
|
| Lifecycle | Created and revoked by the user | Short-lived access tokens and optional finite refresh access; the user can revoke the application's access |
|
|
17
17
|
|
|
18
18
|
Personal access tokens remain useful for quick work on your own account. OAuth is the recommended model for applications and integrations that other Lunch Money users will connect to, as well as automations that need to run over time.
|
|
19
19
|
|
|
20
20
|
## What limits access
|
|
21
21
|
|
|
22
|
-
When a developer
|
|
22
|
+
An OAuth client is an application's registration with Lunch Money. When a developer registers the client, they select the scopes—the specific permissions—the application needs. Later, when a Lunch Money user authorizes the application, Lunch Money shows them that complete permission set before they approve access. Choose only the permissions the application's features require. A focused permission request is easier for users to understand and trust, and reduces the risk of the application reading or changing data it does not need.
|
|
23
23
|
|
|
24
24
|
## Before you start
|
|
25
25
|
|
|
26
|
-
You need an active Lunch Money account to [register and manage an OAuth
|
|
26
|
+
You need an active Lunch Money account to [register and manage an OAuth client](/oauth/applications) for your application. During development, only the client owner can authorize the application. Approval is required before other Lunch Money users can authorize it.
|
|
27
27
|
|
|
28
28
|
Start with [OAuth concepts](/oauth/concepts), [register a client](/oauth/register-client), and then [implement the authorization-code flow](/oauth/authorization-code). Use the [scope catalog](/oauth/scopes) to plan permissions and [troubleshooting](/oauth/troubleshooting) when a flow fails.
|
|
@@ -13,9 +13,9 @@ Use Lunch Money's authorization-server discovery document and configure `token_e
|
|
|
13
13
|
|
|
14
14
|
## Redirects
|
|
15
15
|
|
|
16
|
-
Use a redirect mechanism that returns control to your app and that your platform can bind to it. Claimed Universal Links or Android App Links provide stronger app ownership than a custom URI scheme when correctly configured.
|
|
16
|
+
Use a redirect mechanism that returns control to your app and that your platform can bind to it. Claimed Universal Links or Android App Links provide stronger app ownership than a custom URI scheme when correctly configured. A private-use scheme must contain a dot, such as `app.example.demo:/oauth/callback`, and must be protected against interception.
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Native clients may use an HTTP loopback redirect with `localhost`, `127.0.0.1`, or `[::1]`. The scheme, host, path, and query string must exactly match the registered URI, but the port may differ so the application can bind an ephemeral port at runtime. The exception applies only to loopback redirects for native clients; native HTTPS and private-use scheme redirects must match every component of the registered URI exactly.
|
|
19
19
|
|
|
20
20
|
## Store and renew tokens
|
|
21
21
|
|
|
@@ -45,9 +45,9 @@ This proposal makes these additional decisions:
|
|
|
45
45
|
- Map non-CRUD mutations by effect: Plaid and synced-crypto refresh operations
|
|
46
46
|
use `:update`; transaction split/group and their reversals use
|
|
47
47
|
`transactions:update`; balance-history and budget upserts use `:update`.
|
|
48
|
-
-
|
|
49
|
-
|
|
50
|
-
files.
|
|
48
|
+
- Keep attachment metadata and download access behind
|
|
49
|
+
`transaction_attachments:read`. The other `transaction_attachments:*` scopes
|
|
50
|
+
separately authorize attaching or deleting files.
|
|
51
51
|
|
|
52
52
|
## Package direction
|
|
53
53
|
|
|
@@ -28,17 +28,18 @@ The client type cannot be changed after registration. See [OAuth concepts](/oaut
|
|
|
28
28
|
|
|
29
29
|
A redirect URI tells Lunch Money where to return the user after authorization. Register every callback address your application will use. Confidential web clients must match every component of a registered URI, including its scheme, host, port, path, and query string. Native-client loopback redirects use the same exact matching except that the ephemeral port is ignored.
|
|
30
30
|
|
|
31
|
-
Web applications normally use an HTTPS callback. If you need a callback for local development, review the [loopback guidance](/oauth/development#local-loopback-callbacks) before registering one. Mobile and desktop applications may use
|
|
31
|
+
Web applications normally use an HTTPS callback. If you need a callback for local development, review the [loopback guidance](/oauth/development#local-loopback-callbacks) before registering one. Mobile and desktop applications may use a private-use scheme containing a dot, such as `app.example.demo:/oauth/callback`, or a verified HTTPS link accepted by the Developer Portal.
|
|
32
32
|
|
|
33
33
|
## Register the OAuth client
|
|
34
34
|
|
|
35
35
|
Open the [new OAuth client form](/oauth/applications/new) in the Developer Portal. Then:
|
|
36
36
|
|
|
37
37
|
1. Describe the application so Lunch Money users can understand who built it and what it does.
|
|
38
|
-
2.
|
|
39
|
-
3.
|
|
40
|
-
4.
|
|
41
|
-
5.
|
|
38
|
+
2. Provide a monitored support email where users can reach you if authorization fails.
|
|
39
|
+
3. Choose its client type.
|
|
40
|
+
4. Add at least one redirect URI.
|
|
41
|
+
5. Select the planned scopes.
|
|
42
|
+
6. Accept the current Lunch Money API Terms of Use and select **Register OAuth client**.
|
|
42
43
|
|
|
43
44
|
After registration, record the client ID in your application configuration. A client ID identifies the registration but is not a secret.
|
|
44
45
|
|
|
@@ -18,23 +18,35 @@ Deleted clients disappear from the owner's Developer Portal.
|
|
|
18
18
|
|
|
19
19
|
## Prepare for review
|
|
20
20
|
|
|
21
|
-
Submitting a client for review is how you make your application authorizable by Lunch Money users other than yourself.
|
|
21
|
+
Submitting a client for review is how you make your application authorizable by Lunch Money users other than yourself. Registration already requires basic information, including a support email, but review requires a complete, user-facing application profile and production-ready configuration.
|
|
22
22
|
|
|
23
|
-
Before requesting review,
|
|
23
|
+
Before requesting review, make sure the client has:
|
|
24
24
|
|
|
25
25
|
- an application description, developer name, and logo so users can identify the application and who created it;
|
|
26
26
|
- a monitored support email where users and Lunch Money can reach you;
|
|
27
27
|
- a publicly accessible homepage URL where users can learn about the application;
|
|
28
28
|
- a publicly accessible privacy policy URL explaining how the application handles user data;
|
|
29
|
-
- at least one eligible production HTTPS redirect
|
|
29
|
+
- at least one eligible redirect URI—a confidential web client needs a non-loopback production HTTPS redirect, while a native client may use a private-use scheme or loopback redirect;
|
|
30
30
|
- a recognized, supported scope set and an explanation of why the application needs each permission; and
|
|
31
31
|
- acceptance of the current Lunch Money API Terms of Use.
|
|
32
32
|
|
|
33
|
+
The privacy policy must be available at a direct, stable public URL and explain how the application collects, uses, stores, shares, and deletes user data. A published privacy-policy page in a public source-code repository can satisfy this requirement. An in-app page that requires installation or sign-in, or a link to source code without a clear privacy policy, does not.
|
|
34
|
+
|
|
33
35
|
Fully test the client before submission. A confidential web client also needs at least one active, non-expired secret; a native or public client does not.
|
|
34
36
|
|
|
35
37
|
Explain which features use each requested permission, how that access benefits users, and why narrower scopes are insufficient. If the client includes `offline_access`, explain why the integration must operate while the user is absent. You may also provide documentation, source-code, and demonstration URLs or context about changes made after earlier feedback.
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
Open-source applications are welcome. If your source code is public, include the repository URL in the review request's additional context. It can help the reviewer understand how your application uses Lunch Money data and the permissions it requests. Publishing source code is optional and is not required for approval.
|
|
40
|
+
|
|
41
|
+
A confidential web client may retain owner-only loopback callbacks alongside its production HTTPS callback, but it still needs a non-loopback production HTTPS redirect before review.
|
|
42
|
+
|
|
43
|
+
### Native applications
|
|
44
|
+
|
|
45
|
+
You do not need to create a standalone marketing website for a native application. Its public Apple App Store or Google Play listing can serve as the homepage if it clearly explains what the application does and identifies the developer. A public pre-release listing, project page, or README in a public source-code repository can also work.
|
|
46
|
+
|
|
47
|
+
If you provide a pre-release listing or beta-testing link, use the review request's additional context to explain how to access it. Include any required opt-in steps, supported platforms or devices, and other information the reviewer needs to evaluate the application. Do not include passwords, client secrets, tokens, or other credentials.
|
|
48
|
+
|
|
49
|
+
Native clients may be reviewed with loopback or private-use scheme redirects.
|
|
38
50
|
|
|
39
51
|
## Submit, cancel, or revise
|
|
40
52
|
|
package/docs/oauth/scopes.md
CHANGED
|
@@ -71,11 +71,11 @@ View and manage all supported Lunch Money data
|
|
|
71
71
|
| <a id="scope-manual-accounts-delete"></a>`manual_accounts:delete` | Delete manually managed accounts | `deleteManualAccount` |
|
|
72
72
|
| <a id="scope-plaid-accounts-read"></a>`plaid_accounts:read` | View accounts connected through Plaid | `getAllPlaidAccounts`, `getPlaidAccountById` |
|
|
73
73
|
| <a id="scope-plaid-accounts-update"></a>`plaid_accounts:update` | Request a Plaid account refresh, which may import new transactions | `triggerPlaidAccountFetch` |
|
|
74
|
-
| <a id="scope-transactions-read"></a>`transactions:read` | View transactions, including split and group information
|
|
74
|
+
| <a id="scope-transactions-read"></a>`transactions:read` | View transactions, including split and group information | `getAllTransactions`, `getTransactionById` |
|
|
75
75
|
| <a id="scope-transactions-create"></a>`transactions:create` | Create transactions | `createNewTransactions` |
|
|
76
76
|
| <a id="scope-transactions-update"></a>`transactions:update` | Update, split, unsplit, group, and ungroup transactions | `updateTransactions`, `updateTransaction`, `groupTransactions`, `ungroupTransactions`, `splitTransaction`, `unsplitTransaction` |
|
|
77
77
|
| <a id="scope-transactions-delete"></a>`transactions:delete` | Delete transactions | `deleteTransactions`, `deleteTransactionById` |
|
|
78
|
-
| <a id="scope-transaction-attachments-read"></a>`transaction_attachments:read` |
|
|
78
|
+
| <a id="scope-transaction-attachments-read"></a>`transaction_attachments:read` | View transaction attachment metadata and get download access to attachments | `getTransactionAttachmentUrl` |
|
|
79
79
|
| <a id="scope-transaction-attachments-create"></a>`transaction_attachments:create` | Attach files to transactions | `attachFileToTransaction` |
|
|
80
80
|
| <a id="scope-transaction-attachments-delete"></a>`transaction_attachments:delete` | Delete transaction attachments | `deleteTransactionAttachment` |
|
|
81
81
|
| <a id="scope-tags-read"></a>`tags:read` | View tags | `getAllTags`, `getTagById` |
|
|
@@ -29,11 +29,24 @@ Match on `error` when it is returned, verify `state`, and treat `error_descripti
|
|
|
29
29
|
| `invalid_scope` | The client does not have a usable registered scope set | Open the client in the [Developer Portal](/oauth/applications) and review its assigned scopes. Registered clients always use that complete set. |
|
|
30
30
|
| `access_denied` | The user declined or the application is unavailable to that user | Treat denial normally. During development, only the owner may authorize; other users require an active approved application. |
|
|
31
31
|
|
|
32
|
-
###
|
|
32
|
+
### Users cannot authorize an unapproved client
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Until a client is approved, only its owner may authorize the application. Anyone else is stopped at the consent screen and is never returned to your application, so you will see no callback and no `error` parameter for these attempts.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Those users are shown the support email registered with your client so they can reach you. If you did not expect authorization to be unavailable, check the client in the [Developer Portal](/oauth/applications). A client stays in development until it is submitted for review and approved. A rejected or disabled client also prevents other users from authorizing the application.
|
|
37
|
+
|
|
38
|
+
### Redirect URI problems
|
|
39
|
+
|
|
40
|
+
If the callback address cannot be matched to one registered for the client, Lunch Money cannot safely return the browser to your application. It stops locally and shows the user a page explaining what happened, rather than redirecting with an `error`. Your application receives no callback for these attempts.
|
|
41
|
+
|
|
42
|
+
The page displays one of two codes, a UTC timestamp, and the application name and public client ID once the client has been resolved.
|
|
43
|
+
|
|
44
|
+
| Code | Likely cause | What to do |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| `redirect_uri_mismatch` | The address your application sent is not registered for the client, or differs from a registered one | Open the client in the [Developer Portal](/oauth/applications) and compare the address with its registered redirect URIs. Web-client redirects and native HTTPS or private-use scheme redirects must match every component exactly. For a native HTTP loopback redirect, the scheme, host, path, and query string must match, but the ephemeral port may differ. See [local callback failures](#local-callback-failures). |
|
|
47
|
+
| `redirect_uri_missing` | No `redirect_uri` was sent, and the client has more than one registered, so Lunch Money cannot choose | Send the parameter explicitly. A client with exactly one registered address may omit it; Lunch Money then uses the registered value. |
|
|
48
|
+
|
|
49
|
+
The page offers the user a prefilled message addressed to the support email registered with your client. It contains the error code, the timestamp, the application name and client ID, and the callback address your application sent, reduced to its origin and path with any query string removed. Compare that sanitized callback address with the redirect URIs registered for the client, then correct either the registered URI or the address your application sends.
|
|
37
50
|
|
|
38
51
|
## Callback validation failures
|
|
39
52
|
|
package/package.json
CHANGED
package/v2/docs/intro-to-v2.md
CHANGED
|
@@ -10,7 +10,7 @@ All API requests require a Bearer token in the `Authorization` header:
|
|
|
10
10
|
Authorization: Bearer YOUR_ACCESS_TOKEN
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Use a personal access token for API exploration or work with your own budgeting account. The [Getting started guide](/getting-started) walks through creating one on the <a href="https://my.lunchmoney.app/developers" target="_blank" rel="noopener noreferrer">Lunch Money Developers page</a> and making your first request. Applications built for other Lunch Money users should use an [OAuth access token issued after the user authorizes the application](/oauth).
|
|
14
14
|
|
|
15
15
|
## Base URL
|
|
16
16
|
|
|
@@ -5,9 +5,12 @@ The Lunch Money API spec uses a modified version of SEMVER for its versioning me
|
|
|
5
5
|
- The minor version represents the number of main endpoints the current version of the spec supports. For example, a version of the API that supports the /me, /categories, and /transactions endpoints would have a minor version of 3.
|
|
6
6
|
- The revision number represents the number of updates since the last endpoint was added. For example, each time changes are made to one of the existing three APIs as described above, the revision number will be bumped.
|
|
7
7
|
|
|
8
|
+
## v2.11.2 - TBD
|
|
9
|
+
- Add OAuth 2.0 bearer-token authentication to the v2 API, allowing applications to access Lunch Money on behalf of users who authorize them
|
|
10
|
+
- Enforce required OAuth scopes for every v2 operation and publish the scope and scope-group catalog mapped to V2 `operationId` values
|
|
11
|
+
- Document the OAuth 2.0 authorization-code flow used to obtain access tokens
|
|
12
|
+
|
|
8
13
|
## v2.11.1 - TBD
|
|
9
|
-
- Add the OAuth scope and scope-group catalog mapped to V2 `operationId` values
|
|
10
|
-
- Document OAuth 2.0 authorization-code endpoints and required OAuth scopes for every V2 operation
|
|
11
14
|
- Add `GET /me/account/settings` and `PUT /me/account/settings` for account-level settings
|
|
12
15
|
- Add `GET /me/user/settings` and `PUT /me/user/settings` for user-level display and formatting preferences
|
|
13
16
|
- Add `GET /me/user/account/settings` and `PUT /me/user/account/settings` for settings specific to a user and budgeting account
|
|
@@ -4,9 +4,9 @@ info:
|
|
|
4
4
|
description: |-
|
|
5
5
|
### Introduction
|
|
6
6
|
|
|
7
|
-
Welcome to the Lunch Money v2 API reference. This is the **v2.11.
|
|
7
|
+
Welcome to the Lunch Money v2 API reference. This is the **v2.11.2** spec.
|
|
8
8
|
|
|
9
|
-
The API is available at `https://api.lunchmoney.dev/v2`.
|
|
9
|
+
The API is available at `https://api.lunchmoney.dev/v2`. Use a personal access token from the [Lunch Money Developers page](https://my.lunchmoney.app/developers) for API exploration or work with your own budgeting account. Applications built for other Lunch Money users should use an [OAuth access token issued after the user authorizes the application](https://lunchmoney.dev/oauth).
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
**Try it from these docs**
|
|
@@ -2712,8 +2712,11 @@ components:
|
|
|
2712
2712
|
type: array
|
|
2713
2713
|
nullable: false
|
|
2714
2714
|
description: A list of objects that describe any attachments to the
|
|
2715
|
-
transaction.
|
|
2716
|
-
|
|
2715
|
+
transaction. For OAuth clients, this property is available only
|
|
2716
|
+
with the `transaction_attachments:read` scope. Without that scope,
|
|
2717
|
+
an absent `files` property does not mean the transaction has no
|
|
2718
|
+
attachments. See the operation description for its attachment
|
|
2719
|
+
behavior.
|
|
2717
2720
|
items:
|
|
2718
2721
|
$ref: "#/components/schemas/transactionAttachmentObject"
|
|
2719
2722
|
source:
|
|
@@ -3008,7 +3011,10 @@ components:
|
|
|
3008
3011
|
type: array
|
|
3009
3012
|
nullable: false
|
|
3010
3013
|
description: A list of objects that describe any attachments to the
|
|
3011
|
-
transaction
|
|
3014
|
+
transaction. OAuth clients also need the
|
|
3015
|
+
`transaction_attachments:read` scope. Without it, this property is
|
|
3016
|
+
omitted rather than returned as an empty array, so an absent
|
|
3017
|
+
`files` property does not mean the transaction has no attachments.
|
|
3012
3018
|
items:
|
|
3013
3019
|
$ref: "#/components/schemas/transactionAttachmentObject"
|
|
3014
3020
|
required:
|
|
@@ -5136,11 +5142,11 @@ components:
|
|
|
5136
5142
|
manual_accounts:delete: "Delete manually managed accounts"
|
|
5137
5143
|
plaid_accounts:read: "View accounts connected through Plaid"
|
|
5138
5144
|
plaid_accounts:update: "Request a Plaid account refresh, which may import new transactions"
|
|
5139
|
-
transactions:read: "View transactions, including split and group information
|
|
5145
|
+
transactions:read: "View transactions, including split and group information"
|
|
5140
5146
|
transactions:create: "Create transactions"
|
|
5141
5147
|
transactions:update: "Update, split, unsplit, group, and ungroup transactions"
|
|
5142
5148
|
transactions:delete: "Delete transactions"
|
|
5143
|
-
transaction_attachments:read: "
|
|
5149
|
+
transaction_attachments:read: "View transaction attachment metadata and get download access to attachments"
|
|
5144
5150
|
transaction_attachments:create: "Attach files to transactions"
|
|
5145
5151
|
transaction_attachments:delete: "Delete transaction attachments"
|
|
5146
5152
|
tags:read: "View tags"
|
|
@@ -9667,6 +9673,9 @@ paths:
|
|
|
9667
9673
|
description: By default, the `files` property is not included in the
|
|
9668
9674
|
response. Set to true if you'd like the responses to include a list
|
|
9669
9675
|
of objects that describe any files attached to the transactions.
|
|
9676
|
+
OAuth clients must have both `transactions:read` and
|
|
9677
|
+
`transaction_attachments:read`; otherwise the request returns a
|
|
9678
|
+
`403` `insufficient_scope` error.
|
|
9670
9679
|
- name: limit
|
|
9671
9680
|
in: query
|
|
9672
9681
|
schema:
|
|
@@ -9950,7 +9959,10 @@ paths:
|
|
|
9950
9959
|
successfully inserted.<br>
|
|
9951
9960
|
- `skipped_duplicates`: A list of
|
|
9952
9961
|
transactions that were duplicates of existing transactions and were not
|
|
9953
|
-
inserted
|
|
9962
|
+
inserted.<p>
|
|
9963
|
+
|
|
9964
|
+
For OAuth clients, returned transactions include the `files` property
|
|
9965
|
+
only when the client has the `transaction_attachments:read` scope.
|
|
9954
9966
|
operationId: createNewTransactions
|
|
9955
9967
|
security:
|
|
9956
9968
|
- bearerSecurity: []
|
|
@@ -10394,7 +10406,10 @@ paths:
|
|
|
10394
10406
|
|
|
10395
10407
|
Each transaction in the array **must** include an `id` property to identify which transaction to update, along with at least one other property to be updated. For example, a transaction object that contains only an `id` and `category_id` property is valid.<br><br>
|
|
10396
10408
|
|
|
10397
|
-
The request can include between 1 and 500 transactions to update in a single call
|
|
10409
|
+
The request can include between 1 and 500 transactions to update in a single call.<br><br>
|
|
10410
|
+
|
|
10411
|
+
For OAuth clients, returned transactions include the `files` property
|
|
10412
|
+
only when the client has the `transaction_attachments:read` scope.
|
|
10398
10413
|
operationId: updateTransactions
|
|
10399
10414
|
security:
|
|
10400
10415
|
- bearerSecurity: []
|
|
@@ -10877,7 +10892,8 @@ paths:
|
|
|
10877
10892
|
added to transactions that were inserted or updated via the API.
|
|
10878
10893
|
|
|
10879
10894
|
- `files` will be a list of objects that describe any attachments to the
|
|
10880
|
-
transaction.
|
|
10895
|
+
transaction. For OAuth clients, this property is included only when the
|
|
10896
|
+
client has the `transaction_attachments:read` scope.
|
|
10881
10897
|
|
|
10882
10898
|
|
|
10883
10899
|
If `is_group_parent` is true in the returned transaction, the object will also
|
|
@@ -11132,7 +11148,11 @@ paths:
|
|
|
11132
11148
|
It is also possible to provide only the properties to be updated in the
|
|
11133
11149
|
request body, as long as the request includes at least one of the
|
|
11134
11150
|
properties that is not listed above. For example a request body that contains only
|
|
11135
|
-
an `category_id` attribute is valid
|
|
11151
|
+
an `category_id` attribute is valid.<br><br>
|
|
11152
|
+
|
|
11153
|
+
For OAuth clients, the returned transaction includes the `files`
|
|
11154
|
+
property only when the client has the
|
|
11155
|
+
`transaction_attachments:read` scope.
|
|
11136
11156
|
|
|
11137
11157
|
operationId: updateTransaction
|
|
11138
11158
|
security:
|
|
@@ -11348,7 +11368,11 @@ paths:
|
|
|
11348
11368
|
transaction. The grouped transactions will
|
|
11349
11369
|
|
|
11350
11370
|
be included in the `children` property of the transaction returned in
|
|
11351
|
-
the response
|
|
11371
|
+
the response.<br><br>
|
|
11372
|
+
|
|
11373
|
+
For OAuth clients, the returned group and its children include the
|
|
11374
|
+
`files` property only when the client has the
|
|
11375
|
+
`transaction_attachments:read` scope.
|
|
11352
11376
|
operationId: groupTransactions
|
|
11353
11377
|
security:
|
|
11354
11378
|
- bearerSecurity: []
|
|
@@ -11701,7 +11725,11 @@ paths:
|
|
|
11701
11725
|
|
|
11702
11726
|
To see the details of the original parent transaction after it has been
|
|
11703
11727
|
split, use the `GET /transactions/{id}` endpoint and pass the value of
|
|
11704
|
-
the `split_parent_id` of one of the children
|
|
11728
|
+
the `split_parent_id` of one of the children.<br><br>
|
|
11729
|
+
|
|
11730
|
+
For OAuth clients, the returned parent and its children include the
|
|
11731
|
+
`files` property only when the client has the
|
|
11732
|
+
`transaction_attachments:read` scope.
|
|
11705
11733
|
operationId: splitTransaction
|
|
11706
11734
|
security:
|
|
11707
11735
|
- bearerSecurity: []
|