openapi: 3.0.1
info:
title: Smokeball Activity Codes Invoices API
version: '1.0'
description: REST API for integrating with Smokeball legal practice management software. Supports matters, contacts, documents, time entries, billing, trust accounting, staff, webhooks, and law firm workflows across US, AU, and UK regions. Uses OAuth 2.0 (client credentials) authentication.
contact:
name: Smokeball Developer Support
url: https://docs.smokeball.com/docs/api-docs/1e13a13124aee-introduction
x-api-id: smokeball
x-audience: external-public
servers:
- url: https://api.smokeball.com
- url: https://api.smokeball.com.au
- url: https://api.smokeball.co.uk
- url: https://stagingapi.smokeball.com
- url: https://stagingapi.smokeball.com.au
- url: https://stagingapi.smokeball.co.uk
security:
- api-key: []
token: []
tags:
- name: Invoices
paths:
/matters/{matterId}/invoices:
get:
tags:
- Invoices
summary: Get invoices
description: Returns a list of invoices for the specified matter.
operationId: GetInvoices
parameters:
- name: matterId
in: path
description: The unique identifier of the matter that the invoice belongs to.
required: true
schema:
type: string
- name: LastUpdated
in: query
description: Returns items updated since the specified date and time.
schema:
type: string
format: date-time
example: '2022-04-23T14:00:00Z'
example: '2022-04-23T14:00:00Z'
- name: UpdatedSince
in: query
description: Returns items updated since a specified time (.net ticks representation of the UTC datetime).
schema:
type: integer
format: int64
- name: Offset
in: query
schema:
maximum: 2147483647
minimum: 0
type: integer
format: int32
- name: Limit
in: query
schema:
maximum: 500
minimum: 1
type: integer
format: int32
responses:
'200':
description: When request is successful. Returns a paged collection of 'Invoice' objects.
content:
application/json:
schema:
$ref: '#/components/schemas/InvoicePagedCollection'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
/matters/{matterId}/invoices/{invoiceId}:
get:
tags:
- Invoices
summary: Get an invoice
description: Retrieves a specified invoice.
operationId: GetInvoiceById
parameters:
- name: matterId
in: path
required: true
schema:
type: string
- name: invoiceId
in: path
required: true
schema:
type: string
responses:
'200':
description: When request is successful. Returns a 'Invoice' object.
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'403':
description: When invoice with specified id is not associated with authenticated client or matter.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
/matters/{matterId}/invoices/{invoiceId}/download:
get:
tags:
- Invoices
summary: Get download url for an invoice
description: Retrieves download details for a specified invoice.
operationId: DownloadInvoiceFile
parameters:
- name: matterId
in: path
required: true
schema:
type: string
- name: invoiceId
in: path
required: true
schema:
type: string
responses:
'200':
description: When request is successful. Returns an 'InvoiceFileInfo' object.
content:
application/json:
schema:
$ref: '#/components/schemas/InvoiceFileInfo'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'403':
description: When the requested file does not belong to the account making the request.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'404':
description: When invoice with the specified id does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
components:
schemas:
InvoiceStatus:
enum:
- 0
- 1
- 2
- 3
- 4
type: integer
description: "The status of the invoice.\r\n\r\nPossible values: Draft = 0, Final = 1, Paid = 2, Deleted = 3 or Void = 4."
format: int32
InvoicedMatterEntryItem:
type: object
properties:
id:
type: string
nullable: true
versionId:
type: string
nullable: true
type:
allOf:
- $ref: '#/components/schemas/EntryType'
description: "Type of the activity.\r\n\r\nPossible values: Fixed = '0', Time = '1', Expense = '2'"
additionalProperties: false
Surcharge:
type: object
properties:
type:
allOf:
- $ref: '#/components/schemas/SurchargeType'
description: "The type of surcharge applied to the invoice.\r\n\r\nPossible values: None = 0, Fixed = 1, Percentage = 2."
example: 1
fixedSurcharge:
type: number
description: "The fixed surcharge amount applied to the invoice total.\r\n\r\nOnly applicable when Type is Fixed."
format: double
nullable: true
example: 100
percentage:
type: number
format: double
nullable: true
description:
type: string
description: A description of the surcharge, such as the reason or category.
nullable: true
example: Late Payment Fee
applyTo:
allOf:
- $ref: '#/components/schemas/SurchargeApplyType'
description: "The surcharge application type, indicating what the surcharge applies to.\r\n\r\nPossible values: None = 0, Fees = 1, Expenses = 2, FeesAndExpenses = 3."
example: 1
additionalProperties: false
InvoiceFileInfo:
type: object
properties:
invoiceId:
type: string
description: Unique identifier of the requested invoice
nullable: true
example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
versionId:
type: string
description: Unique identifier of the invoice version
nullable: true
example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
downloadUrl:
type: string
description: Link to download file
nullable: true
example: ''
expiry:
type: string
description: Expiry date/time when the download link is no longer accessible
format: date-time
example: '2022-04-23T14:30:00Z'
status:
type: string
description: Current status of the invoice
nullable: true
example: Draft
additionalProperties: false
Invoice:
type: object
properties:
href:
type: string
nullable: true
relation:
type: string
nullable: true
method:
type: string
default: GET
nullable: true
self:
allOf:
- $ref: '#/components/schemas/Link'
nullable: true
id:
type: string
description: The unique identifier of the invoice.
nullable: true
example: 16567e88-784c-470e-8952-e5a70fe2eb0c
versionId:
type: string
description: The unique identifier representing the current version of the invoice.
nullable: true
example: 39ffde97-eeeb-4747-bb8f-7c7c10b3c985
matter:
allOf:
- $ref: '#/components/schemas/Link'
description: A link to the matter associated with the invoice.
nullable: true
matterId:
type: string
description: The unique identifier of the matter this invoice belongs to.
nullable: true
example: 6398a045-509e-49a2-9268-bb8231fa9340
lastUpdatedByUserId:
type: string
description: The unique identifier of the user who last updated the invoice.
nullable: true
example: 5fc5ee85-6643-4623-b019-a0dccceafe47
description:
type: string
description: A short description of the invoice contents or purpose.
nullable: true
example: Services provided.
status:
allOf:
- $ref: '#/components/schemas/InvoiceStatus'
description: "The status of the invoice.\r\n\r\nPossible values: Draft = 0, Final = 1, Paid = 2, Deleted = 3 or Void = 4."
example: 0
invoiceNumber:
type: integer
description: The sequential number assigned to the invoice.
format: int64
nullable: true
example: 10001
invoiceTitle:
type: string
description: The main title of the invoice.
nullable: true
example: My First Invoice
invoiceTitleLine2:
type: string
description: The optional second line of the invoice title.
nullable: true
example: Subtitle
issuedDate:
type: string
description: The date the invoice was issued.
format: date-time
example: '2022-09-16T00:00:00+00:00'
dueDate:
type: string
description: The date by which payment for the invoice is due.
format: date-time
example: '2022-09-25T00:00:00+00:00'
paidDate:
type: string
description: "The date the invoice was fully paid.\r\n\r\nOnly populated if the invoice has been paid in full."
format: date-time
example: '2022-09-20T00:00:00+00:00'
discount:
allOf:
- $ref: '#/components/schemas/Discount'
description: "The discount configuration for the invoice (e.g., fixed or percentage).\r\n\r\nSee InvoiceTotals.Discount for the actual amount discounted."
nullable: true
surcharge:
allOf:
- $ref: '#/components/schemas/Surcharge'
description: The surcharge configuration for the invoice (e.g., fixed or percentage).
nullable: true
debtors:
type: array
items:
$ref: '#/components/schemas/Debtor'
description: The list of debtors associated with this invoice.
nullable: true
entries:
type: array
items:
$ref: '#/components/schemas/InvoicedMatterEntryItem'
description: The individual entries (fees or expenses) included in the invoice.
nullable: true
waived:
type: boolean
description: Indicates whether the invoice has been waived.
example: false
invoiceTotals:
allOf:
- $ref: '#/components/schemas/InvoiceTotals'
description: The calculated totals for the invoice, including billed, paid, unpaid, tax, interest, discounts, etc.
nullable: true
additionalProperties: false
SurchargeType:
enum:
- 0
- 1
- 2
type: integer
format: int32
DiscountType:
enum:
- 0
- 1
type: integer
format: int32
EntryType:
enum:
- 0
- 1
- 2
type: integer
description: "Type of the activity.\r\n\r\nPossible values: Fixed = '0', Time = '1', Expense = '2'"
format: int32
Discount:
type: object
properties:
type:
allOf:
- $ref: '#/components/schemas/DiscountType'
description: "The type of discount applied to the invoice.\r\n\r\nFixed for a fixed amount, or Percentage for a percentage-based discount.\r\n\r\nPossible values: Fixed = 0, Percentage = 1."
example: 0
fixedDiscount:
type: number
description: "The fixed discount amount to be subtracted from the invoice total.\r\n\r\nOnly applicable when Type is Fixed."
format: double
example: 100
percentage:
type: number
description: "The percentage discount to be applied to the invoice total.\r\n\r\nOnly applicable when Type is Percentage.\r\n\r\nExpressed as a number between 0 and 100."
format: double
example: 10
description:
type: string
description: A description of the discount, such as the reason or category.
nullable: true
example: Friend of the Firm
additionalProperties: false
Link:
type: object
properties:
id:
type: string
nullable: true
href:
type: string
nullable: true
relation:
type: string
nullable: true
method:
type: string
default: GET
nullable: true
additionalProperties: false
InvoiceTotals:
type: object
properties:
paid:
type: number
description: The total amount that has been paid towards the invoice.
format: double
example: 100
billed:
type: number
description: "The total amount billed on the invoice, excluding tax and interest.\r\n\r\nThis includes all fees and expenses before discounts or write-offs."
format: double
example: 200
unpaid:
type: number
description: The remaining amount due on the invoice, including any unpaid tax or interest.
format: double
example: 100
unpaidExcInterest:
type: number
description: "The total unpaid amount excluding interest.\r\n\r\nIf this value is zero on an interest-bearing invoice, it indicates the principal has been fully paid,\r\nalthough interest may still be outstanding."
format: double
example: 100
writtenOff:
type: number
description: The total amount that has been written off from the invoice and is no longer expected to be paid.
format: double
example: 0
waived:
type: number
description: "The total amount that has been waived on the invoice.\r\n\r\nWaived amounts are not charged but are also not written off."
format: double
example: 0
discount:
type: number
description: "The total amount discounted on the invoice.\r\n\r\nThis includes all applied discounts reducing the billed amount."
format: double
example: 0
total:
type: number
description: The grand total for the invoice, including tax and interest, before any payments, discounts, or write-offs.
format: double
example: 100
tax:
type: number
description: The total tax amount applied to the invoice.
format: double
example: 10
interest:
type: number
description: The total interest charged on the invoice, regardless of what has been paid so far.
format: double
example: 0
feeTotal:
type: number
description: The total amount of all fees on the invoice, including both written off and non-written off fees.
format: double
example: 100
writtenOffFeeTotal:
type: number
description: The total amount of fees that have been written off.
format: double
example: 100
expenseTotal:
type: number
description: The total amount of all expenses on the invoice, including both written off and non-written off expenses.
format: double
example: 100
writtenOffExpenseTotal:
type: number
description: The total amount of expenses that have been written off.
format: double
example: 180
additionalProperties: false
InvoicePagedCollection:
type: object
properties:
id:
type: string
nullable: true
href:
type: string
nullable: true
relation:
type: string
nullable: true
method:
type: string
default: GET
nullable: true
self:
allOf:
- $ref: '#/components/schemas/Link'
nullable: true
value:
type: array
items:
$ref: '#/components/schemas/Invoice'
nullable: true
offset:
type: integer
format: int32
nullable: true
limit:
type: integer
format: int32
nullable: true
size:
type: integer
format: int64
first:
allOf:
- $ref: '#/components/schemas/Link'
nullable: true
previous:
allOf:
- $ref: '#/components/schemas/Link'
nullable: true
next:
allOf:
- $ref: '#/components/schemas/Link'
nullable: true
last:
allOf:
- $ref: '#/components/schemas/Link'
nullable: true
additionalProperties: false
ProblemDetails:
type: object
properties:
type:
type: string
nullable: true
title:
type: string
nullable: true
status:
type: integer
format: int32
nullable: true
detail:
type: string
nullable: true
instance:
type: string
nullable: true
additionalProperties: {}
SurchargeApplyType:
enum:
- 0
- 1
- 2
- 3
type: integer
format: int32
Debtor:
type: object
properties:
contact:
allOf:
- $ref: '#/components/schemas/Link'
description: Hypermedia link of the associated contact.
nullable: true
additionalProperties: false
securitySchemes:
api-key:
type: apiKey
name: x-api-key
in: header
token:
type: apiKey
name: Authorization
in: header
x-amazon-apigateway-authtype: cognito_user_pools