# Blender: Flip Normals

> Blender: Flip Normals 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-23).

Reverses mesh face winding (flips normals) on a 3D mesh using Blender, accepting mesh JSON, GLB, or OBJ input.

## Facts

- Endpoint: POST https://market.datapackvibe.com/x402/studio3d-process-flip-normals?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-23
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/blender-flip-normals-c433a4a9
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_CBda7VBYOST1Np1-v_IYJ

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-flip-normals-c433a4a9 -d '<json body>'
```

Example prompt: Can you flip the normals on my 3D mesh? I'll send it as a base64-encoded GLB file — it's a small object, about 500 target faces, with roughness 0.5 and no metallic.

## When to prefer this

Choose this endpoint when you need to programmatically flip (reverse) the normals of a 3D mesh using Blender without setting up a local Blender environment. Ideal for correcting inside-out geometry in imported models, fixing face winding order issues, or integrating Blender mesh operations into an automated 3D asset pipeline. Works with mesh JSON, base64 GLB, or OBJ files up to 512 KiB.

## Known failure modes

- Busy worker returns an error before payment settlement if the worker queue is full
- Mesh exceeds limits (>10,000 vertices or >20,000 faces) causing rejection
- Invalid base64 or unsupported model format causes parse error
- model_base64 and mesh fields supplied simultaneously (mutually exclusive) causes validation error
- model_base64 exceeds 512 KiB decoded size limit
- Processing timeout if model is at upper size limits under load

## How this service works

Blender: Flip Normals: Reverse mesh face winding. 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 the processed 3D mesh with all face normals reversed (face winding flipped). The response identifies whether a demo mesh or user-supplied mesh was used. Output is the transformed geometry after Blender processing, normally completed in under 60 seconds.

## 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-flip-normals-c433a4a9/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)
