curl --request POST \
--url https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete', 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.instaview.sk/contacts/{id}/documents/{documentId}/complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"title": "Benefits and perks",
"status": "READY",
"isActive": true,
"source": "UPLOAD",
"createdAt": "2026-08-08T10:15:00.000Z",
"fileName": "benefits-and-perks.pdf",
"mimeType": "application/pdf",
"sizeBytes": 482133
}Complete Contact Document Upload
Confirms the file was uploaded to the presigned URL. The stored object is verified — it must exist, be within the size limit, be no larger than the size declared when the upload was started, and carry the content type the URL was issued for — and only then does the document become usable on calls. A file that fails verification is deleted and its reservation released. Safe to retry: completing an already-completed document returns it unchanged.
curl --request POST \
--url https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete', 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.instaview.sk/contacts/{id}/documents/{documentId}/complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.instaview.sk/contacts/{id}/documents/{documentId}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"title": "Benefits and perks",
"status": "READY",
"isActive": true,
"source": "UPLOAD",
"createdAt": "2026-08-08T10:15:00.000Z",
"fileName": "benefits-and-perks.pdf",
"mimeType": "application/pdf",
"sizeBytes": 482133
}Overview
The stored object is verified before anything changes: it must exist, be within the 20 MiB limit, be no larger than the size you declared when starting the upload, and carry the content type the URL was issued for. A file that fails any of these is deleted, its reservation is released, and you get a400 saying which check failed.
Safe to retry. Completing an already-completed document returns it unchanged with a 200.
Example
curl -X POST https://api.instaview.sk/contacts/$CONTACT_ID/documents/$DOCUMENT_ID/complete \
-H "Authorization: Bearer $INSTAVIEW_API_KEY"
{
"id": "5d3c2b1a-0f9e-4d8c-b7a6-5f4e3d2c1b0a",
"title": "Cover letter",
"fileName": "cover-letter.pdf",
"mimeType": "application/pdf",
"sizeBytes": 482133,
"status": "READY",
"isActive": true,
"source": "UPLOAD",
"createdAt": "2026-09-05T09:30:00.000Z"
}
Error Scenarios
- 400 Bad Request: Nothing has been uploaded to the URL yet, or the stored file is too large, larger than declared, or of a different content type. A file that fails verification is deleted
- 404 Not Found: No such document on that contact
- 429 Too Many Requests: Completion rate limit exceeded — wait for
Retry-Afterseconds
Related Resources
Authorizations
API key for authentication using Bearer scheme
Path Parameters
Contact the document belongs to.
Document id.
Query Parameters
Required for ATS API keys to specify which company to access. Ignored for standard company API keys.
Response
Upload verified; the document is now READY
Document ID
"123e4567-e89b-12d3-a456-426614174000"
Human-readable label for the document
"Benefits and perks"
PENDING while waiting for the file to be uploaded to the presigned URL and the upload to be completed; READY once the file is confirmed stored. Only READY documents are attached to calls.
PENDING, READY "READY"
Whether the agent may consult this document during a call. Always false while the upload is PENDING.
true
UPLOAD for a file attached through the API or the dashboard. CV for the document the platform produces from a contact's processed CV (contacts only); a CV document can be deactivated but not renamed or deleted. Always UPLOAD on an agent's knowledge base.
UPLOAD, CV "UPLOAD"
When the document was created
"2026-08-08T10:15:00.000Z"
Original file name as uploaded
"benefits-and-perks.pdf"
MIME type of the stored file
"application/pdf"
Size of the stored file in bytes, as verified against storage. Absent until the upload is READY.
482133