---
title: "Sign a link URL"
method: POST
path: "/v1/signed-links/{link_id}/sign"
tags: ["Signed links"]
---

# Sign a link URL

`POST /v1/signed-links/{link_id}/sign`

## Request

- Base URL: `https://api-eu.dynamicdocumentapi.com`
- URL: `https://api-eu.dynamicdocumentapi.com/v1/signed-links/{link_id}/sign`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Convenience for languages without an SDK: signs `params` with the link secret. Signing locally avoids the round trip.

## Path parameters

- `link_id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- SignUrl
  - `expires_at` integer: Unix seconds; omit for a link that does not expire.
  - `format` 'png' | 'jpeg' | 'webp' | 'pdf', required: * `png` - png * `jpeg` - jpeg * `webp` - webp * `pdf` - pdf
  - `name` string: File name in the URL (cosmetic, but signed).
  - `params` object

## Response `200`

- SignedUrl
  - `object` string
  - `url` string, uri, required

## Other responses

- `400`: Invalid request body (`errors[]` with JSON pointers).
- `401`: Missing, invalid, expired or revoked credentials.
- `403`: Insufficient scope, IP not allowed, workspace suspended or scheduled for deletion, or email not verified.
- `404`: Signed link not found.
- `429`: Rate limited (`Retry-After`).
- `503`: The control plane is unreachable (`Retry-After`).

---

[API](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api.md) · [All operations](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api/revisions/0f14bc0000f4?raw)
