API Endpoints

Complete reference for all copyto.design API endpoints.

Need an API Key?

All endpoints require authentication. Create your API key to start making requests.

Create API Key →

Convert HTML to Figma

Convert HTML code or a URL to Figma format.

Endpoint

POST /v1/convert

Request Body

{
  "html": "<div>Your HTML here</div>",
  "url": "https://example.com",
  "format": "figma",
  "options": {
    "viewport": {
      "width": 1440,
      "height": 900
    },
    "waitForSelector": ".content",
    "screenshot": false
  }
}

Parameters

ParameterTypeRequiredDescription
htmlstringconditionalHTML code to convert (required if url not provided)
urlstringconditionalURL to fetch and convert (required if html not provided)
formatstringoptionalOutput format: figma (default), fig
optionsobjectoptionalAdditional conversion options

Options

OptionTypeDefaultDescription
viewport.widthnumber1440Viewport width for URL conversion
viewport.heightnumber900Viewport height for URL conversion
waitForSelectorstringnullCSS selector to wait for before conversion
screenshotbooleanfalseInclude screenshot in response

Response

{
  "success": true,
  "data": {
    "id": "conv_abc123",
    "figmaUrl": "https://www.figma.com/file/...",
    "downloadUrl": "https://cdn.copyto.design/files/conv_abc123.fig",
    "screenshot": "https://cdn.copyto.design/screenshots/conv_abc123.png",
    "metadata": {
      "nodes": 42,
      "layers": 15,
      "processingTime": 234,
      "dimensions": {
        "width": 1440,
        "height": 900
      }
    }
  }
}

Example: Convert HTML

const response = await fetch('https://api.copyto.design/v1/convert', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ct_sk_abc123...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    html: `
      <div style="padding: 40px; background: #f9fafb; border-radius: 8px;">
        <h1 style="margin: 0 0 16px; font-size: 32px; color: #111827;">
          Welcome to copyto.design
        </h1>
        <p style="margin: 0; color: #6b7280; font-size: 16px;">
          Convert HTML to Figma instantly
        </p>
      </div>
    `,
    format: 'figma'
  })
});
 
const data = await response.json();
console.log('Figma URL:', data.data.figmaUrl);
console.log('Download:', data.data.downloadUrl);

Example: Convert URL

const response = await fetch('https://api.copyto.design/v1/convert', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ct_sk_abc123...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    url: 'https://tailwindcss.com',
    options: {
      viewport: {
        width: 1920,
        height: 1080
      },
      waitForSelector: '.hero'
    }
  })
});
 
const data = await response.json();

Example: Python

import requests
 
response = requests.post(
  'https://api.copyto.design/v1/convert',
  headers={
    'Authorization': 'Bearer ct_sk_abc123...',
    'Content-Type': 'application/json'
  },
  json={
    'html': '<div><h1>Hello Figma</h1></div>',
    'format': 'figma'
  }
)
 
data = response.json()
print('Figma URL:', data['data']['figmaUrl'])

Example: cURL

curl -X POST https://api.copyto.design/v1/convert \
  -H "Authorization: Bearer ct_sk_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "html": "<div><h1>Hello Figma</h1></div>",
    "format": "figma"
  }'

Error Handling

All endpoints return consistent error responses:

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message",
    "details": {}
  }
}

Common Error Codes

CodeStatusDescription
INVALID_HTML400HTML is malformed
INVALID_URL400URL is not accessible
FILE_TOO_LARGE400Input exceeds size limits
UNAUTHORIZED401Invalid or missing API key
RATE_LIMIT_EXCEEDED429Too many requests
CONVERSION_FAILED500Conversion process failed
NOT_FOUND404Resource not found

Next Steps


© 2025 $copyto.design. Transform any design to Figma.