New: Over 200+ new PBR materials added this month — Explore the collection
Start Free Trial
Developer Documentation

API Referentie

De ultieme PBR-texturen voor creatieve professionals

Abstract technical visualization representing the TextuurHaven REST API architecture and data pipeline

The TextuurHaven REST API gives developers programmatic access to our library of 12,400+ production-ready PBR texture sets. Fetch metadata, search by material type or resolution, and download assets directly into your pipeline — all through a single authenticated endpoint at api.textuurhaven.com/v1.

Rate limits: 300 requests per minute on the Standard plan, 1,200 on Pro. All responses are JSON-encoded. Assets are delivered via signed URLs that expire after 3600 seconds.

Authentication

Every request must include your API key in the Authorization header. Keys are scoped to your account tier and can be rotated from the developer dashboard.

API Key Header

Include Authorization: Bearer <your_api_key> on every request. Keys are 64-character hex strings generated in your account settings under Settings → API Access.

Signed Download URLs

Asset download endpoints return time-limited signed URLs (TTL: 3600s). No additional auth is needed for the actual file transfer — the signature is embedded in the URL query string.

Rate Limiting

Standard tier: 300 req/min. Pro tier: 1,200 req/min. Burst allowance of 50 requests per second. Exceeded limits return 429 Too Many Requests with a Retry-After header.

Endpoints

Six core endpoints cover metadata retrieval, full-text search, and asset download. All paths are relative to https://api.textuurhaven.com/v1.

GET /textures

List all textures with pagination. Supports query parameters ?page, ?limit (max 100), ?sort (created_at, downloads, rating), and ?category (wood, metal, fabric, stone, concrete, plastic).

Response includes id, name, resolution, format (PNG/EXR), file size in bytes, and a thumbnail URL.

GET /textures/:id

Retrieve full metadata for a single texture set. Returns all channels (albedo, normal, roughness, metallic, displacement, AO), licensing info, creator attribution, and download URLs for each resolution variant.

GET /search

Full-text search across texture names, tags, and descriptions. Parameters: ?q (required), ?category, ?resolution (2K, 4K, 8K), ?license (standard, extended). Returns ranked results with relevance score.

GET /textures/:id/download

Initiate a download for a specific texture set. Query parameter ?resolution (2K, 4K, 8K) selects the variant. Returns a JSON object with a signed URL valid for 3600 seconds and an expiration timestamp.

GET /categories

List all available texture categories with item counts. Returns an array of objects: { id, name, slug, texture_count, featured_texture_id }.

GET /health

Service health check. Returns 200 OK with a JSON payload containing uptime in seconds, active endpoints, and current rate-limit window status. No authentication required.

Examples

Concrete request and response examples to get your integration running quickly.

Search for 4K Wood Textures

Request:

GET /search?q=walnut&category=wood&resolution=4K
Authorization: Bearer a3f8c1...e92d

Response (200):

{
  "results": [
    {
      "id": "tx-4821",
      "name": "American Black Walnut 4K",
      "resolution": "4096x4096",
      "channels": ["albedo", "normal", "roughness", "metallic", "displacement"],
      "file_size_mb": 148.3,
      "downloads": 3847,
      "rating": 4.8
    }
  ],
  "total": 23
}

Download a Texture Set

Request:

GET /textures/tx-4821/download?resolution=4K
Authorization: Bearer a3f8c1...e92d

Response (200):

{
  "texture_id": "tx-4821",
  "resolution": "4K",
  "signed_url": "https://cdn.textuurhaven.com/dl/tx-4821/4K?sig=...&exp=1709827200",
  "expires_in_seconds": 3600,
  "total_size_mb": 148.3
}

Use the signed_url in a direct file transfer. No additional headers required.

Paginate Through All Textures

Request:

GET /textures?page=2&limit=50&sort=downloads
Authorization: Bearer a3f8c1...e92d

Response (200):

{
  "textures": [ ... ],
  "pagination": {
    "page": 2,
    "limit": 50,
    "total_items": 12487,
    "total_pages": 249
  }
}

Get Your API Key Full OpenAPI Spec (JSON)
```html
Developer Documentation

API Referentie

De ultieme PBR-texturen voor creatieve professionals

Abstract technical visualization representing the TextuurHaven REST API architecture and data pipeline

The TextuurHaven REST API gives developers programmatic access to our library of 12,400+ production-ready PBR texture sets. Fetch metadata, search by material type or resolution, and download assets directly into your pipeline — all through a single authenticated endpoint at api.textuurhaven.com/v1.

Rate limits: 300 requests per minute on the Standard plan, 1,200 on Pro. All responses are JSON-encoded. Assets are delivered via signed URLs that expire after 3600 seconds.

Authentication

Every request must include your API key in the Authorization header. Keys are scoped to your account tier and can be rotated from the developer dashboard.

API Key Header

Include Authorization: Bearer <your_api_key> on every request. Keys are 64-character hex strings generated in your account settings under Settings → API Access.

Signed Download URLs

Asset download endpoints return time-limited signed URLs (TTL: 3600s). No additional auth is needed for the actual file transfer — the signature is embedded in the URL query string.

Rate Limiting

Standard tier: 300 req/min. Pro tier: 1,200 req/min. Burst allowance of 50 requests per second. Exceeded limits return 429 Too Many Requests with a Retry-After header.

Endpoints

Six core endpoints cover metadata retrieval, full-text search, and asset download. All paths are relative to https://api.textuurhaven.com/v1.

GET /textures

List all textures with pagination. Supports query parameters ?page, ?limit (max 100), ?sort (created_at, downloads, rating), and ?category (wood, metal, fabric, stone, concrete, plastic).

Response includes id, name, resolution, format (PNG/EXR), file size in bytes, and a thumbnail URL.

GET /textures/:id

Retrieve full metadata for a single texture set. Returns all channels (albedo, normal, roughness, metallic, displacement, AO), licensing info, creator attribution, and download URLs for each resolution variant.

GET /search

Full-text search across texture names, tags, and descriptions. Parameters: ?q (required), ?category, ?resolution (2K, 4K, 8K), ?license (standard, extended). Returns ranked results with relevance score.

GET /textures/:id/download

Initiate a download for a specific texture set. Query parameter ?resolution (2K, 4K, 8K) selects the variant. Returns a JSON object with a signed URL valid for 3600 seconds and an expiration timestamp.

GET /categories

List all available texture categories with item counts. Returns an array of objects: { id, name, slug, texture_count, featured_texture_id }.

GET /health

Service health check. Returns 200 OK with a JSON payload containing uptime in seconds, active endpoints, and current rate-limit window status. No authentication required.

Examples

Concrete request and response examples to get your integration running quickly.

Search for 4K Wood Textures

Request:

GET /search?q=walnut&category=wood&resolution=4K
Authorization: Bearer a3f8c1...e92d

Response (200):

{
  "results": [
    {
      "id": "tx-4821",
      "name": "American Black Walnut 4K",
      "resolution": "4096x4096",
      "channels": ["albedo", "normal", "roughness", "metallic", "displacement"],
      "file_size_mb": 148.3,
      "downloads": 3847,
      "rating": 4.8
    }
  ],
  "total": 23
}

Download a Texture Set

Request:

GET /textures/tx-4821/download?resolution=4K
Authorization: Bearer a3f8c1...e92d

Response (200):

{
  "texture_id": "tx-4821",
  "resolution": "4K",
  "signed_url": "https://cdn.textuurhaven.com/dl/tx-4821/4K?sig=...&exp=1709827200",
  "expires_in_seconds": 3600,
  "total_size_mb": 148.3
}

Use the signed_url in a direct file transfer. No additional headers required.

Paginate Through All Textures

Request:

GET /textures?page=2&limit=50&sort=downloads
Authorization: Bearer a3f8c1...e92d

Response (200):

{
  "textures": [ ... ],
  "pagination": {
    "page": 2,
    "limit": 50,
    "total_items": 12487,
    "total_pages": 249
  }
}