Wave accounting operations for Lyra Designs. Use this skill when the user asks to query invoices, transactions, customers, accounts, or any Wave accounting data. Also use when asked to create invoices, record transactions, or manage Wave financial records.
Access Wave accounting data via the Wave GraphQL API. Covers invoices, transactions, customers, accounts, and financial reports for Lyra Designs.
API endpoint: https://gql.waveapps.com/graphql/public
Auth: WAVE_TOKEN env var — Bearer token in Authorization header
Lyra business ID: QnVzaW5lc3M6MWZjNmRlYzctM2VhMS00YjQyLTg2OTYtNGRjYWM4MjhkMDlh
Token: Get a full-access token from Wave Developer Portal → Applications → Full Access Token.
Add to shell profile (~/.zprofile or ~/.zshrc):
export WAVE_TOKEN="your_token_here"
As of May 2025, OAuth access for third-party apps requires a Wave Pro subscription. For personal/internal use, the full-access token approach is sufficient and does not require Pro.
All requests are POST to the GraphQL endpoint:
curl -s -X POST "https://gql.waveapps.com/graphql/public" \
-H "Authorization: Bearer ${WAVE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query": "...", "variables": {}}'
Always use ${WAVE_TOKEN} — loaded automatically from the shell profile.
query {
user { id defaultEmail }
businesses(page: 1, pageSize: 10) {
edges { node { id name currency { code } } }
}
}
query($businessId: ID!) {
business(id: $businessId) {
customers(page: 1, pageSize: 50) {
edges { node { id name email } }
}
}
}
query($businessId: ID!, $page: Int!) {
business(id: $businessId) {
invoices(page: $page, pageSize: 50) {
edges {
node {
id
invoiceNumber
title
status
invoiceDate
dueDate
amountDue { value currency { code } }
amountPaid { value }
customer { name email }
}
}
}
}
}
query($businessId: ID!) {
business(id: $businessId) {
transactions(
page: 1
pageSize: 100
filters: { startDate: "2026-02-01", endDate: "2026-02-28" }
) {
edges {
node {
id
date
description
amount
account { name }
}
}
}
}
}
query($businessId: ID!) {
business(id: $businessId) {
accounts(page: 1, pageSize: 100) {
edges { node { id name type { value } subtype { value } } }
}
}
}
mutation($input: InvoiceCreateInput!) {
invoiceCreate(input: $input) {
didSucceed
inputErrors { message path code }
invoice { id invoiceNumber status }
}
}
mutation($input: InvoiceSendInput!) {
invoiceSend(input: $input) {
didSucceed
inputErrors { message path code }
}
}
mutation($input: MoneyTransactionCreateInput!) {
moneyTransactionCreate(input: $input) {
didSucceed
inputErrors { message path code }
transaction { id description amount }
}
}
customerCreate — create new customercustomerPatch — update existing customercustomerDelete — remove customerBusiness type does not expose a transactions field. Bank/payment transactions cannot be fetched via the public API.moneyTransactionCreate is BETA — only works if isClassicAccounting is false for the business, and does not link to invoices.businesses to confirm business IDinvoices filtered by status: UNPAIDinvoices for the month, filter by status: PAIDamountPaid by customeraccounts to find the correct account IDsmoneyTransactionCreate mutation