---
title: "Handle Paperform form submissions"
method: POST
path: "/webhooks/paperform"
tags: ["Webhooks"]
---

# Handle Paperform form submissions

`POST /webhooks/paperform`

## Request

- Base URL: `https://api.production.yourmedley.com`
- URL: `https://api.production.yourmedley.com/webhooks/paperform`
- Auth: none declared

Receives webhook events from Paperform for form submissions (intake, feedback, surveys).
Validates signature, stores payload, and queues for async processing.
Configure this URL in Paperform dashboard with your webhook secret.

URL format: https://api.medley.com/webhooks/paperform?secret={your_secret}

Required hidden fields in Paperform forms:
- sgos_participant_id: The cohort_participant.id for participant matching
- sgos_session_id: (Optional) For session feedback forms

## Query parameters

- `secret` string

## Request body

- object
  - `event` string
  - `submission_id` string, required: Unique Paperform submission ID
  - `form_id` string, required: Paperform form ID
  - `created_at` string, date-time
  - `data` object[], required: Array of form field responses
    - `key` string: Field key/ID
    - `title` string: Field label
    - `value` unknown
    - `type` string: Field type (text, hidden, rating, etc.)

## Response `200`

Webhook received and queued for processing

- object
  - `success` boolean
  - `data` object
    - `message` string
    - `event_id` string, uuid

## Other responses

- `400`: Invalid webhook payload
- `401`: Invalid webhook signature or secret
- `409`: Duplicate submission already processed

---

[API](https://skmtc.dev/withmedley/apis/medley-api.md) - [All operations](https://skmtc.dev/withmedley/apis/medley-api/llms.txt) - [OpenAPI document](https://skmtc.dev/withmedley/apis/medley-api/revisions/40aaac5ca6bd?raw)
