# Get a form by slug

**Publié le** : 2026-05-12
**Catégorie** : Forms & Reviews

## `GET /forms/:slug`

**Get a form by slug**

Fetch a single form by slug. Returns the form's schema (fields,
validation, options) and metadata (status, submit button label,
confirmation message). Use this before rendering the form to drive
the field definitions and the submit URL.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `slug` | path | string | Yes | URL-friendly identifier, unique per site and locale |


### Responses

| Status | Description |
| --- | --- |
| `200` | Successful response |
| `404` | Not found |


> **Notes:** Cache: `Cache-Control: public, max-age=300`. Rate-limit bucket: general.

### Examples

```curl
curl "https://api.lynkow.com/public/{siteId}/forms/contact"
```

```javascript
const res = await fetch(`https://api.lynkow.com/public/${siteId}/forms/contact`)
const { data } = await res.json()
```

### Response Example

```json
"{\n  \"data\": {\n    \"id\": \"01J9Q7B1H6KQ5VFA2DKW8R3X0Z\",\n    \"slug\": \"contact\",\n    \"name\": \"Contact us\",\n    \"status\": \"active\",\n    \"fields\": [\n      { \"id\": \"email\", \"type\": \"email\", \"label\": \"Email\", \"required\": true, \"placeholder\": \"you@example.com\" },\n      { \"id\": \"message\", \"type\": \"textarea\", \"label\": \"Message\", \"required\": true, \"minLength\": 10 }\n    ],\n    \"submitButtonLabel\": \"Send\",\n    \"confirmationMessage\": \"Thanks, we got your message and will reply within 24 hours.\"\n  }\n}\n"
```

---