# Blender Join Meshes

> Blender Join Meshes is a paid API for AI agents from market.datapackvibe.com, paid per call via x402, $0.02/call, status unknown (last checked 2026-10-16).

Combines multiple imported mesh objects into a single unified mesh while preserving disconnected geometry islands, running locally in Blender.

## Facts

- Endpoint: POST https://market.datapackvibe.com/x402/studio3d-process-join-meshes?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-16
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/blender-join-meshes-5b83b3a2
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_z9fo75cUFjNQS5VptctXD

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability blender-join-meshes-5b83b3a2 -d '<json body>'
```

Example prompt: Take my mesh data — 4 vertices and 2 triangular faces — and join it into a single combined mesh using the Blender join-meshes processor, targeting 500 faces, with a blue color #6688bb and roughness 0.5.

## When to prefer this

Choose this endpoint when you need to programmatically join multiple 3D mesh objects into a single mesh using Blender's geometry engine, especially when working with raw mesh JSON, GLB, or OBJ files and need the result to preserve disconnected islands. It is well-suited for automated 3D asset pipelines that need reliable, bounded-time mesh consolidation without running a local Blender install. Prefer this over generic mesh tools when you want Blender-native join semantics with configurable material properties like color, roughness, and metallic values.

## Known failure modes

- Input mesh exceeds 10,000 vertices or 20,000 faces — rejected before processing
- base64-encoded model exceeds 512 KiB decoded limit — rejected
- Both mesh JSON and model_base64 supplied simultaneously — mutually exclusive inputs
- Busy worker returns an error before payment settlement — no charge incurred
- Invalid face indices referencing out-of-range vertices — processing error
- Unsupported model_format value outside glb/obj enum — validation error
- model_base64 contains embedded images or animations (not supported for GLB)

## How this service works

Blender: Join Meshes: Combine imported mesh objects into one mesh, preserving disconnected islands. Accepts mesh JSON, small GLB or OBJ; without input uses an explicitly labelled demo mesh. Runs locally in Blender. Bounded small-model processing, normally under 60 seconds; a busy worker returns an error before payment settlement.

## Output

Returns a joined mesh result from Blender representing all input mesh objects combined into a single unified geometry, preserving disconnected islands. The response identifies whether a demo mesh was used and includes the processed mesh data.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "mesh": {
   "type": "object",
   "required": [
    "vertices",
    "faces"
   ],
   "properties": {
    "faces": {
     "type": "array",
     "items": {
      "type": "array",
      "items": {
       "type": "integer",
       "minimum": 0
      },
      "maxItems": 16,
      "minItems": 3
     },
     "maxItems": 20000
    },
    "vertices": {
     "type": "array",
     "items": {
      "type": "array",
      "items": {
       "type": "number"
      },
      "maxItems": 3,
      "minItems": 3
     },
     "maxItems": 10000
    }
   },
   "description": "Optional mesh in Blender Z-up coordinates. Max 10,000 vertices and 20,000 faces; each face has 3..16 indices.",
   "additionalProperties": false
  },
  "seed": {
   "type": "integer",
   "default": 42,
   "maximum": 2147483647,
   "minimum": 0
  },
  "angle": {
   "type": "number",
   "default": 45,
   "maximum": 180,
   "minimum": -180
  },
  "color": {
   "type": "string",
   "default": "#6688bb",
   "pattern": "^#[0-9a-fA-F]{6}$"
  },
  "count": {
   "type": "integer",
   "default": 3,
   "maximum": 8,
   "minimum": 2
  },
  "amount": {
   "type": "number",
   "default": 0.05,
   "maximum": 0.5,
   "minimum": 0.001
  },
  "factor": {
   "type": "number",
   "default": 1,
   "maximum": 5,
   "minimum": 0.1
  },
  "sample": {
   "enum": [
    "demo"
   ],
   "type": "string",
   "default": "demo",
   "description": "If no model is supplied, process the included demonstration mesh; response identifies this explicitly."
  },
  "metallic": {
   "type": "number",
   "default": 0,
   "maximum": 1,
   "minimum": 0
  },
  "roughness": {
   "type": "number",
   "default": 0.5,
   "maximum": 1,
   "minimum": 0
  },
  "resolution": {
   "type": "integer",
   "default": 256,
   "maximum": 512,
   "minimum": 128
  },
  "model_base64": {
   "type": "string",
   "maxLength": 699052,
   "description": "Optional base64 GLB (geometry and PBR values, without images/animations) or OBJ geometry, at most 512 KiB decoded. Mutually exclusive with mesh. No URLs or local paths."
  },
  "model_format": {
   "enum": [
    "glb",
    "obj"
   ],
   "type": "string",
   "default": "glb"
  },
  "target_faces": {
   "type": "integer",
   "default": 500,
   "maximum": 20000,
   "minimum": 20
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/blender-join-meshes-5b83b3a2/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from market.datapackvibe.com](https://www.zero.xyz/host/market.datapackvibe.com/llms.txt)
