curl --request PATCH \
--url https://api.instaview.sk/sourcing/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "Senior Node.js engineer fintech remote",
"limit": 10
}
'import requests
url = "https://api.instaview.sk/sourcing/{id}"
payload = {
"query": "Senior Node.js engineer fintech remote",
"limit": 10
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'Senior Node.js engineer fintech remote', limit: 10})
};
fetch('https://api.instaview.sk/sourcing/{id}', 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/sourcing/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'Senior Node.js engineer fintech remote',
'limit' => 10
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.instaview.sk/sourcing/{id}"
payload := strings.NewReader("{\n \"query\": \"Senior Node.js engineer fintech remote\",\n \"limit\": 10\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.instaview.sk/sourcing/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"Senior Node.js engineer fintech remote\",\n \"limit\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.instaview.sk/sourcing/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"Senior Node.js engineer fintech remote\",\n \"limit\": 10\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"requestId": "req_550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"message": "Sourcing run accepted and queued for processing.",
"webhookId": "123e4567-e89b-12d3-a456-426614174000",
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:01:00.000Z"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}Patch Sourcing Run
Patches the reasoning context and/or candidate limit of an existing sourcing session and triggers a new background run. Returns 409 if a run is already in progress. At least one of query or limit must be provided.
curl --request PATCH \
--url https://api.instaview.sk/sourcing/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "Senior Node.js engineer fintech remote",
"limit": 10
}
'import requests
url = "https://api.instaview.sk/sourcing/{id}"
payload = {
"query": "Senior Node.js engineer fintech remote",
"limit": 10
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'Senior Node.js engineer fintech remote', limit: 10})
};
fetch('https://api.instaview.sk/sourcing/{id}', 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/sourcing/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'Senior Node.js engineer fintech remote',
'limit' => 10
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.instaview.sk/sourcing/{id}"
payload := strings.NewReader("{\n \"query\": \"Senior Node.js engineer fintech remote\",\n \"limit\": 10\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.instaview.sk/sourcing/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"Senior Node.js engineer fintech remote\",\n \"limit\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.instaview.sk/sourcing/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"Senior Node.js engineer fintech remote\",\n \"limit\": 10\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"requestId": "req_550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"message": "Sourcing run accepted and queued for processing.",
"webhookId": "123e4567-e89b-12d3-a456-426614174000",
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:01:00.000Z"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request"
}202 Accepted.
Overview
After a sourcing run completes you can iterate on it — tighten or relax criteria, prioritize different signals, or harvest more candidates from the same discovered pool. The agent incorporates the newquery as a context patch before evaluating additional profiles.
status of "completed" or "failed". If the run is still "processing", the API returns 409 Conflict.Request Body
At least one ofquery or limit must be provided. Both fields may be combined in a single request.
| Field | Type | Required | Description |
|---|---|---|---|
query | string | No (one required) | Natural language instruction to patch into the session context. Max 500 chars. |
limit | number | No (one required) | Number of additional candidates to evaluate (default: 10, max: 50). Profiles already scored in this session are excluded. |
Examples
Prompt Refinement Only
{
"query": "Relax experience requirement from 8 years to 5 years, but prioritize candidates with strong open-source GitHub portfolios."
}
Request Additional Candidates Only
{
"limit": 15
}
Combined Refinement + Additional Candidates
{
"query": "Focus on startup founders with Kubernetes orchestration experience at Series A/B companies.",
"limit": 5
}
query as an updated context patch first, then evaluates 5 additional profiles against the refined criteria — all in a single asynchronous reasoning pass.
Response (202 Accepted)
{
"success": true,
"requestId": "req_9f3b827e-8c31-4bda-a7a2-b2d99d14f4e2",
"status": "processing",
"message": "Sourcing re-run accepted and queued for processing.",
"updatedAt": "2026-05-20T13:21:12.000Z"
}
Error Responses
400 — Both Fields Omitted
{
"statusCode": 400,
"error": "INVALID_PATCH_PAYLOAD",
"message": "Validation failed: You must provide at least one of 'query' or 'limit'."
}
409 — Run Still In Progress
{
"statusCode": 409,
"error": "RUN_IN_PROGRESS",
"message": "Sourcing agent run 'req_9f3b827e-…' is currently in progress. You can only patch the run context after the current execution finishes."
}
Authorizations
API key for authentication using Bearer scheme
Path Parameters
The requestId returned by POST /sourcing (e.g. req_550e8400-…).
Body
New free-text search query for the re-run. At least one of query or limit must be supplied.
500"Senior Node.js engineer fintech remote"
Number of additional candidates to evaluate in this re-run (default: 10, max: 50). At least one of query or limit must be supplied.
1 <= x <= 5010
Response
Sourcing re-run accepted and queued
Whether the request was accepted for processing.
true
Unique external identifier for this sourcing run.
"req_550e8400-e29b-41d4-a716-446655440000"
Current status of the run.
processing, completed, failed "processing"
Human-readable message.
"Sourcing run accepted and queued for processing."
UUID of the webhook configuration that will receive completion events.
"123e4567-e89b-12d3-a456-426614174000"
ISO 8601 timestamp when the run was created (POST only).
"2025-01-01T00:00:00.000Z"
ISO 8601 timestamp when the run was last updated (PATCH only).
"2025-01-01T00:01:00.000Z"