{"files":{"SKILL.md":"---\nname: up-api\ndescription: \"Up API skill. Use when working with Up for accounts, attachments, categories. Covers 20 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Up API\nAPI version: v1\n\n## Auth\nBearer bearer\n\n## Base URL\nhttps://api.up.com.au/api/v1\n\n## Setup\n1. Set Authorization header with Bearer token\n2. GET /accounts -- list accounts\n3. POST /transactions/{transactionId}/relationships/tags -- create first tag\n\n## Endpoints\n20 endpoints across 7 groups. See references/api-spec.lap for full details.\n\n### Accounts\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /accounts | List accounts |\n| GET | /accounts/{id} | Retrieve account |\n| GET | /accounts/{accountId}/transactions | List transactions by account |\n\n### Attachments\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /attachments | List attachments |\n| GET | /attachments/{id} | Retrieve attachment |\n\n### Categories\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /categories | List categories |\n| GET | /categories/{id} | Retrieve category |\n\n### Transactions\n| Method | Path | Description |\n|--------|------|-------------|\n| PATCH | /transactions/{transactionId}/relationships/category | Categorize transaction |\n| POST | /transactions/{transactionId}/relationships/tags | Add tags to transaction |\n| DELETE | /transactions/{transactionId}/relationships/tags | Remove tags from transaction |\n| GET | /transactions | List transactions |\n| GET | /transactions/{id} | Retrieve transaction |\n\n### Util\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /util/ping | Ping |\n\n### Tags\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /tags | List tags |\n\n### Webhooks\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /webhooks | List webhooks |\n| POST | /webhooks | Create webhook |\n| GET | /webhooks/{id} | Retrieve webhook |\n| DELETE | /webhooks/{id} | Delete webhook |\n| POST | /webhooks/{webhookId}/ping | Ping webhook |\n| GET | /webhooks/{webhookId}/logs | List webhook logs |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all accounts?\" -> GET /accounts\n- \"Get account details?\" -> GET /accounts/{id}\n- \"List all attachments?\" -> GET /attachments\n- \"Get attachment details?\" -> GET /attachments/{id}\n- \"List all categories?\" -> GET /categories\n- \"Get category details?\" -> GET /categories/{id}\n- \"List all ping?\" -> GET /util/ping\n- \"List all tags?\" -> GET /tags\n- \"Create a tag?\" -> POST /transactions/{transactionId}/relationships/tags\n- \"List all transactions?\" -> GET /transactions\n- \"Get transaction details?\" -> GET /transactions/{id}\n- \"List all webhooks?\" -> GET /webhooks\n- \"Create a webhook?\" -> POST /webhooks\n- \"Get webhook details?\" -> GET /webhooks/{id}\n- \"Delete a webhook?\" -> DELETE /webhooks/{id}\n- \"Create a ping?\" -> POST /webhooks/{webhookId}/ping\n- \"List all logs?\" -> GET /webhooks/{webhookId}/logs\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Up API\n@base https://api.up.com.au/api/v1\n@version v1\n@auth Bearer bearer\n@endpoints 20\n@toc accounts(3), attachments(2), categories(2), transactions(5), util(1), tags(1), webhooks(6)\n\n@group accounts\n@endpoint GET /accounts\n@desc List accounts\n@optional {page[size]: int: any # The number of records to return in each page., filter[accountType]: any # The type of account for which to return records. This can be used to filter Savers from spending accounts., filter[ownershipType]: any # The account ownership structure for which to return records. This can be used to filter 2Up accounts from Up accounts.}\n@returns(200) {data: [map], links: map{prev: str?, next: str?}} # Successful Response\n\n@endpoint GET /accounts/{id}\n@desc Retrieve account\n@required {id: str # The unique identifier for the account.}\n@returns(200) {data: any} # Successful Response\n\n@endgroup\n\n@group attachments\n@endpoint GET /attachments\n@desc List attachments\n@returns(200) {data: [map], links: map{prev: str?, next: str?}} # Successful Response\n\n@endpoint GET /attachments/{id}\n@desc Retrieve attachment\n@required {id: str # The unique identifier for the attachment.}\n@returns(200) {data: any} # Successful Response\n\n@endgroup\n\n@group categories\n@endpoint GET /categories\n@desc List categories\n@optional {filter[parent]: str: any # The unique identifier of a parent category for which to return only its children. Providing an invalid category identifier results in a `404` response.}\n@returns(200) {data: [map]} # Successful Response\n\n@endpoint GET /categories/{id}\n@desc Retrieve category\n@required {id: str # The unique identifier for the category.}\n@returns(200) {data: any} # Successful Response\n\n@endgroup\n\n@group transactions\n@endpoint PATCH /transactions/{transactionId}/relationships/category\n@desc Categorize transaction\n@required {transactionId: str # The unique identifier for the transaction., data: any # The category to set on the transaction. Set this entire key to `null` de-categorize a transaction.}\n@returns(204) Successful Response\n\n@endgroup\n\n@group util\n@endpoint GET /util/ping\n@desc Ping\n@returns(200) {meta: map{id: str, statusEmoji: str}} # Successful Response\n@errors {401: Not Authorized}\n\n@endgroup\n\n@group tags\n@endpoint GET /tags\n@desc List tags\n@optional {page[size]: int: any # The number of records to return in each page.}\n@returns(200) {data: [map], links: map{prev: str?, next: str?}} # Successful Response\n\n@endgroup\n\n@group transactions\n@endpoint POST /transactions/{transactionId}/relationships/tags\n@desc Add tags to transaction\n@required {transactionId: str # The unique identifier for the transaction., data: [map{type!: str, id!: str}] # The tags to add to or remove from the transaction.}\n@returns(204) Successful Response\n\n@endpoint DELETE /transactions/{transactionId}/relationships/tags\n@desc Remove tags from transaction\n@required {transactionId: str # The unique identifier for the transaction., data: [map{type!: str, id!: str}] # The tags to add to or remove from the transaction.}\n@returns(204) Successful Response\n\n@endpoint GET /transactions\n@desc List transactions\n@optional {page[size]: int: any # The number of records to return in each page., filter[status]: any # The transaction status for which to return records. This can be used to filter `HELD` transactions from those that are `SETTLED`., filter[since]: str(date-time) # The start date-time from which to return records, formatted according to rfc-3339. Not to be used for pagination purposes., filter[until]: str(date-time) # The end date-time up to which to return records, formatted according to rfc-3339. Not to be used for pagination purposes., filter[category]: str # The category identifier for which to filter transactions. Both parent and child categories can be filtered through this parameter. Providing an invalid category identifier results in a `404` response., filter[tag]: str # A transaction tag to filter for which to return records. If the tag does not exist, zero records are returned and a success response is given.}\n@returns(200) {data: [map], links: map{prev: str?, next: str?}} # Successful Response\n\n@endpoint GET /transactions/{id}\n@desc Retrieve transaction\n@required {id: str # The unique identifier for the transaction.}\n@returns(200) {data: any} # Successful Response\n\n@endgroup\n\n@group accounts\n@endpoint GET /accounts/{accountId}/transactions\n@desc List transactions by account\n@required {accountId: str # The unique identifier for the account.}\n@optional {page[size]: int: any # The number of records to return in each page., filter[status]: any # The transaction status for which to return records. This can be used to filter `HELD` transactions from those that are `SETTLED`., filter[since]: str(date-time) # The start date-time from which to return records, formatted according to rfc-3339. Not to be used for pagination purposes., filter[until]: str(date-time) # The end date-time up to which to return records, formatted according to rfc-3339. Not to be used for pagination purposes., filter[category]: str # The category identifier for which to filter transactions. Both parent and child categories can be filtered through this parameter. Providing an invalid category identifier results in a `404` response., filter[tag]: str # A transaction tag to filter for which to return records. If the tag does not exist, zero records are returned and a success response is given.}\n@returns(200) {data: [map], links: map{prev: str?, next: str?}} # Successful Response\n\n@endgroup\n\n@group webhooks\n@endpoint GET /webhooks\n@desc List webhooks\n@optional {page[size]: int: any # The number of records to return in each page.}\n@returns(200) {data: [map], links: map{prev: str?, next: str?}} # Successful Response\n\n@endpoint POST /webhooks\n@desc Create webhook\n@required {data: any # The webhook resource to create.}\n@returns(201) {data: any} # Created\n\n@endpoint GET /webhooks/{id}\n@desc Retrieve webhook\n@required {id: str # The unique identifier for the webhook.}\n@returns(200) {data: any} # Successful Response\n\n@endpoint DELETE /webhooks/{id}\n@desc Delete webhook\n@required {id: str # The unique identifier for the webhook.}\n@returns(204) Deleted\n\n@endpoint POST /webhooks/{webhookId}/ping\n@desc Ping webhook\n@required {webhookId: str # The unique identifier for the webhook.}\n@returns(201) {data: any} # Successful response\n\n@endpoint GET /webhooks/{webhookId}/logs\n@desc List webhook logs\n@required {webhookId: str # The unique identifier for the webhook.}\n@optional {page[size]: int: any # The number of records to return in each page.}\n@returns(200) {data: [map], links: map{prev: str?, next: str?}} # Successful response\n\n@endgroup\n\n@end\n"}}