Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/smokeball-fees-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Smokeball Fees 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: Fees
paths:
/matters/{matterId}/fees:
get:
tags:
- Fees
summary: Get fees
description: Returns a list of fees for the specified matter.
operationId: GetFees
parameters:
- name: matterId
in: path
required: true
schema:
type: string
- 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
- name: UpdatedSince
in: query
description: Returns fees updated since a specified time (.net ticks representation of the UTC datetime).
schema:
type: integer
format: int64
responses:
'200':
description: When request is successful. Returns a paged collection of 'Fee' objects.
content:
application/json:
schema:
$ref: '#/components/schemas/FeePagedCollection'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
post:
tags:
- Fees
summary: Create a fee
description: Creates a fee for the specified matter.
operationId: CreateFee
parameters:
- name: matterId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json-patch+json:
schema:
allOf:
- $ref: '#/components/schemas/FeeDto'
application/json:
schema:
allOf:
- $ref: '#/components/schemas/FeeDto'
application/*+json:
schema:
allOf:
- $ref: '#/components/schemas/FeeDto'
responses:
'202':
description: When request is accepted. Returns a hypermedia 'Link' object of the fee to be created.
content:
application/json:
schema:
$ref: '#/components/schemas/Link'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
/matters/{matterId}/fees/{id}:
get:
tags:
- Fees
summary: Get a fee
description: Retrieves a specified fee.
operationId: GetFeeById
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: matterId
in: path
required: true
schema:
type: string
responses:
'200':
description: When request is successful. Returns a 'Fee' object.
content:
application/json:
schema:
$ref: '#/components/schemas/Fee'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'403':
description: When fee with specified id is not associated with authenticated client.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'404':
description: When fee with specified id does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
put:
tags:
- Fees
summary: Update a fee
description: Updates a fee for the specified matter.
operationId: UpdateFee
parameters:
- name: matterId
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json-patch+json:
schema:
allOf:
- $ref: '#/components/schemas/FeeDto'
application/json:
schema:
allOf:
- $ref: '#/components/schemas/FeeDto'
application/*+json:
schema:
allOf:
- $ref: '#/components/schemas/FeeDto'
responses:
'202':
description: When request is accepted. Returns a hypermedia 'Link' object of the fee to be updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Link'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'403':
description: When fee with specified id is not associated with authenticated client.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'404':
description: When fee with specified id does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
patch:
tags:
- Fees
summary: Patch a fee
description: Patches a fee for the specified matter.
operationId: PatchFee
parameters:
- name: matterId
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/FeeDto'
application/json:
schema:
$ref: '#/components/schemas/FeeDto'
application/*+json:
schema:
$ref: '#/components/schemas/FeeDto'
responses:
'202':
description: When request is accepted. Returns a hypermedia 'Link' object of the fee to be patched.
content:
application/json:
schema:
$ref: '#/components/schemas/Link'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'403':
description: When fee with specified id is not associated with authenticated client.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'404':
description: When fee with specified id does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
delete:
tags:
- Fees
summary: Delete a fee
description: Deletes a fee.
operationId: DeleteFee
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: matterId
in: path
required: true
schema:
type: string
responses:
'202':
description: When request is accepted. Returns a hypermedia 'Link' object of the fee to be deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Link'
'400':
description: When an unsupported request is made.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'403':
description: When fee with specified id is not associated with authenticated client.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'404':
description: When fee with specified id does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
components:
schemas:
Link:
type: object
properties:
id:
type:
- string
- 'null'
href:
type:
- string
- 'null'
relation:
type:
- string
- 'null'
method:
type:
- string
- 'null'
default: GET
additionalProperties: false
FeeType:
enum:
- 0
- 1
type: integer
description: The type of the fee (Fixed = 0, Time = 1).
format: int32
Fee:
type: object
properties:
href:
type:
- string
- 'null'
relation:
type:
- string
- 'null'
method:
type:
- string
- 'null'
default: GET
self:
allOf:
- $ref: '#/components/schemas/Link'
id:
type:
- string
- 'null'
description: Unique identifier of the fee.
example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2
versionId:
type:
- string
- 'null'
description: Unique version identifier of the fee.
example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
matter:
allOf:
- $ref: '#/components/schemas/Link'
description: The matter associated to the fee.
staff:
allOf:
- $ref: '#/components/schemas/Link'
description: The staff member associated to the fee.
matterId:
type:
- string
- 'null'
description: Deprecated, use Matter.
staffId:
type:
- string
- 'null'
description: Deprecated, use Staff.
createdByUserId:
type:
- string
- 'null'
description: Unique identifier of the user that created the fee.
example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
createdDate:
type: string
description: Date the fee was created.
format: date-time
example: '2026-04-13T11:00:00Z'
lastUpdatedByUserId:
type:
- string
- 'null'
description: Unique identifier of the user that updated the fee.
example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
invoiceId:
type:
- string
- 'null'
description: Unique identifier of the associated invoice.
example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
activityCode:
type:
- string
- 'null'
description: The activity code associated to the fee.
example: PRT
utbmsTaskCode:
type:
- string
- 'null'
description: The UTBMS task code associated to the fee, where UTBMS is enabled. Only applicable in US.
example: L110
subject:
type:
- string
- 'null'
description: The subject - this should be a short description of the fee.
example: Review contract
description:
type:
- string
- 'null'
description: Optional detailed description of the fee.
example: Print documents
feeDate:
type: string
description: The date of the fee.
format: date-time
example: '2022-07-01'
feeType:
allOf:
- $ref: '#/components/schemas/FeeType'
description: The type of the fee (Fixed = 0, Time = 1).
example: 0
finalized:
type: boolean
description: True if the fee has been finalized.
example: false
isInvoicedExternally:
type: boolean
description: True if the fee is invoiced externally.
example: false
isWrittenOff:
type: boolean
description: 'True if the fee is written off. True only allowed if IsBillable is true.
Written off fee will show on an invoice with their amount, but will not be counted in the invoice total.'
example: false
isBillable:
type:
- boolean
- 'null'
description: True if the fee is billable. Non-billable fee will, by default, not be shown on invoices (and, if shown, the amount will be 0).
example: false
tax:
type: number
description: GST amount of the fee in dollars. Only applicable in AU.
format: double
example: 35
taxInclusive:
type: boolean
description: 'If true, the amount is GST inclusive, otherwise GST exclusive. Only applicable in AU.
GST inclusive means: Amount exc. GST = Amount - GST, Amount inc. GST = Amount.
GST exclusive means: Amount exc. GST = Amount, Amount inc. GST = Amount + GST.'
example: false
taxExempt:
type: boolean
description: True if the fee is tax exempt. In that case, Tax will always be 0.
example: false
taxOutOfScope:
type: boolean
description: True if the fee is out of scope for tax. In that case, Tax will always be 0.
example: false
duration:
type: integer
description: The duration billed - in minutes.
format: int64
example: 60
durationWorked:
type:
- integer
- 'null'
description: The duration worked - in minutes.
format: int64
example: 50
rate:
type: number
description: The rate of the fee in dollars.
format: double
example: 350
amount:
type: number
description: 'Total amount of the fee in dollars. Calculated using Rate and Duration depending on the fee type.
This amount includes tax depending on the TaxInclusive property. See AmountExcTax and AmountIncTax.'
format: double
example: 350
amountExcTax:
type: number
description: 'Amount excluding tax in dollars. Calculated from Amount and Tax depending on the TaxInclusive property.
If tax is not applicable (outside AU), this will be the same as Amount.'
format: double
example: 315
amountIncTax:
type: number
description: 'Amount including tax in dollars. Calculated from Amount and Tax depending on the TaxInclusive property.
If tax is not applicable (outside AU), this will be the same as Amount.'
format: double
example: 350
billableAmountExcTax:
type: number
description: 'Billable amount excluding tax in dollars. If fee is billable, value will be the same as AmountExcTax. If it''s non-billable,
value will be 0.
If the fee is partially billable (i.e. has source items, some of which are billable and some not),
this value will contain the amount calculated from billable items only.'
format: double
example: 315
billableTax:
type: number
description: 'Billable tax in dollars. If fee is billable, value will be the same as Tax. If it''s non-billable,
value will be 0.
If the fee is partially billable (i.e. has source items, some of which are billable
and some not), this value will contain the tax calculated from billable items only.
In all other cases, the value will be the same as Tax.'
format: double
example: 35
isDeleted:
type: boolean
description: True if the fee is deleted.
example: false
sourceItems:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/FeeSourceItem'
description: The source items on the fee.
createdFromActivityId:
type:
- string
- 'null'
description: Unique identifier of the Activity used to create the fee, if applicable.
example: 504b9f77-20c7-4dee-8227-d3007c8f6cea
additionalProperties: false
FeePagedCollection:
type: object
properties:
id:
type:
- string
- 'null'
href:
type:
- string
- 'null'
relation:
type:
- string
- 'null'
method:
type:
- string
- 'null'
default: GET
self:
allOf:
- $ref: '#/components/schemas/Link'
value:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/Fee'
offset:
type:
- integer
- 'null'
format: int32
limit:
type:
- integer
- 'null'
format: int32
size:
type: integer
format: int64
first:
allOf:
- $ref: '#/components/schemas/Link'
previous:
allOf:
- $ref: '#/components/schemas/Link'
next:
allOf:
- $ref: '#/components/schemas/Link'
last:
allOf:
- $ref: '#/components/schemas/Link'
additionalProperties: false
FeeSourceItemDto:
type: object
properties:
description:
type:
- string
- 'null'
description: The description.
example: Print document
duration:
type: integer
description: The duration in minutes.
format: int64
example: 5
isBillable:
type: boolean
description: True if the fee source item is billable.
example: false
additionalProperties: false
FeeSourceItem:
type: object
properties:
id:
type:
- string
- 'null'
href:
type:
- string
- 'null'
relation:
type:
- string
- 'null'
method:
type:
- string
- 'null'
default: GET
self:
allOf:
- $ref: '#/components/schemas/Link'
description:
type:
- string
- 'null'
description: The description.
duration:
type: integer
description: The duration in minutes.
format: int64
isBillable:
type: boolean
description: True if the fee source item is billable.
additionalProperties: false
FeeDto:
required:
- feeDate
- subject
type: object
properties:
updatedByUserId:
type:
- string
- 'null'
description: 'Unique identifier of the user updating the fee.
This field is reserved for server-to-server operations.'
example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
staffId:
type:
- string
- 'null'
description: 'Unique identifier of the associated staff member.
When StaffId is not provided, the API will attempt to match your User Id to a Staff Id automatically.'
example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
invoiceId:
type:
- string
- 'null'
description: Unique identifier of the associated invoice.
example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8
activityCode:
type:
- string
- 'null'
description: The activity code associated to the fee.
example: PRT
feeType:
allOf:
- $ref: '#/components/schemas/FeeType'
description: The type of the fee (Fixed = 0, Time = 1).
example: 0
feeDate:
type: string
description: The date of the fee.
format: date-time
example: '2022-07-01'
subject:
minLength: 1
type: string
description: The subject - this should be a short description of the fee.
example: Review contract
description:
type:
- string
- 'null'
description: Optional detailed description of the fee.
example: Print documents
duration:
type: integer
description: The duration billed - in minutes. This duration is used if there are no sub activities.
format: int64
example: 60
durationWorked:
type:
- integer
- 'null'
description: The duration worked - in minutes. This duration is used if there are no sub activities.
format: int64
example: 50
rate:
type: number
description: The rate of the fee in dollars.
format: double
example: 350
tax:
type:
- number
- 'null'
description: 'Tax amount of the fee in dollars. Only applicable in AU and UK regions.
When TaxOutOfScope or TaxExempt is true, this value must be 0.'
format: double
example: 35
taxInclusive:
type: boolean
description: 'If true, the amount is tax inclusive, otherwise tax exclusive. Only applicable in AU and UK regions.
Tax inclusive means: Amount exc. tax = Amount - Tax, Amount inc. tax = Amount.
Tax exclusive means: Amount exc. tax = Amount, Amount inc. tax = Amount + Tax.
(Amount = Rate for fixed fees, or Rate * Duration for time fees, Tax = value of the Tax field)'
example: false
taxExempt:
type: boolean
description: 'True if the fee is exempt from tax.
This field is mutually exclusive with TaxOutOfScope.
When true, Tax must be 0.'
example: false
taxOutOfScope:
type: boolean
description: 'True if the fee is out of scope for tax purposes. Only supported in UK regions.
This field is mutually exclusive with TaxExempt.
When true, Tax must be 0.'
example: false
finalized:
type: boolean
description: True if the fee has been finalized.
example: false
isWrittenOff:
type: boolean
description: 'True if the fee is written off. True only allowed if IsBillable is true.
Written off fee will show on an invoice with their amount, but will not be counted in the invoice total.'
example: false
isBillable:
type: boolean
description: True if the fee is billable. Non-billable fee will, by default, not be shown on invoices (and, if shown, the amount will be 0).
example: false
isInvoicedExternally:
type: boolean
description: True if the fee is invoiced externally.
example: false
sourceItems:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/FeeSourceItemDto'
description: The source items on the fee.
createdFromActivityId:
type:
- string
- 'null'
description: "Associates an existing activity id to a fee.\nOnly valid for Fee creation. \nValue is supplied by Smokeball for some partners."
example: 504b9f77-20c7-4dee-8227-d3007c8f6cea
additionalProperties: false
ProblemDetails:
type: object
properties:
type:
type:
- string
- 'null'
title:
type:
- string
- 'null'
status:
type:
- integer
- 'null'
format: int32
detail:
type:
- string
- 'null'
instance:
type:
- string
- 'null'
additionalProperties: {}
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