---
title: "Laravel"
description: "Generate dynamic OG images and on-demand graphics in Laravel with the Imejis.io API. A route proxies the render server-side so your API key never leaks."
url: "https://www.imejis.io/apis/laravel"
published: "2026-07-27"
---

# Laravel

## Laravel

Render a unique image per page, post, or user from one Imejis template. The route below uses Laravel's HTTP client to call Imejis server-side and streams the image back, so your API key never reaches the browser.

Add two values to your `.env`.

```bash title=".env"
IMEJIS_API_KEY=your_api_key
IMEJIS_DESIGN_ID=your_design_id
```

### 1. A route that renders the image

```php showLineNumbers title="routes/web.php"
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

Route::get('/og', function (Request $request) {
    $response = Http::withHeaders([
        'dma-api-key' => env('IMEJIS_API_KEY'),
    ])->post('https://render.imejis.io/v1/' . env('IMEJIS_DESIGN_ID'), [
        'headline.text' => $request->query('title', 'Untitled'),
    ]);

    return response($response->body(), 200)
        ->header('Content-Type', 'image/jpeg')
        ->header('Cache-Control', 'public, immutable, no-transform, max-age=31536000');
});
```

### 2. Reference it in your Blade layout

```html showLineNumbers title="resources/views/layouts/app.blade.php"
<meta
  property="og:image"
  content="{{ url('/og?title=' . urlencode($post->title)) }}"
/>
<meta name="twitter:card" content="summary_large_image" />
```

**Override any field.** Each dynamic component exposes keys like `headline.text`, `title.color`, or `image.image`. Send only the ones you want to change, and add more query params to the route as needed. A design's overridable fields are listed in its Share / API panel.
