# Ideogram Vectorize 1.0

IMAGEFeaturedideogram-vectorize

**Ideogram Vectorize 1.0** converts a raster image into a scalable SVG with [Ideogram](https://ideogram.ai/)’s vector model. On Layer it takes one source image and returns vector artwork that stays sharp at any size. Use it for logos, icons, and illustrations you already have as pixels.

Best for

Turning logos and icons into scalable SVG, Converting existing artwork into vector paths

POST

/v2/workspaces/{workspace\_id}/base-models/ideogram-vectorize/inferences

```bash
curl --request POST \
  --url https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "guidance_file_init_image": [
    {
      "url": "<file_url>"
    }
  ]
}'
```

```python
import requests


url = "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences"


payload = { "guidance_file_init_image": [{ "url": "<file_url>" }] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}


response = requests.post(url, json=payload, headers=headers)


print(response.json())
```

```js
const url = 'https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"guidance_file_init_image":[{"url":"<file_url>"}]}'
};


try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main


import (
  "fmt"
  "strings"
  "net/http"
  "io"
)


func main() {


  url := "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences"


  payload := strings.NewReader("{\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}")


  req, _ := http.NewRequest("POST", url, payload)


  req.Header.Add("Authorization", "Bearer <token>")
  req.Header.Add("Content-Type", "application/json")


  res, _ := http.DefaultClient.Do(req)


  defer res.Body.Close()
  body, _ := io.ReadAll(res.Body)


  fmt.Println(res)
  fmt.Println(string(body))


}
```

```php
<?php


$curl = curl_init();


curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'guidance_file_init_image' => [
        [
                'url' => '<file_url>'
        ]
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json"
  ],
]);


$response = curl_exec($curl);
$err = curl_error($curl);


curl_close($curl);


if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
```

```java
OkHttpClient client = new OkHttpClient();


MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}");
Request request = new Request.Builder()
  .url("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences")
  .post(body)
  .addHeader("Authorization", "Bearer <token>")
  .addHeader("Content-Type", "application/json")
  .build();


Response response = client.newCall(request).execute();
```

```ruby
require 'uri'
require 'net/http'


url = URI("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences")


http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true


request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}"


response = http.request(request)
puts response.read_body
```

```csharp
var client = new RestClient("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/ideogram-vectorize/inferences");
var request = new RestRequest("", Method.Post);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"guidance_file_init_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ]\n}", ParameterType.RequestBody);
var response = client.Execute(request);
```

* Layer API

## Authorizations

* **[bearerAuth](/docs/v2/rest-api#bearerauth)**
* **[oauth2](/docs/v2/rest-api#oauth2)**

## Parameters 

### Path Parameters

**workspace\_id**

required

_Workspace Id_

Id of the workspace that owns the resource.

string format: uuid

Id of the workspace that owns the resource.

### Query Parameters

**session\_name**

_Session Name_

Organize this run under a named session. A new session is created if none matches. Ignored when `session_id` is given.

string

nullable

Organize this run under a named session. A new session is created if none matches. Ignored when `session_id` is given.

**session\_id**

_Session Id_

Organize this run under this session, from GET /v2/workspaces/{workspace\_id}/sessions. Takes precedence over `session_name`, and must belong to this workspace.

string format: uuid

nullable

Organize this run under this session, from GET /v2/workspaces/{workspace\_id}/sessions. Takes precedence over `session_name`, and must belong to this workspace.

**inference\_tool\_key**

_Inference Tool Key_

The Layer tool this run is, such as `image.upscale`, so the asset it makes reopens in that tool in the Layer app. The body is then this model’s form for the tool’s job, and a reframe tool’s run asks for the reframe. The run must be one the tool makes: this model one of the tool’s, with every value the tool fixes left as the tool sets it. A field the body leaves out takes the value the tool’s form sets (a value it fixes, or a field’s default), except the prompt. A run that is not one the tool makes is refused with a 422 naming why (`UNKNOWN_INFERENCE_TOOL`, `INFERENCE_TOOL_MODEL_NOT_IN_POOL`, `INFERENCE_TOOL_PIN_MISMATCH` or `INFERENCE_TOOL_UPSCALE_COPIES_SOURCE`).

string

nullable

The Layer tool this run is, such as `image.upscale`, so the asset it makes reopens in that tool in the Layer app. The body is then this model’s form for the tool’s job, and a reframe tool’s run asks for the reframe. The run must be one the tool makes: this model one of the tool’s, with every value the tool fixes left as the tool sets it. A field the body leaves out takes the value the tool’s form sets (a value it fixes, or a field’s default), except the prompt. A run that is not one the tool makes is refused with a 422 naming why (`UNKNOWN_INFERENCE_TOOL`, `INFERENCE_TOOL_MODEL_NOT_IN_POOL`, `INFERENCE_TOOL_PIN_MISMATCH` or `INFERENCE_TOOL_UPSCALE_COPIES_SOURCE`).

### Header Parameters

**Idempotency-Key**

string

<= 255 characters

Opaque key making a retry of this request return the first result. A 2xx response is replayed for 24 hours with `Idempotent-Replayed: true`. A 4xx releases the key. A 5xx, or a request still running, holds the key for 120 seconds, during which a retry gets 409; after that a retry executes again. The key covers the method, path, query, and byte-identical body it was first used with; reusing it for a different request is rejected with 422\. Protection is best effort: if the key store is unavailable, or a record is lost early, a retry can execute again even after an earlier 409\. See the Idempotency section of the API description.

## Request Bodyrequired

_Ideogram Vectorize 1.0_object

**guidance\_file\_init\_image**

required

_Source image_

The image to modify

Array<object>

\>= 1 items

_InferenceFormFileRef_

A single guidance/reference file supplied to a `reference_image_list` field.

The slot’s guidance `type` is fixed by the field it’s attached to; the caller supplies the file (its URL, or the id of a file it can read) and, where the model supports per-file weighting, a weight.

object

**url**

required

_Url_

The file’s URL, or the id of a file in this workspace or a public file.

string

**weight**

_Weight_

number

nullable

**output\_fit**

_Output canvas_

Trim the transparent margin, and place the image on a canvas of a fixed size.

object

**trim**

_Trim_

boolean

**canvas**

_OutputFitCanvas_

string

default: CONTENT

Allowed values: CONTENT FIXED

**width**

_Width_

integer

nullable \>= 1 <= 4096

**height**

_Height_

integer

nullable \>= 1 <= 4096

**scale**

_OutputFitScale_

How the drawing goes onto a fixed canvas. The names follow the workflow Resize node’s.

string

default: PLACE

Allowed values: PLACE SHRINK\_AND\_PAD FIT\_AND\_PAD FIT\_AND\_CROP STRETCH

**anchor**

_OutputFitAnchor_

The point of the drawing that lands on the same point of the canvas.

`BASE` is a game tile’s base: its anchor, the bottom centre of the cell it stands on, lands at the bottom centre of the canvas, so tiles of one grid stand on the same point whatever rises above them.

string

default: CENTER

Allowed values: TOP\_LEFT TOP\_CENTER TOP\_RIGHT CENTER\_LEFT CENTER CENTER\_RIGHT BOTTOM\_LEFT BOTTOM\_CENTER BOTTOM\_RIGHT BASE

**padding**

_Padding_

integer

0 <= 512

**corner\_radius**

_Corner Radius_

integer

0 <= 512

##### Example

```json
{
  "guidance_file_init_image": [
    {
      "url": "<file_url>"
    }
  ]
}
```

## Responses 

### 202

Successful Response

_ExecuteForgeOutput_object

**inference\_id**

required

_Inference Id_

Unique identifier for this forge run.

string format: uuid

**status**

required

_InferenceStatus_

Current status: IN\_PROGRESS.

string

Allowed values: in\_progress complete failed cancelled deleted

**estimated\_price\_creative\_units**

_Estimated Price Creative Units_

Estimated price in Creative Units.

number

nullable

**poll\_interval\_seconds**

required

_Poll Interval Seconds_

Suggested polling interval in seconds.

integer

**created\_at**

required

_Created At_

Timestamp of when the run was created.

string format: date-time

**session\_id**

_Session Id_

Session ID the run was added to, if a session was specified.

string format: uuid

nullable

**normalized\_parameters**

Any of:

**NormalizedInferenceParameters**

_NormalizedInferenceParameters_

Inference parameters after model-specific normalization.

These reflect the actual values used for generation, including model defaults applied for any parameters not explicitly set.

object

**width**

_Width_

Resolved output width in pixels.

integer

nullable

**height**

_Height_

Resolved output height in pixels.

integer

nullable

**batch\_size**

_Batch Size_

Number of outputs to generate.

integer

nullable

**num\_inference\_steps**

_Num Inference Steps_

Resolved number of diffusion steps.

integer

nullable

**guidance\_scale**

_Guidance Scale_

Resolved guidance scale.

number

nullable

**duration\_seconds**

_Duration Seconds_

Resolved output length in seconds — video duration or audio clip length.

number

nullable

**fps**

_Fps_

Resolved FPS.

integer

nullable

**null**

null

##### Example

```json
{
  "status": "in_progress"
}
```

### 401

Unauthenticated — missing or invalid Bearer token.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

**error\_code**

required

Machine-readable error code: the last path segment of `type`.

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description.",
  "error_code": "ERROR_CODE"
}
```

### 403

Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

**error\_code**

required

Machine-readable error code: the last path segment of `type`.

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description.",
  "error_code": "ERROR_CODE"
}
```

### 404

Resource not found.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

**error\_code**

required

Machine-readable error code: the last path segment of `type`.

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description.",
  "error_code": "ERROR_CODE"
}
```

### 409

The outcome of the request with this `Idempotency-Key` is not known yet: it is still running, or it failed without a stored response. Retry after the number of seconds in `Retry-After`.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

**error\_code**

required

Machine-readable error code: the last path segment of `type`.

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description.",
  "error_code": "ERROR_CODE"
}
```

### 422

Invalid input parameters, or an `Idempotency-Key` reused for a different request.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

**error\_code**

required

Machine-readable error code: the last path segment of `type`.

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description.",
  "error_code": "ERROR_CODE"
}
```

### 429

Rate limited — retry after the number of seconds in `Retry-After`.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

**error\_code**

required

Machine-readable error code: the last path segment of `type`.

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description.",
  "error_code": "ERROR_CODE"
}
```

### 500

Internal server error.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

**error\_code**

required

Machine-readable error code: the last path segment of `type`.

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description.",
  "error_code": "ERROR_CODE"
}
```
