curl --request POST \
--url https://api.mixpeek.com/v1/organizations/billing/subscribe \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"plan": "managed_build",
"success_url": "https://studio.mixpeek.com/billing?subscription=success",
"cancel_url": "https://studio.mixpeek.com/billing?subscription=cancelled",
"onboarding_answers": {
"building": "<string>",
"referral_source": "<string>"
},
"promo_code": "<string>"
}
'import requests
url = "https://api.mixpeek.com/v1/organizations/billing/subscribe"
payload = {
"plan": "managed_build",
"success_url": "https://studio.mixpeek.com/billing?subscription=success",
"cancel_url": "https://studio.mixpeek.com/billing?subscription=cancelled",
"onboarding_answers": {
"building": "<string>",
"referral_source": "<string>"
},
"promo_code": "<string>"
}
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({
plan: 'managed_build',
success_url: 'https://studio.mixpeek.com/billing?subscription=success',
cancel_url: 'https://studio.mixpeek.com/billing?subscription=cancelled',
onboarding_answers: {building: '<string>', referral_source: '<string>'},
promo_code: '<string>'
})
};
fetch('https://api.mixpeek.com/v1/organizations/billing/subscribe', 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/organizations/billing/subscribe",
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([
'plan' => 'managed_build',
'success_url' => 'https://studio.mixpeek.com/billing?subscription=success',
'cancel_url' => 'https://studio.mixpeek.com/billing?subscription=cancelled',
'onboarding_answers' => [
'building' => '<string>',
'referral_source' => '<string>'
],
'promo_code' => '<string>'
]),
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/organizations/billing/subscribe"
payload := strings.NewReader("{\n \"plan\": \"managed_build\",\n \"success_url\": \"https://studio.mixpeek.com/billing?subscription=success\",\n \"cancel_url\": \"https://studio.mixpeek.com/billing?subscription=cancelled\",\n \"onboarding_answers\": {\n \"building\": \"<string>\",\n \"referral_source\": \"<string>\"\n },\n \"promo_code\": \"<string>\"\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/organizations/billing/subscribe")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"plan\": \"managed_build\",\n \"success_url\": \"https://studio.mixpeek.com/billing?subscription=success\",\n \"cancel_url\": \"https://studio.mixpeek.com/billing?subscription=cancelled\",\n \"onboarding_answers\": {\n \"building\": \"<string>\",\n \"referral_source\": \"<string>\"\n },\n \"promo_code\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/organizations/billing/subscribe")
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 \"plan\": \"managed_build\",\n \"success_url\": \"https://studio.mixpeek.com/billing?subscription=success\",\n \"cancel_url\": \"https://studio.mixpeek.com/billing?subscription=cancelled\",\n \"onboarding_answers\": {\n \"building\": \"<string>\",\n \"referral_source\": \"<string>\"\n },\n \"promo_code\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"checkout_url": "https://checkout.stripe.com/c/pay/cs_live_abc123",
"session_id": "cs_live_abc123"
}{
"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
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Subscribe To Plan
Subscribe to a paid plan via Stripe Checkout.
Creates a Stripe Checkout Session in subscription mode. After payment, the organization’s account_type is updated via webhook.
If the organization already has an active subscription, the plan is changed inline (upgrade/downgrade with proration) instead of creating a new checkout session.
Available Plans (tier minimum is a billing floor; usage above it bills automatically):
managed_build: Managed Mixpeek Build — $25/mo min, 100K objects/momanaged_scale: Managed Mixpeek Scale — $250/mo min, 1M objects/momvs_build: MVS Standalone Build — $25/mo min, 1M vectorsmvs_scale: MVS Standalone Scale — $250/mo min, 25M vectors
Discounts: each non-empty onboarding_answers field takes 5offthefirstinvoice(max10). An explicit promo_code is validated and
pre-applied; when both are sent the promo takes checkout’s single
discount slot and the onboarding credit lands on the customer balance.
Without either, Stripe’s own promo-code field is enabled at checkout.
curl --request POST \
--url https://api.mixpeek.com/v1/organizations/billing/subscribe \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"plan": "managed_build",
"success_url": "https://studio.mixpeek.com/billing?subscription=success",
"cancel_url": "https://studio.mixpeek.com/billing?subscription=cancelled",
"onboarding_answers": {
"building": "<string>",
"referral_source": "<string>"
},
"promo_code": "<string>"
}
'import requests
url = "https://api.mixpeek.com/v1/organizations/billing/subscribe"
payload = {
"plan": "managed_build",
"success_url": "https://studio.mixpeek.com/billing?subscription=success",
"cancel_url": "https://studio.mixpeek.com/billing?subscription=cancelled",
"onboarding_answers": {
"building": "<string>",
"referral_source": "<string>"
},
"promo_code": "<string>"
}
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({
plan: 'managed_build',
success_url: 'https://studio.mixpeek.com/billing?subscription=success',
cancel_url: 'https://studio.mixpeek.com/billing?subscription=cancelled',
onboarding_answers: {building: '<string>', referral_source: '<string>'},
promo_code: '<string>'
})
};
fetch('https://api.mixpeek.com/v1/organizations/billing/subscribe', 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/organizations/billing/subscribe",
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([
'plan' => 'managed_build',
'success_url' => 'https://studio.mixpeek.com/billing?subscription=success',
'cancel_url' => 'https://studio.mixpeek.com/billing?subscription=cancelled',
'onboarding_answers' => [
'building' => '<string>',
'referral_source' => '<string>'
],
'promo_code' => '<string>'
]),
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/organizations/billing/subscribe"
payload := strings.NewReader("{\n \"plan\": \"managed_build\",\n \"success_url\": \"https://studio.mixpeek.com/billing?subscription=success\",\n \"cancel_url\": \"https://studio.mixpeek.com/billing?subscription=cancelled\",\n \"onboarding_answers\": {\n \"building\": \"<string>\",\n \"referral_source\": \"<string>\"\n },\n \"promo_code\": \"<string>\"\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/organizations/billing/subscribe")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"plan\": \"managed_build\",\n \"success_url\": \"https://studio.mixpeek.com/billing?subscription=success\",\n \"cancel_url\": \"https://studio.mixpeek.com/billing?subscription=cancelled\",\n \"onboarding_answers\": {\n \"building\": \"<string>\",\n \"referral_source\": \"<string>\"\n },\n \"promo_code\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/organizations/billing/subscribe")
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 \"plan\": \"managed_build\",\n \"success_url\": \"https://studio.mixpeek.com/billing?subscription=success\",\n \"cancel_url\": \"https://studio.mixpeek.com/billing?subscription=cancelled\",\n \"onboarding_answers\": {\n \"building\": \"<string>\",\n \"referral_source\": \"<string>\"\n },\n \"promo_code\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"checkout_url": "https://checkout.stripe.com/c/pay/cs_live_abc123",
"session_id": "cs_live_abc123"
}{
"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
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Authorizations
Mixpeek API key, sent as Authorization: Bearer mxp_sk_.... Create one in Studio under Settings → API Keys, or with an admin key via POST /v1/organizations/users/{user_email}/api-keys. A missing header returns 403; an invalid or revoked key returns 401.
Body
Request to subscribe to a plan.
Plan slug: managed_build, managed_scale, mvs_build, mvs_scale. The tier minimum is a billing floor — usage above it bills automatically at the plan's rates.
"managed_build"
"mvs_scale"
Redirect URL after successful subscription
Redirect URL if subscription is cancelled
Optional signup questions; each non-empty answer = $5 off the first invoice (max $10).
Show child attributes
Show child attributes
Optional promo code to pre-apply at checkout. When combined with onboarding answers, the promo takes checkout's single discount slot and the onboarding credit lands on the customer balance.
64Response
Successful Response
Was this page helpful?

