Authentication

All Makistry API requests are authenticated with a Bearer token.

API Keys

Format: mk_pub_<32 hex chars>

Header:

Authorization: Bearer mk_pub_YOUR_KEY

Security: Never put mk_pub_ keys in client-side code, browser JavaScript, or public repositories. Anyone who has the key can make API requests billed to your account. Store keys in environment variables or a secrets manager. If a key is ever exposed, revoke it from the dashboard immediately and issue a new one.

Creating a Key

From the dashboard, create a new API key. On creation you receive:

Field Description
api_key The full key (mk_pub_...) — shown once, never again. Contact support to retrieve.
signing_secret Used to verify webhook signatures — shown once, never again. Contact support to retrieve.
api_key_preview Last 4 characters of the key (safe to display in UIs)
name Human-readable label you assigned
created_at ISO 8601 creation timestamp
free_credits_remaining Credits added on key creation

Store both api_key and signing_secret securely at creation time.

Rotating the Signing Secret

If your signing secret is ever compromised, rotate it without affecting the API key from the dashboard. The rotation takes effect immediately — webhooks will use the new secret for all deliveries from that point on. The old secret stops working instantly, so update your webhook handler before rotating if you need zero-downtime rotation.

Revoking a Key

From the dashboard, revoke a key to permanently invalidate it. Requests using a revoked key return 401 invalid_api_key.


Idempotency

Add an Idempotency-Key header to POST requests to safely retry network failures without creating duplicate jobs or double-charging:

Idempotency-Key: a1b2c3d4-e5f6-7890-abcd-ef1234567890
  • Use a UUID v4 generated fresh for each distinct request
  • If the server receives the same key again, it returns the original job_id — even if the request body differs
  • Edge case: the same idempotency key always returns the original job, regardless of what body you send. If you want a new job, use a new UUID.
  • No additional charge is incurred on idempotent replays

Recommended pattern for retrying network failures:

import uuid, httpx, time

def submit_with_retry(prompt: str, max_attempts: int = 3) -> str:
    idem_key = str(uuid.uuid4())  # one key per logical request
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Idempotency-Key": idem_key,
    }
    for attempt in range(max_attempts):
        try:
            resp = httpx.post(f"{BASE}/text-to-cad", headers=headers,
                              json={"prompt": prompt, "output_format": "STEP"})
            resp.raise_for_status()
            return resp.json()["job_id"]
        except httpx.NetworkError:
            if attempt == max_attempts - 1:
                raise
            time.sleep(2 ** attempt)

Making an Authenticated Request

curl

curl https://api.makistry.ai/v1/jobs \
  -H "Authorization: Bearer mk_pub_YOUR_KEY"

Python

import httpx

client = httpx.Client(headers={"Authorization": "Bearer mk_pub_YOUR_KEY"})
resp = client.get("https://api.makistry.ai/v1/jobs")
resp.raise_for_status()
print(resp.json())

Node.js

const resp = await fetch("https://api.makistry.ai/v1/jobs", {
  headers: { "Authorization": "Bearer mk_pub_YOUR_KEY" },
});
const data = await resp.json();

Error Responses

HTTP error_code Cause
401 invalid_api_key Missing Authorization header, wrong format, or revoked key
403 Attempting to use a public API key on an internal route