---
title: "Settle a manual payment webhook"
method: POST
path: "/webhooks/payments"
---

# Settle a manual payment webhook

`POST /webhooks/payments`

## Request

- Base URL: `https://superskill.sh/api`
- URL: `https://superskill.sh/api/webhooks/payments`
- Auth: none declared

Requires HARNESS_WEBHOOK_TOKEN via x-harness-token. Marks the purchase paid and grants entitlement idempotently.

## Request body

- object
  - `provider` 'manual'
  - `provider_ref` string, required
  - `status` 'paid' | 'succeeded'

## Response `200`

Payment settled

- PaymentWebhookResult
  - `ok` boolean, required
  - `status` 'paid' | 'already_paid' | 'reserved' | 'already_reserved' | 'already_captured' | 'already_refunded', required
  - `owner` string, required
  - `repo` string, required
  - `version` string, required
  - `subject_id` string, required
  - `purchase_id` string

## Other responses

- `400`: Bad request
- `401`: Authorization required
- `404`: Resource not found

---

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