API Documentation

The Remeshy API provides programmatic access to remeshing technology for automatic 3D mesh optimization and retopology. Submit models via URL, customize processing settings, and receive optimized quad-based meshes in multiple formats.

Data Privacy & Security

Your 3D models are processed in isolation and never used for training. All files are automatically deleted after 24 hours. We never share your data with third parties.

Base URL
https://api.remeshy.com

Authentication

All API requests require authentication using an API key in the X-Api-Key header. Get your API key from the Dashboard.

X-Api-Key header Required

Your unique API key for authentication. Include in all API requests.

Format: rms_live_xxxxxxxxxxxxx

Credits & Pricing

Simple credit-based pricing. Credits are deducted when jobs are queued.

10
Standard Job
15
With Texture Baking
Credit Refunds

If a job fails due to processing errors (not invalid inputs), credits are automatically refunded to your account.

Quick Start

Get started in three simple steps:

1 Create a job

POST your model URL and settings to /api/jobs

2 Receive webhook (recommended)

Get notified when complete with download URLs, or poll GET /api/jobs/{job_id}

3 Download results

Use the signed URLs to download optimized meshes (valid 24 hours)

Create Job

POST /api/jobs

Submit a new mesh optimization job for processing.

Request Body

file_url string Required

Public URL to your 3D model file. Must be directly downloadable.

Supported: FBX, OBJ, GLB, GLTF, STL, PLY

settings object

Processing configuration options (see Parameters section for all available settings)

output_formats array

Default: ["fbx"]

Array of desired output formats. Available: fbx, obj, glb, gltf, stl, ply

webhook_url string

Your endpoint URL to receive completion notifications with download URLs

webhook_secret string

Secret key for HMAC-SHA256 signature verification (recommended for production)

Response

{ "job_id": "job_abc123...", "status": "queued", "credits_charged": 10, "message": "Job queued successfully" }

Get Job Status

GET /api/jobs/{job_id}

Retrieve detailed status and results for a specific job.

Use Webhooks Instead

We recommend using webhooks to receive download URLs immediately when jobs complete, rather than polling this endpoint. Signed URLs expire after 24 hours.

Response Fields

id string

Unique job identifier

status string

Current job status: queued, processing, completed, failed, cancelled

progress integer

Processing progress (0-100)

download_urls object

Signed URLs for downloading output files (available when status is completed)

processing_time_ms integer

Total processing time in milliseconds

created_at string

ISO 8601 timestamp when job was created

completed_at string

ISO 8601 timestamp when job completed

expires_at string

ISO 8601 timestamp when download URLs expire (24 hours after completion)

List Jobs

GET /api/jobs

Retrieve a list of your recent jobs with optional filtering.

Query Parameters

limit integer

Default: 20 • Range: 1-100

Number of jobs to return

status string

Filter by job status: queued, processing, completed, failed, cancelled

Response

{ "jobs": [ { "id": "job_abc123...", "status": "completed", "created_at": "2025-10-04T14:34:33Z", "credits_charged": 10, "processing_time_ms": 20000 } ], "count": 1 }

Core Settings

Essential parameters for controlling mesh optimization.

target_count integer

Default: 2500

Target number of quads. Higher values preserve more detail but increase file size.

adaptive_size float

Default: 50 • Range: 0-100

Controls how quad sizes adapt to surface detail. 0 = uniform quads, 100 = highly adaptive (smaller quads in detailed areas).

autodetect_hard_edges boolean

Default: true

Automatically detect and preserve hard edges (corners, seams). Recommended for mechanical models.

adapt_quad_count boolean

Default: true

Automatically adjust quad count based on model complexity and features.

quads_density float

Default: 1.0 • Range: 0.0-2.0

Quad density multiplier. Values above 1.0 create denser meshes, below 1.0 create sparser meshes.

angle_limit float

Default: 37.82 • Range: 0-180

Angle threshold in degrees for hard edge detection. Lower values detect more edges as "hard".

use_normals_splitting boolean

Default: false

Split vertex normals at hard edges for sharper appearance.

use_interpolation boolean

Default: true

Enable smooth interpolation between vertices for better surface quality.

symmetry_x boolean

Default: false

Enable X-axis symmetry constraint during remeshing.

symmetry_y boolean

Default: false

Enable Y-axis symmetry constraint during remeshing.

symmetry_z boolean

Default: false

Enable Z-axis symmetry constraint during remeshing.

Texture Baking

Additional Cost

Texture baking adds 5 extra credits (15 total per job). This feature transfers textures from the original high-poly mesh to the optimized low-poly mesh.

enable_baking boolean

Default: false

Enable texture baking from original to remeshed model. Adds 5 credits to job cost.

texture_resolution integer

Default: 2048 • Options: 512, 1024, 2048, 4096, 8192

Output texture resolution in pixels. Higher values preserve more detail but increase file size.

normal_intensity float

Default: 0.9 • Range: 0.0-1.0

Normal map baking intensity. Higher values create more pronounced surface details.

ray_distance_multiplier float

Default: 2.0 • Range: 0.1-10.0

Ray casting distance for texture projection. Increase if seeing missing texture areas or projection artifacts.

cage_extrusion_multiplier float

Default: 2.0 • Range: 0.1-10.0

Cage extrusion amount for baking. Increase to prevent edge artifacts and baking errors.

Mesh Repair

Automatic mesh cleanup and hole filling before remeshing.

close_holes boolean

Default: false

Automatically detect and close holes in the mesh before remeshing. Useful for scanned or damaged models.

max_hole_size integer

Default: 100 • Range: 12-2000

Maximum hole size to close, measured in number of boundary edges. Larger values will close bigger holes but may take longer.

Webhooks

Receive automatic notifications when jobs complete instead of polling. Webhooks include signed download URLs that are immediately ready to use.

Recommended Approach

Webhooks provide the best user experience by delivering download URLs immediately when processing completes, eliminating the need to poll the status endpoint.

Setup

Include webhook_url and optionally webhook_secret when creating a job:

webhook_url string

Your endpoint URL that will receive the POST request when the job completes.

webhook_secret string

Secret key for HMAC-SHA256 signature verification. Generate a random 32+ character string. Required for production to prevent spoofed requests.

Webhook Payload

Your endpoint receives a POST request with this structure:

{ "event": "job.completed", "job_id": "job_abc123...", "status": "completed", "download_urls": { "fbx": "https://...signed-url.fbx", "obj": "https://...signed-url.obj", "glb": "https://...signed-url.glb" }, "processing_time_ms": 20000, "timestamp": "2025-10-04T14:45:46.289567+00:00" }
event string

Event type. Currently only "job.completed" is sent.

download_urls object

Object containing signed URLs for all generated formats. URLs are valid for 24 hours.

Signature Verification

When you provide a webhook_secret, each webhook includes an X-Remeshy-Signature header containing an HMAC-SHA256 hash of the payload.

Error Handling

Standard HTTP status codes indicate success or failure.

200 OK

Request succeeded

400 Bad Request

Invalid parameters or malformed request body

401 Unauthorized

Invalid or missing API key

402 Payment Required

Insufficient credits to process job

404 Not Found

Job ID not found

429 Too Many Requests

Rate limit exceeded

500 Internal Server Error

Server error (credits automatically refunded)

Rate Limits

API rate limits to ensure fair usage and system stability.

POST /api/jobs

10 request per second - contact us if you need more

GET /api/jobs/*

10 requests per second