curl --request POST \
--url https://api.mixpeek.com/v1/signup/agent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "dev@example.com",
"accept_terms": true,
"agent_name": "Claude Code"
}
'import requests
url = "https://api.mixpeek.com/v1/signup/agent"
payload = {
"email": "dev@example.com",
"accept_terms": True,
"agent_name": "Claude Code"
}
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({email: 'dev@example.com', accept_terms: true, agent_name: 'Claude Code'})
};
fetch('https://api.mixpeek.com/v1/signup/agent', 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.mixpeek.com/v1/signup/agent",
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([
'email' => 'dev@example.com',
'accept_terms' => true,
'agent_name' => 'Claude Code'
]),
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.mixpeek.com/v1/signup/agent"
payload := strings.NewReader("{\n \"email\": \"dev@example.com\",\n \"accept_terms\": true,\n \"agent_name\": \"Claude Code\"\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.mixpeek.com/v1/signup/agent")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"dev@example.com\",\n \"accept_terms\": true,\n \"agent_name\": \"Claude Code\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/signup/agent")
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 \"email\": \"dev@example.com\",\n \"accept_terms\": true,\n \"agent_name\": \"Claude Code\"\n}"
response = http.request(request)
puts response.read_body{
"api_key": "<string>",
"key_expires_at": "2023-11-07T05:31:56Z",
"status": "<string>",
"confirmation_sent_to": "<string>",
"organization_id": "<string>",
"namespace": "<string>",
"bucket": "<string>",
"retriever": "<string>",
"credits": 123,
"next_steps": [
"<string>"
],
"docs_url": "<string>",
"namespace_id": "<string>"
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Sign up as an agent
Create a Mixpeek organization and API key without a browser. Send the email of the person you work for and accept_terms=true. The response carries a working API key (shown once), a namespace with a bucket, a collection and a retriever, and the calls that take a file to a search result. The email owner gets one email: confirming keeps the key, otherwise it expires 72 hours after signup, and blocking revokes it and refuses later agent signups for that email. One pending signup per email; limited per IP address per hour.
curl --request POST \
--url https://api.mixpeek.com/v1/signup/agent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "dev@example.com",
"accept_terms": true,
"agent_name": "Claude Code"
}
'import requests
url = "https://api.mixpeek.com/v1/signup/agent"
payload = {
"email": "dev@example.com",
"accept_terms": True,
"agent_name": "Claude Code"
}
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({email: 'dev@example.com', accept_terms: true, agent_name: 'Claude Code'})
};
fetch('https://api.mixpeek.com/v1/signup/agent', 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.mixpeek.com/v1/signup/agent",
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([
'email' => 'dev@example.com',
'accept_terms' => true,
'agent_name' => 'Claude Code'
]),
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.mixpeek.com/v1/signup/agent"
payload := strings.NewReader("{\n \"email\": \"dev@example.com\",\n \"accept_terms\": true,\n \"agent_name\": \"Claude Code\"\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.mixpeek.com/v1/signup/agent")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"dev@example.com\",\n \"accept_terms\": true,\n \"agent_name\": \"Claude Code\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/signup/agent")
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 \"email\": \"dev@example.com\",\n \"accept_terms\": true,\n \"agent_name\": \"Claude Code\"\n}"
response = http.request(request)
puts response.read_body{
"api_key": "<string>",
"key_expires_at": "2023-11-07T05:31:56Z",
"status": "<string>",
"confirmation_sent_to": "<string>",
"organization_id": "<string>",
"namespace": "<string>",
"bucket": "<string>",
"retriever": "<string>",
"credits": 123,
"next_steps": [
"<string>"
],
"docs_url": "<string>",
"namespace_id": "<string>"
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Keys this body does not declare are refused with 422 extra_forbidden naming the accepted keys (since 2026-11-02).
What an agent sends to get its own API key.
Email of the person the agent works for. They get one email with a link to keep the key and a link to block it. Until they confirm, the key expires 72 hours after signup.
"dev@example.com"
Must be true: the email owner's use is governed by the terms at https://mixpeek.com/terms
Name of the agent or tool signing up, shown in that email.
80"Claude Code"
Response
Successful Response
The key and workspace an agent gets back. The key is shown only here.
Send as 'Authorization: Bearer <api_key>'. Returned once; Mixpeek stores only its hash.
When the key stops working unless the email owner confirms.
pending_confirmation until the email owner confirms.
The email that was sent.
The new organization.
Send as the 'X-Namespace' header. It holds a bucket, a collection and a retriever, ready to index and search.
Bucket to upload files into.
Retriever to search with.
Credits the organization starts with.
The calls that take a file to a search result.
Full API reference.
Namespace id, or null if it is still being created.
Was this page helpful?

