# GET Get the font archive

Returns a download link to one zip file that holds the TTF file of every font on the customiser, the same archive as the merchant admin's Download all fonts. Each file is named after its font. A font without an uploaded TTF file is left out. The zip is built on the first request and reused until a font is added, changed or deleted, so a repeated request returns the same `url`. The link needs no API key and works until at least `expires_at`, 25 hours after the zip was built; request the archive again after that. Requires `customisers:read`. A customiser with no TTF file returns 422 `no_font_files`: attach a file with the font file operation first. While another request builds the same archive, the request returns 409 `font_archive_in_progress`; retry after `retry_after` seconds. Each API key can request the archive of one customiser 5 times in 5 minutes.

- Source URL: https://www.signcustomiser.com/help/api/v3-get-get-the-font-archive/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-get-get-the-font-archive.md
- Group: Customiser fonts
- Method: GET
- Path: /api/v3/customisers/{customiser_id}/fonts/archive
- Auth: Bearer token
- Required scopes: `customisers:read`

## Path parameters

- customiser_id (string, required): The customiser id, from the list customisers operation. Example: 1

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/customisers/1/fonts/archive \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN'
```

## Response examples

### 200 GET 200 example 1

```json
{
  "data": {
    "object": "font_archive",
    "customiser_id": 42,
    "url": "https://cdn.example.com/fonts-download/customiser-42-Ab12Cd34Ef56Gh78-fonts.zip",
    "expires_at": "2026-11-15T09:00:00Z"
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/customisers/42/fonts/archive",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
```

### 401 Missing API key

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/missing_api_key",
  "title": "Missing API key",
  "status": 401,
  "code": "missing_api_key",
  "detail": "Provide a store API key as a bearer token.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 403 Insufficient scope

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/insufficient_scope",
  "title": "Insufficient scope",
  "status": 403,
  "code": "insufficient_scope",
  "detail": "This operation requires the customisers:read scope.",
  "required_scopes": [
    "customisers:read"
  ],
  "granted_scopes": [
    "store:read"
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 404 Unknown customiser

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/resource_not_found",
  "title": "Resource not found",
  "status": 404,
  "code": "resource_not_found",
  "detail": "The requested resource does not exist or does not belong to the authenticated store.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 409 Archive being built

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/font_archive_in_progress",
  "title": "Font archive in progress",
  "status": 409,
  "code": "font_archive_in_progress",
  "detail": "Another request is building the font archive of this customiser. Retry after retry_after seconds.",
  "retry_after": 5,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 422 No font files

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/no_font_files",
  "title": "No font files",
  "status": 422,
  "code": "no_font_files",
  "detail": "This customiser has no font with an uploaded TTF file, so the archive would be empty. Attach a font file first.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 429 Rate limited

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/rate_limited",
  "title": "Too many requests",
  "status": 429,
  "code": "rate_limited",
  "detail": "You have exceeded the request limit for this API key.",
  "retry_after": 300,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
