Java Example
The example below checks authentication, starts a Worker run, then reads results with the returned run_slug.
YOUR_WORKER_ID is a placeholder. Replace it with a Worker slug, or encode an owner/name path as owner~name. Build input from that Worker’s input schema; fields differ by Worker.
The example uses is_async: true for async submit-and-poll behavior. Set is_async to false when the caller should wait for execution to finish, and use offset / limit to control the synchronous result window.
// Java 11+import java.net.URI;import java.net.URLEncoder;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.nio.charset.StandardCharsets;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;
public class CoreClawExample { static final String API_BASE_URL = "https://openapi.coreclaw.com"; static final String API_KEY = System.getenv("CORECLAW_API_KEY"); static final String WORKER_ID = System.getenv().getOrDefault("CORECLAW_WORKER_ID", "YOUR_WORKER_ID"); static final HttpClient HTTP = HttpClient.newHttpClient();
public static void main(String[] args) throws Exception { if (API_KEY == null || API_KEY.isBlank()) throw new IllegalStateException("Set CORECLAW_API_KEY first.");
String account = request("GET", "/api/v2/users/account", null, null); System.out.println(account);
String runBody = "{" + "\"input\":{\"parameters\":{\"custom\":{" + "\"keywords\":[\"coffee\"]," + "\"base_location\":\"New York,USA\"," + "\"max_results\":1" + "}}}," + "\"is_async\":true," + "\"offset\":0," + "\"limit\":20" + "}"; String run = request("POST", "/api/v2/workers/" + encode(WORKER_ID) + "/runs", null, runBody); System.out.println(run);
String runId = extract(run, "\\\"run_slug\\\"\\s*:\\s*\\\"([^\\\"]+)\\\""); String results = request("GET", "/api/v2/worker-runs/" + encode(runId) + "/result", Map.of("offset", "0", "limit", "20"), null); System.out.println(results); }
static String request(String method, String path, Map<String, String> query, String body) throws Exception { URI uri = URI.create(API_BASE_URL + path + queryString(query)); HttpRequest.Builder builder = HttpRequest.newBuilder(uri) .header("Authorization", "Bearer " + API_KEY) .method(method, body == null ? HttpRequest.BodyPublishers.noBody() : HttpRequest.BodyPublishers.ofString(body)); if (body != null) builder.header("Content-Type", "application/json"); HttpResponse<String> response = HTTP.send(builder.build(), HttpResponse.BodyHandlers.ofString()); if (response.statusCode() < 200 || response.statusCode() >= 300) { throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body()); } return response.body(); }
static String queryString(Map<String, String> query) { if (query == null || query.isEmpty()) return ""; return "?" + query.entrySet().stream() .map(e -> encode(e.getKey()) + "=" + encode(e.getValue())) .reduce((a, b) -> a + "&" + b) .orElse(""); }
static String encode(String value) { return URLEncoder.encode(value, StandardCharsets.UTF_8); }
static String extract(String text, String regex) { Matcher matcher = Pattern.compile(regex).matcher(text); if (!matcher.find()) throw new IllegalStateException("run_slug not found in response: " + text); return matcher.group(1); }}