curl --request POST \
--url https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"waitSeconds": 0,
"skip": 1,
"limit": 2
}
'import requests
url = "https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result"
payload = {
"waitSeconds": 0,
"skip": 1,
"limit": 2
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({waitSeconds: 0, skip: 1, limit: 2})
};
fetch('https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result', 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.paywithlocus.com/api/wrapped/credits/calls/{callId}/result",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'waitSeconds' => 0,
'skip' => 1,
'limit' => 2
]),
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.paywithlocus.com/api/wrapped/credits/calls/{callId}/result"
payload := strings.NewReader("{\n \"waitSeconds\": 0,\n \"skip\": 1,\n \"limit\": 2\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"waitSeconds\": 0,\n \"skip\": 1,\n \"limit\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"waitSeconds\": 0,\n \"skip\": 1,\n \"limit\": 2\n}"
response = http.request(request)
puts response.read_body{
"apiCallId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "<string>",
"endpoint": "<string>",
"statusEndpoint": "<string>",
"jobId": "<string>",
"state": "pending",
"result": "<unknown>",
"billing": {
"chargedCredits": "<string>"
},
"pollAfterMs": 123,
"nextPage": {
"skip": 123,
"limit": 123
}
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}Read async job result
Read the provider result of an async job, such as clado/bulk-contacts. Pass the apiCallId returned by the submit call. Locus reads the job id from that call’s receipt. Reads are free and never create a new charge, so polling the same call again is safe. Access follows the submit endpoint’s scope. Set waitSeconds to wait on the server for up to 45 seconds. When state is pending, call again after pollAfterMs. When nextPage is present, call again with its skip and limit to read the next page.
curl --request POST \
--url https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"waitSeconds": 0,
"skip": 1,
"limit": 2
}
'import requests
url = "https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result"
payload = {
"waitSeconds": 0,
"skip": 1,
"limit": 2
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({waitSeconds: 0, skip: 1, limit: 2})
};
fetch('https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result', 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.paywithlocus.com/api/wrapped/credits/calls/{callId}/result",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'waitSeconds' => 0,
'skip' => 1,
'limit' => 2
]),
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.paywithlocus.com/api/wrapped/credits/calls/{callId}/result"
payload := strings.NewReader("{\n \"waitSeconds\": 0,\n \"skip\": 1,\n \"limit\": 2\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"waitSeconds\": 0,\n \"skip\": 1,\n \"limit\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paywithlocus.com/api/wrapped/credits/calls/{callId}/result")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"waitSeconds\": 0,\n \"skip\": 1,\n \"limit\": 2\n}"
response = http.request(request)
puts response.read_body{
"apiCallId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "<string>",
"endpoint": "<string>",
"statusEndpoint": "<string>",
"jobId": "<string>",
"state": "pending",
"result": "<unknown>",
"billing": {
"chargedCredits": "<string>"
},
"pollAfterMs": 123,
"nextPage": {
"skip": 123,
"limit": 123
}
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"code": "<string>",
"message": "<string>"
}Authorizations
Tenant secret key (lcr_…). Server-side only.
Headers
Required only when the end-user JWT carries sid. Send the original high-entropy session value; sid is its SHA-256 fingerprint. Ignored for secret-key authentication.
16 - 128^[A-Za-z0-9][A-Za-z0-9._:-]{15,127}$Secret-key callers must repeat the original end user. Case-sensitive immutable ID in the tenant namespace. Prefer an identity-provider subject, not an email address.
1 - 200^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,199}$Path Parameters
The apiCallId of the submit call.
Body
Seconds to wait on the server for the job to finish. 0 reads the current state once.
0 <= x <= 45Result offset for paged results. Copy it from nextPage.
x >= 0Results per page for paged results. Copy it from nextPage.
x >= 1Response
Job state and provider result. No credits charged.
The submit endpoint.
The provider status endpoint Locus read.
pending, completed, failed The provider status body. When state is completed it holds the final result.
Show child attributes
Show child attributes
Present when state is pending.
Present when more result pages remain. Pass these values as skip and limit.
Show child attributes
Show child attributes