openapi: 3.0.1 info: title: Smokeball Activity Codes 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: FeeSourceItem: 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 description: type: string description: The description. nullable: true 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 description: "Unique identifier of the user updating the fee.\r\n\r\nThis field is reserved for server-to-server operations." nullable: true example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8 staffId: type: string description: "Unique identifier of the associated staff member.\r\n\r\nWhen StaffId is not provided, the API will attempt to match your User Id to a Staff Id automatically." nullable: true example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8 invoiceId: type: string description: Unique identifier of the associated invoice. nullable: true example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8 activityCode: type: string description: The activity code associated to the fee. nullable: true 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 description: Optional detailed description of the fee. nullable: true 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 description: The duration worked - in minutes. This duration is used if there are no sub activities. format: int64 nullable: true example: 50 rate: type: number description: The rate of the fee in dollars. format: double example: 350 tax: type: number description: "Tax amount of the fee in dollars. Only applicable in AU and UK regions.\r\n\r\nWhen TaxOutOfScope or TaxExempt is true, this value must be 0." format: double nullable: true example: 35 taxInclusive: type: boolean description: "If true, the amount is tax inclusive, otherwise tax exclusive. Only applicable in AU and UK regions.\r\n\r\nTax inclusive means: Amount exc. tax = Amount - Tax, Amount inc. tax = Amount.\r\n\r\nTax exclusive means: Amount exc. tax = Amount, Amount inc. tax = Amount + Tax.\r\n\r\n(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.\r\n\r\nThis field is mutually exclusive with TaxOutOfScope.\r\nWhen 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.\r\n\r\nThis field is mutually exclusive with TaxExempt.\r\nWhen 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.\r\n\r\nWritten 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 items: $ref: '#/components/schemas/FeeSourceItemDto' description: The source items on the fee. nullable: true createdFromActivityId: type: string description: "Associates an existing activity id to a fee.\r\nOnly valid for Fee creation. \r\nValue is supplied by Smokeball for some partners." nullable: true example: 504b9f77-20c7-4dee-8227-d3007c8f6cea additionalProperties: false FeeSourceItemDto: type: object properties: description: type: string description: The description. nullable: true 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 FeeType: enum: - 0 - 1 type: integer description: The type of the fee (Fixed = 0, Time = 1). format: int32 FeePagedCollection: 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/Fee' 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 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 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: {} Fee: 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: Unique identifier of the fee. nullable: true example: b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2 versionId: type: string description: Unique version identifier of the fee. nullable: true example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8 matter: allOf: - $ref: '#/components/schemas/Link' description: The matter associated to the fee. nullable: true staff: allOf: - $ref: '#/components/schemas/Link' description: The staff member associated to the fee. nullable: true matterId: type: string description: Deprecated, use Matter. nullable: true staffId: type: string description: Deprecated, use Staff. nullable: true createdByUserId: type: string description: Unique identifier of the user that created the fee. nullable: true 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 description: Unique identifier of the user that updated the fee. nullable: true example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8 invoiceId: type: string description: Unique identifier of the associated invoice. nullable: true example: 750eb5c5-ac0b-7d11-4997-e0ce9d8896c8 activityCode: type: string description: The activity code associated to the fee. nullable: true example: PRT utbmsTaskCode: type: string description: The UTBMS task code associated to the fee, where UTBMS is enabled. Only applicable in US. nullable: true example: L110 subject: type: string description: The subject - this should be a short description of the fee. nullable: true example: Review contract description: type: string description: Optional detailed description of the fee. nullable: true 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.\r\n\r\nWritten 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). nullable: true 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.\r\n\r\nGST inclusive means: Amount exc. GST = Amount - GST, Amount inc. GST = Amount.\r\n\r\nGST 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 description: The duration worked - in minutes. format: int64 nullable: true 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.\r\n\r\nThis 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.\r\n\r\nIf 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.\r\n\r\nIf 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,\r\nvalue will be 0.\r\n\r\nIf the fee is partially billable (i.e. has source items, some of which are billable and some not),\r\nthis 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,\r\nvalue will be 0.\r\n\r\nIf the fee is partially billable (i.e. has source items, some of which are billable\r\nand some not), this value will contain the tax calculated from billable items only.\r\nIn 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 items: $ref: '#/components/schemas/FeeSourceItem' description: The source items on the fee. nullable: true createdFromActivityId: type: string description: Unique identifier of the Activity used to create the fee, if applicable. nullable: true example: 504b9f77-20c7-4dee-8227-d3007c8f6cea 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