> ## Documentation Index
> Fetch the complete documentation index at: https://developer.meetergo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# E-Signatures

> Send a PDF to one signer through the API and retrieve the completed artifact.

The Signatures API sends a PDF for electronic signature and returns a completed
artifact with an audit page. After hardening is enabled, every completed
artifact is certificate-sealed. This is a straightforward migration path for
DocuSeal users who need one signer per request.

## How it works

1. **Create** a signature request from a PDF, the field positions, and the
   signer. You receive one hosted **signing link**.
2. The signer opens the link, reviews the document, and signs in the browser.
3. **Poll** the request or subscribe to the `signature_completed` webhook, then
   download the signed PDF.

No email is sent by default. You get the signing link back and use it in your
own flow. The signing page is meetergo-branded (and available in German), so you
do not need to host your own signing page.

## Coordinate model (same as DocuSeal)

Field positions are given as `areas` using **normalized** coordinates: `x`, `y`,
`w`, `h` are fractions of the page (`0`–`1`) from the **top-left** corner, and
`page` is **1-indexed**. This matches DocuSeal, so existing field layouts port
directly.

## Create a request

```bash theme={null}
curl https://api.meetergo.com/v4/signatures \
  -H "Authorization: Bearer ak_live:..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Order confirmation",
    "language": "de",
    "completedRedirectUrl": "https://app.example.com/contracts/123/signed",
    "file": "<base64-encoded PDF>",
    "fields": [
      { "name": "signature", "type": "signature",
        "areas": [{ "x": 0.1, "y": 0.85, "w": 0.35, "h": 0.07, "page": 1 }] }
    ],
    "signers": [
      { "email": "john.doe@example.com", "name": "John Doe", "role": "First Party" }
    ]
  }'
```

The response includes one `signingUrl`. Field types: `signature`,
`initials`, `text`, `date`, `number`. Optional: `language` (`en`/`de`),
`completedRedirectUrl` (where the signer goes after signing), and `expiresAt`.

During the hardening release, requests accept exactly one signer. Multi-party
requests are not accepted yet.

`requireOtp: false` is an SES flow based on possession of the signing link. It
does not verify the signer’s identity. `requireOtp: true` expresses the intent
to use the `fes` compatibility level for an OTP-verified email. Legacy signing
links are not described as identity-verified until the hardened OTP path in this
plan is enabled.

Endpoint details and schemas are in the [API Reference](/openapi.json) under
**Signatures V4** (`POST /v4/signatures`, `GET /v4/signatures/{id}`,
`GET /v4/signatures/{id}/document`, `DELETE /v4/signatures/{id}`,
`GET /v4/signatures/ping`).

## Get notified

Subscribe a webhook to the [`signature_completed`](/developer-docs/webhooks/events)
event instead of polling. When a request is fully signed, meetergo POSTs the
request id, signer, and a download URL for the signed PDF.

## Migrating from DocuSeal

| DocuSeal | meetergo |
| - | - |
| `POST /submissions/pdf` | `POST /v4/signatures` |
| `GET /submissions/{id}` | `GET /v4/signatures/{id}` |
| document `url` from the submission | `GET /v4/signatures/{id}/document` |
| `DELETE /submissions/{id}` (archive) | `DELETE /v4/signatures/{id}` |
| `GET /templates?limit=1` (connection test) | `GET /v4/signatures/ping` |
| `send_email: false` + your own branded page | default behaviour; links are returned and the signing page is already branded |

The `areas` coordinate model is identical, so field layouts carry over directly.

<Note>
  Completed artifacts are certificate-sealed after hardening is enabled, and an
  audit page is appended.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.