---
title: "Mark an order form as signed"
method: POST
path: "/order_forms/{lago_id}/mark_as_signed"
tags: ["order_forms"]
---

# Mark an order form as signed

`POST /order_forms/{lago_id}/mark_as_signed`

## Request

- Base URL: `https://api.getlago.com/api/v1`
- URL: `https://api.getlago.com/api/v1/order_forms/{lago_id}/mark_as_signed`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/getlago/apis/lago-api-documentation/docs/order_forms/:lago_id/mark_as_signed/post.ts> (a function with typed inputs; its response is checked against the schema)

This endpoint records the customer's signature on an order form, and creates the order that carries the quoted deal out.
Only a `generated` order form can be signed, so a `422` is returned once the order form has been signed, has expired or has been voided.
An `execute_at` landing on or after the day the quoted deal stops being executable is rejected as well, so the order can never be scheduled past the term it bills.
A concurrent write on the same quote is reported as a `422` rather than retried, so a duplicated call can fail while the first one is still in flight.
This is a premium feature.

## Request body

- OrderFormMarkAsSignedInput: Parameters available when marking an order form as signed. Every parameter is optional, so an empty body records the signature without attaching a document, and creates an order that is not scheduled for execution.
  - `order_form` object
    - `signed_document` string: The document signed by the customer, as a base64 data URI (`data:<content_type>;base64,<data>`). Accepted content types are `application/pdf`, `image/jpeg` and `image/png`, for a maximum of 10 MB. Once attached, it is exposed as `signed_document_url` on the order form.
    - `execution_mode` 'execute_in_lago' | 'order_only': How the order created from the order form is carried out. It can be any of the following values: - `execute_in_lago`: Lago applies the quoted deal itself, creating the subscriptions, coupons, wallets or one-off invoice it describes. - `order_only`: Lago records the order without applying it, leaving the execution to your own systems.
    - `execute_at` string, date-time: The date and time in UTC (ISO 8601) when Lago executes the order created from the order form. It must be in the future, requires `execution_mode` to be set, and must fall strictly before the day the quoted deal stops being executable, otherwise signing is rejected with a `422`. When it is omitted, the order is created but not scheduled, and waits to be executed on demand.

## Response `200`

Order form marked as signed

- OrderForm
  - `order_form` OrderFormObject, required
    - `lago_id` string, uuid, required: Unique identifier of the order form, created by Lago.
    - `number` string, required: The unique number assigned to the order form by Lago.
    - `status` 'generated' | 'signed' | 'expired' | 'voided', required: The status of the order form. It can be any of the following values: - `generated`: the order form is waiting for the customer's signature. - `signed`: the customer has signed, and an order has been created from the order form. - `expired`: the order form reached its `expires_at` without being signed. - `voided`: the order form has been voided before being signed. Only a `generated` order form is actionable. Reaching `expired` or `voided` also voids the quote version the order form was generated from; signing does not, since the deal it quotes goes on to be executed.
    - `void_reason` 'null' | 'manual' | 'expired' | 'invalid', nullable, required: The reason why the order form is no longer actionable. It is `null` unless the `status` is `voided` or `expired`. It can be any of the following values: - `manual`: the order form has been voided explicitly, through the API or the Lago user interface. - `expired`: the order form reached its `expires_at` without being signed. - `invalid`: reserved for an order form Lago voids because it can no longer be executed. No flow writes it yet.
    - `expires_at` string, date-time, nullable, required: The date and time in UTC (ISO 8601) after which the order form is meant to expire. It is `null` when the order form never expires. It is validated when the quote is approved, where a value on or after the day the quoted deal stops being executable is rejected rather than clamped. Expiry is then swept hourly and compared by calendar date, so signing keeps succeeding until the sweep moves the order form to `expired`.
    - `signed_at` string, date-time, nullable, required: The date and time in UTC (ISO 8601) when the order form was marked as signed. It is `null` unless the `status` is `signed`.
    - `voided_at` string, date-time, nullable, required: The date and time in UTC (ISO 8601) when the order form stopped being actionable. It is set both when the order form is voided and when it expires, and is `null` otherwise.
    - `signed_document_url` string, uri, nullable, required: The URL of the signed document attached to the order form. It is `null` when no document was uploaded.
    - `lago_organization_id` string, uuid, required: Unique identifier of the organization, created by Lago.
    - `lago_customer_id` string, uuid, required: Unique identifier of the customer the order form is addressed to, created by Lago.
    - `lago_quote_id` string, uuid, required: Unique identifier of the quote the order form comes from, created by Lago.
    - `lago_quote_version_id` string, uuid, required: Unique identifier of the approved quote version the order form was generated from, created by Lago. A quote version carries at most one order form.
    - `created_at` string, date-time, required: The date and time in UTC (ISO 8601) when the order form was created.
    - `updated_at` string, date-time, required: The date and time in UTC (ISO 8601) when the order form was last updated.

## Other responses

- `401`: Unauthorized error
- `403`: Forbidden
- `404`: Not Found error
- `422`: Unprocessable entity error

## Changes

- **2026-11-03** `5d26657495a3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/getlago/apis/lago-api-documentation/changes/order_forms/:lago_id/mark_as_signed/post.md)

---

[API](https://skmtc.dev/getlago/apis/lago-api-documentation.md) - [All operations](https://skmtc.dev/getlago/apis/lago-api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/getlago/apis/lago-api-documentation/revisions/b216574b9612?raw)
