curl --request PUT \
--url https://api.smokeball.com/matters/{matterId}/documents/files/{fileId} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json-patch+json' \
--header 'x-api-key: <api-key>' \
--data '
{
"fileName": "court filing.pdf",
"folderId": "b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2",
"userId": "750eb5c5-ac0b-7d11-4997-e0ce9d8896c8",
"fileAdditionalData": {
"Author": "Jane Smith",
"Pages": 12,
"Signed": true
},
"isFavorite": true
}
'import requests
url = "https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}"
payload = {
"fileName": "court filing.pdf",
"folderId": "b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2",
"userId": "750eb5c5-ac0b-7d11-4997-e0ce9d8896c8",
"fileAdditionalData": {
"Author": "Jane Smith",
"Pages": 12,
"Signed": True
},
"isFavorite": True
}
headers = {
"x-api-key": "<api-key>",
"Authorization": "<api-key>",
"Content-Type": "application/json-patch+json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'x-api-key': '<api-key>',
Authorization: '<api-key>',
'Content-Type': 'application/json-patch+json'
},
body: JSON.stringify({
fileName: 'court filing.pdf',
folderId: 'b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2',
userId: '750eb5c5-ac0b-7d11-4997-e0ce9d8896c8',
fileAdditionalData: {Author: 'Jane Smith', Pages: 12, Signed: true},
isFavorite: true
})
};
fetch('https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'fileName' => 'court filing.pdf',
'folderId' => 'b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2',
'userId' => '750eb5c5-ac0b-7d11-4997-e0ce9d8896c8',
'fileAdditionalData' => [
'Author' => 'Jane Smith',
'Pages' => 12,
'Signed' => true
],
'isFavorite' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json-patch+json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}"
payload := strings.NewReader("{\n \"fileName\": \"court filing.pdf\",\n \"folderId\": \"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2\",\n \"userId\": \"750eb5c5-ac0b-7d11-4997-e0ce9d8896c8\",\n \"fileAdditionalData\": {\n \"Author\": \"Jane Smith\",\n \"Pages\": 12,\n \"Signed\": true\n },\n \"isFavorite\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json-patch+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}")
.header("x-api-key", "<api-key>")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json-patch+json")
.body("{\n \"fileName\": \"court filing.pdf\",\n \"folderId\": \"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2\",\n \"userId\": \"750eb5c5-ac0b-7d11-4997-e0ce9d8896c8\",\n \"fileAdditionalData\": {\n \"Author\": \"Jane Smith\",\n \"Pages\": 12,\n \"Signed\": true\n },\n \"isFavorite\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<api-key>'
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json-patch+json'
request.body = "{\n \"fileName\": \"court filing.pdf\",\n \"folderId\": \"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2\",\n \"userId\": \"750eb5c5-ac0b-7d11-4997-e0ce9d8896c8\",\n \"fileAdditionalData\": {\n \"Author\": \"Jane Smith\",\n \"Pages\": 12,\n \"Signed\": true\n },\n \"isFavorite\": true\n}"
response = http.request(request)
puts response.read_body{
"fileId": "b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2",
"uploadUrl": "https://example-bucket.s3.amazonaws.com/apiuploads/2f1c9a3e-6b1d-4c7e-9a0f-1d2e3f4a5b6c?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&X-Amz-Signature=...",
"expiry": "2022-04-23T14:30:00Z"
}"<string>"{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Upload/update version or metadata of a file
Replaces all editable fields of a file with the supplied values. Use PATCH to change only some fields.
Because this is a full replace, omitting āfolderIdā (or setting it to null) moves the file to the root folder. The destination folder is not validated for existence. āfileNameā is required (maximum 256 characters). āuserIdā falls back to the authenticated user when omitted. Additional data values are merged with existing keys; null or empty additional data is a no-op. āisFavoriteā is ignored when null.
The response always includes a presigned PUT URL (valid for 1 hour) that can optionally be used to upload a new version of the file. Every call records a new upload request whether or not the URL is used.
curl --request PUT \
--url https://api.smokeball.com/matters/{matterId}/documents/files/{fileId} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json-patch+json' \
--header 'x-api-key: <api-key>' \
--data '
{
"fileName": "court filing.pdf",
"folderId": "b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2",
"userId": "750eb5c5-ac0b-7d11-4997-e0ce9d8896c8",
"fileAdditionalData": {
"Author": "Jane Smith",
"Pages": 12,
"Signed": true
},
"isFavorite": true
}
'import requests
url = "https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}"
payload = {
"fileName": "court filing.pdf",
"folderId": "b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2",
"userId": "750eb5c5-ac0b-7d11-4997-e0ce9d8896c8",
"fileAdditionalData": {
"Author": "Jane Smith",
"Pages": 12,
"Signed": True
},
"isFavorite": True
}
headers = {
"x-api-key": "<api-key>",
"Authorization": "<api-key>",
"Content-Type": "application/json-patch+json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'x-api-key': '<api-key>',
Authorization: '<api-key>',
'Content-Type': 'application/json-patch+json'
},
body: JSON.stringify({
fileName: 'court filing.pdf',
folderId: 'b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2',
userId: '750eb5c5-ac0b-7d11-4997-e0ce9d8896c8',
fileAdditionalData: {Author: 'Jane Smith', Pages: 12, Signed: true},
isFavorite: true
})
};
fetch('https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'fileName' => 'court filing.pdf',
'folderId' => 'b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2',
'userId' => '750eb5c5-ac0b-7d11-4997-e0ce9d8896c8',
'fileAdditionalData' => [
'Author' => 'Jane Smith',
'Pages' => 12,
'Signed' => true
],
'isFavorite' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json-patch+json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}"
payload := strings.NewReader("{\n \"fileName\": \"court filing.pdf\",\n \"folderId\": \"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2\",\n \"userId\": \"750eb5c5-ac0b-7d11-4997-e0ce9d8896c8\",\n \"fileAdditionalData\": {\n \"Author\": \"Jane Smith\",\n \"Pages\": 12,\n \"Signed\": true\n },\n \"isFavorite\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json-patch+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}")
.header("x-api-key", "<api-key>")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json-patch+json")
.body("{\n \"fileName\": \"court filing.pdf\",\n \"folderId\": \"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2\",\n \"userId\": \"750eb5c5-ac0b-7d11-4997-e0ce9d8896c8\",\n \"fileAdditionalData\": {\n \"Author\": \"Jane Smith\",\n \"Pages\": 12,\n \"Signed\": true\n },\n \"isFavorite\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smokeball.com/matters/{matterId}/documents/files/{fileId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<api-key>'
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json-patch+json'
request.body = "{\n \"fileName\": \"court filing.pdf\",\n \"folderId\": \"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2\",\n \"userId\": \"750eb5c5-ac0b-7d11-4997-e0ce9d8896c8\",\n \"fileAdditionalData\": {\n \"Author\": \"Jane Smith\",\n \"Pages\": 12,\n \"Signed\": true\n },\n \"isFavorite\": true\n}"
response = http.request(request)
puts response.read_body{
"fileId": "b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2",
"uploadUrl": "https://example-bucket.s3.amazonaws.com/apiuploads/2f1c9a3e-6b1d-4c7e-9a0f-1d2e3f4a5b6c?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&X-Amz-Signature=...",
"expiry": "2022-04-23T14:30:00Z"
}"<string>"{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Path Parameters
Unique identifier (GUID) of the matter.
Unique identifier (GUID) of the file.
Body
The full set of editable file properties.
Full name of the file. Required on PUT, maximum 256 characters. The name is normalised to XML-safe characters and must contain at least one valid character. The file's existing extension is kept unless the supplied name ends with that same extension; a trailing '.something' that differs from the current extension is treated as part of the name, so the extension cannot be changed by renaming.
256"court filing.pdf"
Unique identifier (GUID) of the folder to move the file to. Null means the root folder. On PUT, omitting this property moves the file to the root folder. On PATCH, the file is moved only when '/folderId' is present in the request. The destination folder is not validated for existence.
"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2"
Unique identifier (GUID) of the user modifying the file. If null it will fallback to the authenticated user
"750eb5c5-ac0b-7d11-4997-e0ce9d8896c8"
Dictionary of custom metadata to set on the file. Keys must not be blank. Values must be strings, integers, numbers, booleans or null; objects and arrays are rejected. Supplied keys are added or overwritten. Null or empty is a no-op, so existing values cannot be cleared through this property.
Show child attributes
Show child attributes
{
"Author": "Jane Smith",
"Pages": 12,
"Signed": true
}
Flag indicating whether this file is a favorite. If null it will be ignored
true
Response
When request is accepted. Returns an 'UploadFileInfo' object.
Unique identifier of the file.
"b471682e-fa17-4e46-b7fe-9b2b8fdcb3c2"
Temporary presigned URL to upload the file content to. Send the raw file bytes with an HTTP PUT request. The URL is valid for 1 hour from the time of the API call (see Expiry).
Important note: When uploading to this URL, set the 'Content-Type' header to an empty value.
Example cURL: curl --location --request PUT 'URL_GOES_HERE' \ --header 'Content-Type: ""' \ --data '@/C:/dir/test.pdf'
"https://example-bucket.s3.amazonaws.com/apiuploads/2f1c9a3e-6b1d-4c7e-9a0f-1d2e3f4a5b6c?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&X-Amz-Signature=..."
UTC date/time when the upload link is no longer accessible (1 hour after issue).
"2022-04-23T14:30:00Z"