diff --git a/.conductor/settings.toml b/.conductor/settings.toml
new file mode 100644
index 0000000..4ecb719
--- /dev/null
+++ b/.conductor/settings.toml
@@ -0,0 +1,11 @@
+"$schema" = "https://conductor.build/schemas/settings.repo.schema.json"
+
+[scripts]
+setup = "yarn install --frozen-lockfile --non-interactive"
+run_mode = "concurrent"
+
+[scripts.run.dev]
+command = "yarn start --port $CONDUCTOR_PORT"
+available_in = [ "local" ]
+default = true
+icon = "play"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..7336711
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,32 @@
+name: CI
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: yarn
+
+ - name: Install dependencies
+ run: yarn install --frozen-lockfile --non-interactive
+
+ - name: Lint OpenAPI contract
+ run: yarn api:lint
+
+ - name: Build documentation
+ run: yarn build
diff --git a/.github/workflows/openapi-sync.yml b/.github/workflows/openapi-sync.yml
new file mode 100644
index 0000000..947d6d1
--- /dev/null
+++ b/.github/workflows/openapi-sync.yml
@@ -0,0 +1,81 @@
+name: Sync OpenAPI contract
+
+on:
+ workflow_dispatch:
+ repository_dispatch:
+ types:
+ - openapi_updated
+ schedule:
+ - cron: "17 6 * * *"
+
+permissions:
+ contents: write
+ pull-requests: write
+
+concurrency:
+ group: openapi-contract-sync
+ cancel-in-progress: true
+
+jobs:
+ sync:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: yarn
+
+ - name: Install dependencies
+ run: yarn install --frozen-lockfile --non-interactive
+
+ - name: Download sandbox contract
+ run: yarn api:sync
+
+ - name: Detect contract changes
+ id: changes
+ shell: bash
+ run: |
+ if git diff --quiet -- openapi/public_v1.yaml; then
+ echo "changed=false" >> "$GITHUB_OUTPUT"
+ else
+ echo "changed=true" >> "$GITHUB_OUTPUT"
+ fi
+
+ - name: Lint updated contract
+ if: steps.changes.outputs.changed == 'true'
+ run: yarn api:lint
+
+ - name: Build updated documentation
+ if: steps.changes.outputs.changed == 'true'
+ run: yarn build
+
+ - name: Open or update pull request
+ if: steps.changes.outputs.changed == 'true'
+ env:
+ GH_TOKEN: ${{ github.token }}
+ shell: bash
+ run: |
+ branch="automation/openapi-public-v1"
+
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git fetch origin "refs/heads/$branch:refs/remotes/origin/$branch" || true
+ git checkout -B "$branch"
+ git add openapi/public_v1.yaml
+ git commit -m "Update OpenAPI contract snapshot"
+ git push --force-with-lease origin "$branch"
+
+ pr_number=$(gh pr list --head "$branch" --state open --json number --jq '.[0].number')
+ if [ -z "$pr_number" ]; then
+ gh pr create \
+ --base main \
+ --head "$branch" \
+ --title "Update OpenAPI contract snapshot" \
+ --body "Updates the checked-in public v1 contract from the deployed sandbox API. CI validates the contract and generated documentation before merge."
+ fi
diff --git a/.gitignore b/.gitignore
index 81b2534..78888f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,6 @@ node_modules/
build/
.docusaurus/
.cache-loader/
+
+# Generated from openapi/public_v1.yaml before start/build.
+docs/api-reference/
diff --git a/README.md b/README.md
index a6c26a0..adcf220 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,27 @@ yarn start
Starts a local dev server at `http://localhost:3000` with hot reload.
+The start command regenerates the API reference from the checked-in OpenAPI
+snapshot before launching Docusaurus.
+
+## API reference
+
+The generated API reference uses [`openapi/public_v1.yaml`](openapi/public_v1.yaml),
+which is synchronized from the public sandbox contract:
+
+```sh
+yarn api:sync # Download the sandbox contract when it changed semantically
+yarn api:lint # Validate the checked-in OpenAPI document
+yarn api:generate # Rebuild docs/api-reference locally
+```
+
+Files under `docs/api-reference` are generated and gitignored. CI regenerates
+them before every build. The scheduled OpenAPI sync workflow opens a pull
+request when the deployed sandbox contract changes.
+
+Legacy hand-written API URLs are preserved as `301` redirects in `vercel.json`.
+Keep that map updated if a generated operation ID—and therefore its URL—changes.
+
## Build
```
diff --git a/docs/api-auth.md b/docs/api-auth.md
deleted file mode 100644
index 4383ba1..0000000
--- a/docs/api-auth.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-id: api-auth
-title: API Authentication
-sidebar_label: Authentication
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Our API is secured by API keys, please make sure you **don’t share these keys** with anyone! They should only be used in a secure server side environment, our API isn't supported for use in the browser, [see our Embed SDK](embed-sdk.md) instead.
-
-**You can [find your API](https://app.payhere.co/merchants/integrations) key in the integrations section of the merchants admin.**
-
----
-
-### Authorization Header (recommended)
-
-We recommend passing your API key in the Authorization header, like so:
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/user -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-raw_json = HTTP.auth("Bearer #{api_key_here}")
- .get("https://api.payhere.co/api/v1/user")
- .body.to_s
-
-json = JSON.parse(raw_json)
-```
-
-
-
-
-
-### access_token parameter
-
-If you are wanting to test GET endpoints quickly you can pass your API key as a parameter labelled `access_token`
-
-```sh
-GET https://api.payhere.co/api/v1/user?access_token=${api_key_here}
-```
diff --git a/docs/api-current-company-show.md b/docs/api-current-company-show.md
deleted file mode 100644
index 1948f99..0000000
--- a/docs/api-current-company-show.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-id: api-current-company-show
-title: GET /api/v1/current_company
-sidebar_label: GET /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Fetch the company information for currently authenticated user
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/current_company \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get("https://api.payhere.co/api/v1/current_company")
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-N/A
-
-## Response
-
-```json
-{
- "data": {
- "id": 1,
- "name": "Alt Labs",
- "legal_name": "Alternate Labs Ltd",
- "slug": "altlabs",
- "ready": true,
- "country_code": "GB",
- "button_color": "#db0031",
- "button_text": "white",
- "role": "testing",
- "stripe_connected": true,
- "gocardless_connected": true,
- "currency": "gbp",
- "vat_registered": true,
- "vat_rate": "20.0",
- "created_at": "2018-06-07T21:54:53.617Z",
- "updated_at": "2020-04-05T18:39:28.637Z",
- "type": "companies",
- "plan": "pro",
- "subscription_status": "trial",
- "active_until": "2020-04-08T18:28:12.798Z",
- "testing_access": true,
- "support_email": "hello@example.org",
- "website": "https://alternatelabs.co",
- "address": "123 Anystreet,\r\nAnytime, BT1 1AB",
- "vat_registration_number": "XYZ",
- "vat_mechanism": "always",
- "custom_domain": null,
- "users": [
- {
- "id": 1,
- "display_name": "Pete Test",
- "email": "pete@example.org",
- "role": "user",
- "created_at": "2018-06-07T21:54:53.778Z",
- "updated_at": "2020-04-06T10:37:28.065Z",
- "type": "users"
- }
- ]
- }
-}
-```
-
-## Errors
-
-- **401** Unauthorized
diff --git a/docs/api-current-company-stats.md b/docs/api-current-company-stats.md
deleted file mode 100644
index 6d399a3..0000000
--- a/docs/api-current-company-stats.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-id: api-current-company-stats
-title: GET /api/v1/current_company/stats
-sidebar_label: GET /stats
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Fetch payment stats for last 30 days. Comparison fields are 30-60days to give a comparison value from last month.
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/current_company/stats \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get("https://api.payhere.co/api/v1/current_company/stats")
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-N/A
-
-## Response
-
-```json
-{
- "currency": "gbp",
- "payments_last_30": 329.40,
- "payments_comparison": 278.42,
- "subscribers_last_30": 7,
- "subscribers_comparison": 5,
- "payments_all_time": 6239.76
-}
-```
-
-## Errors
-
-- **401** Unauthorized
diff --git a/docs/api-current-company-update.md b/docs/api-current-company-update.md
deleted file mode 100644
index ac5d412..0000000
--- a/docs/api-current-company-update.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-id: api-current-company-update
-title: PUT /api/v1/current_company
-sidebar_label: PUT /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Update the company information for currently authenticated user
-
-## Request
-
-
-
-
-```sh
-$ curl -X PUT https://api.payhere.co/api/v1/current_company \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
- -d '{"name": "New company name"}'
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .put("https://api.payhere.co/api/v1/current_company", json: { name: "New company name" })
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **name** - Display name of the company
-- **legal_name** - Legal name of the company, displayed on receipts
-- **address** - Company address, displayed on receipts
-- **logo** - Logo image for the company
-- **support_email** - Support email, displayed within receipts
-- **website** - Company website, displayed within receipts
-- **button_color** - Hex color for the pay button background on payment forms and email receipts (e.g. #ff6600)
-- **button_text** - Empty (auto detect), "white" or "black" to force to white or black text.
-
-## Response
-
-```json
-{
- "data": {
- "id": 1,
- "name": "New company name",
- "legal_name": "Alternate Labs Ltd",
- "slug": "altlabs",
- "ready": true,
- "country_code": "GB",
- "button_color": "#db0031",
- "button_text": "white",
- "role": "testing",
- "stripe_connected": true,
- "gocardless_connected": true,
- "currency": "gbp",
- "vat_registered": true,
- "vat_rate": "20.0",
- "created_at": "2018-06-07T21:54:53.617Z",
- "updated_at": "2020-04-05T18:39:28.637Z",
- "type": "companies",
- "plan": "pro",
- "subscription_status": "trial",
- "active_until": "2020-04-08T18:28:12.798Z",
- "testing_access": true,
- "support_email": "hello@example.org",
- "website": "https://alternatelabs.co",
- "address": "123 Anystreet,\r\nAnytime, BT1 1AB",
- "vat_registration_number": "XYZ",
- "vat_mechanism": "always",
- "custom_domain": null,
- "users": [
- {
- "id": 1,
- "display_name": "Pete Test",
- "email": "pete@example.org",
- "role": "user",
- "created_at": "2018-06-07T21:54:53.778Z",
- "updated_at": "2020-04-06T10:37:28.065Z",
- "type": "users"
- }
- ]
- }
-}
-```
-
-## Errors
-
-- **401** Unauthorized
-- **400** Bad request - validation erros returned
diff --git a/docs/api-customer-show.md b/docs/api-customer-show.md
deleted file mode 100644
index 0e7e8e6..0000000
--- a/docs/api-customer-show.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-id: api-customer-show
-title: GET /api/v1/customers/:id
-sidebar_label: GET /:id
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Fetch a customer by ID, this will also pull down their subscriptions and payment history.
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/customers/:id \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get("https://api.payhere.co/api/v1/customers/:id")
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **id** - Customer ID to lookup
-
-## Response
-
-```json
-{
- "data": {
- "id": 989899294,
- "name": "Geoff Williams",
- "email": "g.williams01@example.org",
- "ip_address": null,
- "location": {},
- "created_at": "2019-03-04T16:29:57.026Z",
- "updated_at": "2019-03-04T16:29:57.026Z",
- "type": "customers",
- "subscriptions": [
- {
- "id": 173524457,
- "customer_id": 989899294,
- "company_id": 636211471,
- "last_charged": "2018-01-03T00:00:00.000Z",
- "next_charge_at": "2018-02-03T00:00:00.000Z",
- "stripe_subscription_id": "b3ed033a",
- "stripe_plan_id": "void_pro_sub_1",
- "billing_interval": "month",
- "created_at": "2018-01-03T00:00:00.000Z",
- "updated_at": "2018-01-03T00:00:00.000Z",
- "status": "active",
- "membership_plan_id": 372786875,
- "provider": "stripe",
- "metadata": {},
- "billing_interval_count": 1,
- "min_billing_cycles": null
- }
- ],
- "payments": [
- {
- "id": 845088515,
- "hashid": "VRSgg9kvB",
- "reference": "GW8264",
- "amount": 12.99,
- "company_id": 636211471,
- "card_brand": "visa",
- "card_last4": null,
- "secure_token": "RksE-jbWnU7oSQjWZ-CFIQ",
- "status": "part_refund",
- "created_at": "2017-06-03T00:00:00.000Z",
- "updated_at": "2017-06-03T00:00:00.000Z",
- "type": "payments"
- },
- {
- "id": 2680839,
- "hashid": "7ESVZLr",
- "reference": "SUB816",
- "amount": 24.99,
- "company_id": 636211471,
- "card_brand": "visa",
- "card_last4": null,
- "secure_token": "9d0rEeM7T3xI8PZf6VjnNg",
- "status": "success",
- "created_at": "2018-01-03T00:00:00.000Z",
- "updated_at": "2018-01-03T00:00:00.000Z",
- "type": "payments"
- }
- ]
- }
-}
-```
-
-## Errors
-
-- **404** Not found
-- **401** Unauthorized
diff --git a/docs/api-customers.md b/docs/api-customers.md
deleted file mode 100644
index 70c1cbf..0000000
--- a/docs/api-customers.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-id: api-customers
-title: GET /api/v1/customers
-sidebar_label: GET /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-List all of your customers, ordered chronologically, most recent first.
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/customers?page=1&per_page=50 \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get(
- "https://api.payhere.co/api/v1/customers",
- page: 1,
- per_page: 50
- )
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **page** - Page number
-- **per_page** - Records per page, default 20, max 100.
-
-## Response
-
-```json
-{
- "data": [
- {
- "id": 989899294,
- "name": "Geoff Williams",
- "email": "g.williams01@example.org",
- "ip_address": null,
- "location": {},
- "created_at": "2019-03-04T16:28:32.656Z",
- "updated_at": "2019-03-04T16:28:32.656Z",
- "type": "customers"
- }
- ],
- "meta": {
- "current_page": 1,
- "next_page": null,
- "prev_page": null,
- "total_pages": 1,
- "total_count": 1
- }
-}
-```
-
-## Errors
-
-- **400** Bad request
-- **401** Unauthorized
-
-
-
diff --git a/docs/api-payment-show.md b/docs/api-payment-show.md
deleted file mode 100644
index cf986e6..0000000
--- a/docs/api-payment-show.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-id: api-payment-show
-title: GET /api/v1/payments/:id
-sidebar_label: GET /:id
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Fetch a payment by ID
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/payments/:id \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get("https://api.payhere.co/api/v1/payments/:id")
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **id** - Payment ID to lookup
-
-## Response
-
-```json
-{
- "data": {
- "id": 13,
- "hashid": "oPPSd",
- "reference": null,
- "formatted_amount": "£12.99",
- "amount": 12.99,
- "currency": "gbp",
- "refund_amount": 0,
- "amount_paid": 12.99,
- "company_id": 1,
- "card_brand": "Visa",
- "card_last4": "4242",
- "secure_token": "8UCnIBSy8hsPO9mr2mI9IA",
- "status": "success",
- "success": true,
- "object_name": "Office space",
- "created_at": "2019-02-23T16:51:38.189Z",
- "updated_at": "2019-02-23T16:51:45.323Z",
- "type": "payments",
- "customer": {
- "id": 10,
- "name": "Colours",
- "email": "colours@colours.com",
- "ip_address": "127.0.0.1",
- "location": {},
- "created_at": "2019-02-23T16:51:38.135Z",
- "updated_at": "2019-02-23T16:51:39.336Z",
- "type": "customers"
- },
- "subscription": {
- "id": 4,
- "customer_id": 10,
- "last_charged": null,
- "next_charge_at": null,
- "status": "active",
- "stripe_subscription_id": "sub_EaEBPP4DcwFD3X",
- "stripe_plan_id": "office-space-membership-2",
- "billing_interval": "month",
- "membership_plan_id": 2,
- "provider": "stripe",
- "metadata": {
- "card_brand": "Visa",
- "card_last4": "4242"
- },
- "billing_interval_count": 1,
- "min_billing_cycles": null,
- "created_at": "2019-02-23T16:51:45.301Z",
- "updated_at": "2019-02-23T16:51:45.301Z",
- "type": "subscriptions"
- },
- "item": {
- "id": 2,
- "name": "Office space",
- "description": "Shared office space at Alt Labs HQ",
- "price": 100,
- "price_in_cents": 10000,
- "currency": "gbp",
- "slug": "office-space",
- "billing_interval": "month",
- "billing_interval_count": 1,
- "hidden": true,
- "min_billing_cycles": null,
- "limited_qty": false,
- "qty": 0,
- "created_at": "2018-09-25T16:11:00.990Z",
- "updated_at": "2018-09-25T16:11:03.392Z",
- "type": "membership_plans"
- }
- }
-}
-```
-
-## Errors
-
-- **404** Not found
-- **401** Unauthorized
-
-
-
diff --git a/docs/api-payments.md b/docs/api-payments.md
deleted file mode 100644
index 9026d38..0000000
--- a/docs/api-payments.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-id: api-payments
-title: GET /api/v1/payments
-sidebar_label: GET /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-List all of your payments, ordered chronologically, most recent first.
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/payments?page=1&per_page=50 \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get(
- "https://api.payhere.co/api/v1/payments",
- page: 1,
- per_page: 50
- )
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **page** - Page number
-- **per_page** - Records per page, default 20, max 100.
-
-## Response
-
-```json
-{
- "data": [
- {
- "id": 845088515,
- "hashid": "VRSgg9kvB",
- "reference": "GW8264",
- "formatted_amount": "£12.99",
- "amount": 12.99,
- "currency": "gbp",
- "refund_amount": 2.99,
- "amount_paid": 10.00,
- "company_id": 636211471,
- "card_brand": "visa",
- "card_last4": null,
- "secure_token": "Vt-ixl7oXL2OgVQagjUkdg",
- "status": "part_refund",
- "success": true,
- "created_at": "2017-06-03T00:00:00.000Z",
- "updated_at": "2017-06-03T00:00:00.000Z",
- "type": "payments"
- }
- ],
- "meta": {
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "total_pages": 2,
- "total_count": 2
- }
-}
-```
-
-## Errors
-
-- **400** Bad request
-- **401** Unauthorized
diff --git a/docs/api-plans-create.md b/docs/api-plans-create.md
deleted file mode 100644
index 4cdfe50..0000000
--- a/docs/api-plans-create.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-id: api-plans-create
-title: POST /api/v1/plans
-sidebar_label: POST /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Create a new plan.
-
-## Request
-
-
-
-
-```sh
-$ curl -X POST https://api.payhere.co/api/v1/plans \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
- -d '{"name": "New name"}'
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .post("https://api.payhere.co/api/v1/plans", json: { name: "New name" })
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **payment_type** - One of "recurring" or "one_off"
-- **user_selects_amount** - Set to true for donations
-- **name** - Display name of the plan
-- **description** - Description of the product/service, displayed to end customer
-- **price** - Set the price of the plan, leave empty for donations.
-- **currency** - 3 letter currency code for the plan i.e. "usd", "gbp", "eur"
-- **receipt_text** - Custom message to be added to the email receipt
-- **hidden** - Hide this plan from your payments landing page
-- **success_url** - URL to redirect customer to after successful payment
-- **webhook_url** - URL for Payhere to send webhooks to about the status of payments on this plan
-- **pay_button_text** - Defaults to "Pay", you could change it to "Subscribe", "Donate" or anything really.
-
-#### Params only applicable to one-off plans:
-
-- **show_qty** - Show a quantity field on payment form, allowing customers to purchase more than one.
-
-##### Digital downloads
-
-- **digital_download** - Set to `true` to enable digital downloads for this payment link (file or external URL).
-- **download_type** - Either `"upload"` (attach a file with the request) or `"url"` (use an external download URL).
-- **download_file** - The file to deliver when `download_type` is `"upload"`. Must be sent as `multipart/form-data` (ActiveStorage); not available in a JSON-only body.
-- **download_url** - HTTPS URL to the file when `download_type` is `"url"`.
-
-#### Params only applicable to recurring plans:
-
-- **billing_interval** - One of "week", "month" or "year"
-- **setup_fee** - Add a one-off setup fee to the first payment
-- **min_billing_cycles** - Customer cannot cancel this plan through Payhere until N payments have been made.
-- **billing_day** - Day of the month to charge customer
-- **cancel_after** - Cancel plan automatically after N payments.
-
-### Digital downloads
-
-For one-off plans you can create a payment link that delivers a digital product either by uploading a file or by pointing to an external URL.
-
-**File upload** — use `multipart/form-data` and field `download_file`:
-
-```sh
-curl -X POST https://api.payhere.co/api/v1/plans \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}" \
- -F "payment_type=one_off" \
- -F "name=My Ebook" \
- -F "price=15" \
- -F "currency=gbp" \
- -F "digital_download=true" \
- -F "download_type=upload" \
- -F "download_file=@/path/to/your-file.pdf"
-```
-
-**External URL** — send JSON (or form fields) including `download_url`:
-
-```json
-{
- "payment_type": "one_off",
- "name": "External Download",
- "price": 10,
- "currency": "gbp",
- "digital_download": true,
- "download_type": "url",
- "download_url": "https://example.com/file.zip"
-}
-```
-
-## Response
-
-```json
-{
- "data": {
- "id": 64,
- "payment_type": "recurring",
- "name": "New name",
- "description": "",
- "price": 0,
- "price_in_cents": 0,
- "currency": "eur",
- "slug": "new-name",
- "billing_interval": "month",
- "billing_interval_count": 1,
- "hidden": false,
- "min_billing_cycles": null,
- "billing_day": null,
- "limited_qty": false,
- "qty": 0,
- "cancel_after": null,
- "success_url": "",
- "trial_period_days": null,
- "show_qty": false,
- "custom_fields": [],
- "user_selects_amount": true,
- "pay_button_text": "",
- "setup_fee": 0,
- "has_setup_fee": false,
- "created_at": "2020-03-29T09:31:47.428Z",
- "updated_at": "2020-04-01T22:06:04.296Z",
- "type": "plans",
- "receipt_text": "",
- "webhook_url": ""
- }
-}
-```
-
-## Errors
-
-- **401** Unauthorized
-- **400** Bad request - validation erros returned
diff --git a/docs/api-plans-update.md b/docs/api-plans-update.md
deleted file mode 100644
index e3e2ebb..0000000
--- a/docs/api-plans-update.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-id: api-plans-update
-title: PUT /api/v1/plans/:id
-sidebar_label: PUT /:id
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Update a plan.
-
-## Request
-
-
-
-
-```sh
-$ curl -X PUT https://api.payhere.co/api/v1/plans/:id \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
- -d '{"name": "New name"}'
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .put("https://api.payhere.co/api/v1/plans/:id", json: { name: "New name" })
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **name** - Display name of the plan
-- **description** - Description of the product/service, displayed to end customer
-- **receipt_text** - Custom message to be added to the email receipt
-- **hidden** - Hide this plan from your payments landing page
-- **success_url** - URL to redirect customer to after successful payment
-- **webhook_url** - URL for Payhere to send webhooks to about the status of payments on this plan
-- **pay_button_text** - Defaults to "Pay", you could change it to "Subscribe", "Donate" or anything really.
-
-#### Params only applicable to one-off plans:
-
-- **price** - Set the price of the plan
-- **currency** - 3 letter currency code for the plan i.e. "usd", "gbp", "eur"
-- **show_qty** - Show a quantity field on payment form, allowing customers to purchase more than one.
-
-#### Params only applicable to subscription plans:
-
-- **setup_fee** - Add a one-off setup fee to the first payment
-- **min_billing_cycles** - Customer cannot cancel this plan through Payhere until N payments have been made.
-- **billing_day** - Day of the month to charge customer
-- **cancel_after** - Cancel plan automatically after N payments.
-
-
-## Response
-
-```json
-{
- "data": {
- "id": 64,
- "payment_type": "recurring",
- "name": "New name",
- "description": "",
- "price": 0,
- "price_in_cents": 0,
- "currency": "eur",
- "slug": "new-name",
- "billing_interval": "month",
- "billing_interval_count": 1,
- "hidden": false,
- "min_billing_cycles": null,
- "billing_day": null,
- "limited_qty": false,
- "qty": 0,
- "cancel_after": null,
- "success_url": "",
- "trial_period_days": null,
- "show_qty": false,
- "custom_fields": [],
- "user_selects_amount": true,
- "pay_button_text": "",
- "setup_fee": 0,
- "has_setup_fee": false,
- "created_at": "2020-03-29T09:31:47.428Z",
- "updated_at": "2020-04-01T22:06:04.296Z",
- "type": "plans",
- "receipt_text": "",
- "webhook_url": ""
- }
-}
-```
-
-## Errors
-
-- **401** Unauthorized
-- **400** Bad request - validation erros returned
diff --git a/docs/api-plans.md b/docs/api-plans.md
deleted file mode 100644
index 40a1b5b..0000000
--- a/docs/api-plans.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-id: api-plans
-title: GET /api/v1/plans
-sidebar_label: GET /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-List all of your plans.
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/plans?page=1&per_page=50 \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get(
- "https://api.payhere.co/api/v1/plans",
- page: 1,
- per_page: 50
- )
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **page** - Page number
-- **per_page** - Records per page, default 20, max 100.
-
-## Response
-
-```json
-{
- "data": [
- {
- "id": 64,
- "payment_type": "recurring",
- "name": "Help us fight COVID-19",
- "description": "",
- "price": 0,
- "price_in_cents": 0,
- "currency": "eur",
- "slug": "help-us-fight-covid-19",
- "billing_interval": "month",
- "billing_interval_count": 1,
- "hidden": false,
- "min_billing_cycles": null,
- "billing_day": null,
- "limited_qty": false,
- "qty": 0,
- "cancel_after": null,
- "success_url": "",
- "trial_period_days": null,
- "show_qty": false,
- "custom_fields": [],
- "user_selects_amount": true,
- "pay_button_text": "",
- "setup_fee": 0,
- "has_setup_fee": false,
- "created_at": "2020-03-29T09:31:47.428Z",
- "updated_at": "2020-04-01T22:06:04.296Z",
- "type": "plans",
- "receipt_text": "",
- "webhook_url": ""
- }
- ],
- "meta": {
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "total_pages": 2,
- "total_count": 2
- }
-}
-```
-
-## Errors
-
-- **400** Bad request
-- **401** Unauthorized
diff --git a/docs/api-refunds.md b/docs/api-refunds.md
deleted file mode 100644
index 837e0bd..0000000
--- a/docs/api-refunds.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-id: api-refunds
-title: POST /api/v1/refunds
-sidebar_label: POST /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-This will refund a customer the amount specified, can be a partial refund.
-
-## Request
-
-
-
-
-```sh
-$ curl -X POST https://api.payhere.co/api/v1/refunds \
- -H "Accept: application/json" \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer ${api_key_here}" \
- -d '{"payment_id": 373, "amount": 0.5, "reason": "requested_by_customer"}'
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .post(
- "https://api.payhere.co/api/v1/refunds",
- payment_id: 373,
- amount: 0.5,
- reason: "requested_by_customer"
- )
-
-success = resp.status == 204
-```
-
-
-
-
-### Params
-
-- **payment_id** - ID of the payment to refund
-- **amount** - amount to refund the customer, uses the currency of their payment, if USD, amount should be in dollars and can use decimal point i.e. 1.5 is $1.50 USD
-- **reason** - Reason for the refund, one of: `requested_by_customer`, `duplicate` or `fraudulent`
-
-## Response
-
-```json
-204 No content
-```
-
-## Errors
-
-- **400** Bad request - if validation fails
-- **401** Unauthorized
diff --git a/docs/api-subscription-destroy.md b/docs/api-subscription-destroy.md
deleted file mode 100644
index f364315..0000000
--- a/docs/api-subscription-destroy.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-id: api-subscription-destroy
-title: DELETE /api/v1/subscriptions/:id
-sidebar_label: DELETE /:id
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Cancel a subscription immediately so there are no further payments, subscription will remain active until period end.
-
-## Request
-
-
-
-
-```sh
-$ curl -X DELETE https://api.payhere.co/api/v1/subscriptions/:id \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .delete("https://api.payhere.co/api/v1/subscriptions/:id")
-
-success = resp.status == 204
-```
-
-
-
-
-### Params
-
-- **id** - Subscription to cancel
-
-## Response
-
-```json
-204 No content
-```
-
-## Errors
-
-- **404** Not found
-- **401** Unauthorized
diff --git a/docs/api-subscription-show.md b/docs/api-subscription-show.md
deleted file mode 100644
index 37863d3..0000000
--- a/docs/api-subscription-show.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-id: api-subscription-show
-title: GET /api/v1/subscriptions/:id
-sidebar_label: GET /:id
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Fetch a subscription by ID, this will also pull down the customer and payments.
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/subscriptions/:id \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get("https://api.payhere.co/api/v1/subscriptions/:id")
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **id** - Subscription ID to lookup
-
-## Response
-
-```json
-{
- "data": {
- "id": 173524457,
- "customer_id": 989899294,
- "last_charged": "2018-01-03T00:00:00.000Z",
- "next_charge_at": "2018-02-03T00:00:00.000Z",
- "status": "active",
- "stripe_subscription_id": "d44ea881",
- "stripe_plan_id": "void_pro_sub_1",
- "billing_interval": "month",
- "membership_plan_id": 372786875,
- "provider": "stripe",
- "metadata": {},
- "billing_interval_count": 1,
- "min_billing_cycles": null,
- "created_at": "2018-01-03T00:00:00.000Z",
- "updated_at": "2018-01-03T00:00:00.000Z",
- "type": "subscriptions",
- "customer": {
- "id": 989899294,
- "name": "Geoff Williams",
- "email": "g.williams01@example.org",
- "ip_address": null,
- "location": {},
- "created_at": "2019-03-04T17:08:19.453Z",
- "updated_at": "2019-03-04T17:08:19.453Z",
- "type": "customers"
- },
- "plan": {
- "id": 20,
- "payment_type": "recurring",
- "name": "Pro Plan",
- "description": "",
- "price": 15,
- "price_in_cents": 1500,
- "currency": "gbp",
- "slug": "pro-plan",
- "billing_interval": "month",
- "billing_interval_count": 1,
- "hidden": false,
- "min_billing_cycles": null,
- "billing_day": null,
- "limited_qty": false,
- "qty": 0,
- "cancel_after": null,
- "success_url": "",
- "trial_period_days": null,
- "created_at": "2019-04-19T09:02:45.846Z",
- "updated_at": "2019-04-27T12:05:38.223Z",
- "type": "plans"
- },
- "payments": [
- {
- "id": 2680839,
- "hashid": "7ESVZLr",
- "reference": "SUB816",
- "amount": 24.99,
- "company_id": 636211471,
- "card_brand": "visa",
- "card_last4": null,
- "secure_token": "-zLiIKE-7MEqgeWJgDJpww",
- "status": "success",
- "created_at": "2018-01-03T00:00:00.000Z",
- "updated_at": "2018-01-03T00:00:00.000Z",
- "type": "payments"
- }
- ]
- }
-}
-```
-
-## Errors
-
-- **404** Not found
-- **401** Unauthorized
diff --git a/docs/api-subscriptions.md b/docs/api-subscriptions.md
deleted file mode 100644
index 2ce94ed..0000000
--- a/docs/api-subscriptions.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-id: api-subscriptions
-title: GET /api/v1/subscriptions
-sidebar_label: GET /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-List all of your subscriptions, ordered chronologically, most recent payment first.
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/subscriptions?page=1&per_page=50 \
- -H "Accept: application/json" \
- -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-resp = HTTP.auth("Bearer #{api_key_here}")
- .get(
- "https://api.payhere.co/api/v1/subscriptions",
- page: 1,
- per_page: 50
- )
-
-parsed = JSON.parse(resp.body)
-```
-
-
-
-
-### Params
-
-- **page** - Page number
-- **per_page** - Records per page, default 20, max 100.
-
-## Response
-
-```json
-{
- "data": [
- {
- "id": 173524457,
- "customer_id": 989899294,
- "last_charged": "2018-01-03T00:00:00.000Z",
- "next_charge_at": "2018-02-03T00:00:00.000Z",
- "status": "active",
- "stripe_subscription_id": "2e72dabd",
- "stripe_plan_id": "void_pro_sub_1",
- "billing_interval": "month",
- "membership_plan_id": 372786875,
- "provider": "stripe",
- "metadata": {},
- "billing_interval_count": 1,
- "min_billing_cycles": null,
- "created_at": "2018-01-03T00:00:00.000Z",
- "updated_at": "2018-01-03T00:00:00.000Z",
- "type": "subscriptions",
- "customer": {
- "id": 989899294,
- "name": "Geoff Williams",
- "email": "g.williams01@example.org",
- "ip_address": null,
- "location": {},
- "created_at": "2019-03-04T17:06:36.240Z",
- "updated_at": "2019-03-04T17:06:36.240Z",
- "type": "customers"
- },
- "plan": {
- "id": 20,
- "payment_type": "recurring",
- "name": "Pro Plan",
- "description": "",
- "price": 15,
- "price_in_cents": 1500,
- "currency": "gbp",
- "slug": "pro-plan",
- "billing_interval": "month",
- "billing_interval_count": 1,
- "hidden": false,
- "min_billing_cycles": null,
- "billing_day": null,
- "limited_qty": false,
- "qty": 0,
- "cancel_after": null,
- "success_url": "",
- "trial_period_days": null,
- "created_at": "2019-04-19T09:02:45.846Z",
- "updated_at": "2019-04-27T12:05:38.223Z",
- "type": "plans"
- }
- }
- ],
- "meta": {
- "current_page": 1,
- "next_page": null,
- "prev_page": null,
- "total_pages": 1,
- "total_count": 1
- }
-}
-```
-
-## Errors
-
-- **400** Bad request
-- **401** Unauthorized
-
-
-
diff --git a/docs/api-user.md b/docs/api-user.md
deleted file mode 100644
index fcddf5c..0000000
--- a/docs/api-user.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-id: api-user
-title: GET /api/v1/user
-sidebar_label: GET /
----
-
-import Tabs from "@theme/Tabs";
-import TabItem from "@theme/TabItem";
-
-Fetch info on the currently authenticated user
-
-## Request
-
-
-
-
-```sh
-$ curl -X GET https://api.payhere.co/api/v1/user -H "Authorization: Bearer ${api_key_here}"
-```
-
-
-
-
-```ruby
-require "http"
-require "json"
-
-raw_json = HTTP.auth("Bearer #{api_key_here}")
- .get("https://api.payhere.co/api/v1/user")
- .body.to_s
-
-json = JSON.parse(raw_json)
-```
-
-
-
-
-## Response
-
-```json
-{
- "data": {
- "id": 2,
- "display_name": "John Smith",
- "email": "john.smith@example.org",
- "created_at": "2015-11-08T14:12:27.962Z",
- "updated_at": "2019-03-04T13:57:32.114Z",
- "type": "users"
- }
-}
-```
-
-## Errors
-
-- **401** Unauthorized
diff --git a/docs/intro.md b/docs/intro.md
index 5bd9515..727bfe7 100644
--- a/docs/intro.md
+++ b/docs/intro.md
@@ -63,4 +63,4 @@ Webhooks provide a secure way for us to communicate payment and customer informa
Use our API to build advanced integrations.
-[Read more](api-auth.md)
+[Read more](api-reference/payhere-rest-api)
diff --git a/docs/resthooks.md b/docs/resthooks.md
index 295b5ac..d52a271 100644
--- a/docs/resthooks.md
+++ b/docs/resthooks.md
@@ -14,7 +14,7 @@ If you are building a platform integration [please reach out to us](mailto:suppo
## Subscribing to a REST hook
-In order to start receiving REST hooks, you first need to subscribe to a resource or event for a given Company. Follow our [API authentication guide](/docs/api-auth) to provide an API token.
+In order to start receiving REST hooks, you first need to subscribe to a resource or event for a given Company. Follow our [API authentication guide](/docs/api-reference/payhere-rest-api#authentication) to provide an API token.
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 2b1c73e..78cc1ed 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -41,6 +41,7 @@ const config = {
docs: {
routeBasePath: "docs",
sidebarPath: "./sidebars.js",
+ docItemComponent: "@theme/ApiItem",
},
blog: {
showReadingTime: true,
@@ -52,10 +53,59 @@ const config = {
],
],
+ plugins: [
+ "docusaurus-plugin-sass",
+ [
+ "docusaurus-plugin-openapi-docs",
+ {
+ id: "openapi",
+ docsPluginId: "classic",
+ config: {
+ publicV1: {
+ specPath: "openapi/public_v1.yaml",
+ outputDir: "docs/api-reference",
+ downloadUrl:
+ "https://sandbox.payhere.co/openapi/public_v1.yaml",
+ hideSendButton: true,
+ showSchemas: false,
+ sidebarOptions: {
+ groupPathsBy: "tag",
+ categoryLinkSource: "tag",
+ },
+ },
+ },
+ },
+ ],
+ ],
+
+ themes: ["docusaurus-theme-openapi-docs"],
+
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
image: "img/open-graph.png",
+ languageTabs: [
+ {
+ highlight: "bash",
+ language: "curl",
+ logoClass: "curl",
+ },
+ {
+ highlight: "ruby",
+ language: "ruby",
+ logoClass: "ruby",
+ },
+ {
+ highlight: "javascript",
+ language: "nodejs",
+ logoClass: "nodejs",
+ },
+ {
+ highlight: "python",
+ language: "python",
+ logoClass: "python",
+ },
+ ],
navbar: {
title: "Developers",
logo: {
@@ -82,7 +132,10 @@ const config = {
items: [
{ label: "Getting Started", to: "/docs/intro" },
{ label: "Embed SDK", to: "/docs/embed-sdk" },
- { label: "API Reference", to: "/docs/api-auth" },
+ {
+ label: "API Reference",
+ to: "/docs/api-reference/payhere-rest-api",
+ },
],
},
{
@@ -109,6 +162,7 @@ const config = {
// of the site's light/dark toggle, so both prism themes match.
theme: prismThemes.oneDark,
darkTheme: prismThemes.oneDark,
+ additionalLanguages: ["ruby", "python"],
},
}),
};
diff --git a/openapi/public_v1.yaml b/openapi/public_v1.yaml
new file mode 100644
index 0000000..f76b475
--- /dev/null
+++ b/openapi/public_v1.yaml
@@ -0,0 +1,8529 @@
+---
+openapi: 3.1.0
+info:
+ title: PayHere REST API
+ version: v1
+ description: Use the PayHere REST API to manage payment links and inspect companies,
+ customers, payments, subscriptions, and refunds. All documented operations require
+ a PayHere API key.
+ contact:
+ name: PayHere Support
+ email: support@payhere.co
+paths:
+ "/api/v1/current_company":
+ get:
+ summary: Retrieve the current company
+ tags:
+ - Company
+ operationId: getCurrentCompany
+ description: Returns the company selected by the authenticated user, including
+ account, tax, domain, and team details. Platform-only merchant-portal fields
+ are not returned to API-key requests.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: current company
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/CompanyResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ put:
+ summary: Update the current company
+ tags:
+ - Company
+ operationId: updateCurrentCompany
+ description: Updates supplied company settings and returns the detailed company.
+ Omitted fields remain unchanged; submit multipart form data when uploading
+ a logo.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/CompanyUpdateRequest"
+ examples:
+ company_details:
+ summary: Update company details
+ value:
+ legal_name: Example Studio Ltd
+ support_email: support@example.com
+ multipart/form-data:
+ schema:
+ "$ref": "#/components/schemas/CompanyUpdateMultipartRequest"
+ examples:
+ logo:
+ summary: Upload a company logo
+ value:
+ name: Example Studio
+ logo: ""
+ responses:
+ '200':
+ description: company updated
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/CompanyResponse"
+ '400':
+ description: validation failed
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/BadRequestError"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ "/api/v1/current_company/stats":
+ get:
+ summary: Retrieve company statistics
+ tags:
+ - Company
+ operationId: getCurrentCompanyStats
+ description: Returns successful payment volume and new active-subscriber counts
+ for the last 30 days, the preceding 30 days, and all time. Monetary totals
+ are converted to the company's configured currency.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: company statistics
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/StatsResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ "/api/v1/customers":
+ get:
+ summary: List customers
+ tags:
+ - Customers
+ operationId: listCustomers
+ description: Returns customers attached to the authenticated company, ordered
+ newest first. Use detailed=true to embed company-specific details, payments,
+ and subscriptions in each item.
+ parameters:
+ - name: page
+ in: query
+ required: false
+ description: Page number to return. Blank values use the first page.
+ example: 1
+ schema:
+ type: integer
+ minimum: 1
+ default: 1
+ - name: per_page
+ in: query
+ required: false
+ description: Number of records per page. Invalid or blank values use 20; values
+ above 100 are capped at 100.
+ example: 20
+ schema:
+ type: integer
+ minimum: 1
+ maximum: 100
+ default: 20
+ - name: query
+ in: query
+ required: false
+ description: Full-text search across customer ID, name, company name, and
+ email. Blank values do not filter the collection.
+ example: jamie@example.com
+ schema:
+ type: string
+ - name: detailed
+ in: query
+ required: false
+ description: When true, embeds payments, subscriptions, and company-specific
+ customer details. Blank values behave as false.
+ example: true
+ schema:
+ type: boolean
+ default: false
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: customers
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/CustomerListResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ "/api/v1/customers/{id}":
+ parameters:
+ - name: id
+ in: path
+ required: true
+ description: Numeric customer ID belonging to the authenticated company.
+ example: 24
+ schema:
+ type: integer
+ minimum: 1
+ get:
+ summary: Retrieve a customer
+ tags:
+ - Customers
+ operationId: getCustomer
+ description: Returns a company-scoped customer with their company-specific details,
+ payments, and subscriptions embedded.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: customer
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/CustomerResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ '404':
+ description: customer not found
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/NotFoundError"
+ "/api/v1/payments":
+ get:
+ summary: List payments
+ tags:
+ - Payments
+ operationId: listPayments
+ description: Returns non-temporary payments for the authenticated company with
+ customer, purchased-item, and subscription details. Results are ordered newest
+ first after any requested sort and may be filtered by status or exact coupon
+ code.
+ parameters:
+ - name: page
+ in: query
+ required: false
+ description: Page number to return. Blank values use the first page.
+ example: 1
+ schema:
+ type: integer
+ minimum: 1
+ default: 1
+ - name: per_page
+ in: query
+ required: false
+ description: Number of records per page. Invalid or blank values use 20; values
+ above 100 are capped at 100.
+ example: 20
+ schema:
+ type: integer
+ minimum: 1
+ maximum: 100
+ default: 20
+ - name: status
+ in: query
+ required: false
+ description: One or more comma-separated payment statuses. Blank values do
+ not filter the collection.
+ example: success,part_refund
+ schema:
+ type: string
+ pattern: "^(?:pending|success|part_refund|full_refund|future|failed)(?:,(?:pending|success|part_refund|full_refund|future|failed))*$"
+ - name: coupon_code
+ in: query
+ required: false
+ description: Exact coupon code to match. Blank values do not filter the collection.
+ example: WELCOME20
+ schema:
+ type: string
+ - name: sort_by
+ in: query
+ required: false
+ description: Payment field used as the primary sort. The API currently has
+ no enforced field allowlist; amount_in_cents is a supported example. Blank
+ values retain newest-first ordering.
+ example: amount_in_cents
+ schema:
+ type: string
+ - name: sort_order
+ in: query
+ required: false
+ description: Sort direction when sort_by is present. Blank values use ascending
+ order for that field.
+ example: descend
+ schema:
+ type: string
+ enum:
+ - ascend
+ - descend
+ default: ascend
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: payments
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/PaymentListResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ "/api/v1/payments/{id}":
+ parameters:
+ - name: id
+ in: path
+ required: true
+ description: Numeric payment ID or public hashid belonging to the authenticated
+ company.
+ example: pay_7Yx2K9
+ schema:
+ oneOf:
+ - type: integer
+ minimum: 1
+ - type: string
+ minLength: 1
+ get:
+ summary: Retrieve a payment
+ tags:
+ - Payments
+ operationId: getPayment
+ description: Returns a company-scoped payment with its customer, purchased item,
+ and subscription when present.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: payment
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/PaymentResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ '404':
+ description: payment not found
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/NotFoundError"
+ "/api/v1/plans":
+ get:
+ summary: List payment links
+ tags:
+ - Payment links
+ operationId: listPlans
+ description: Returns reusable, non-deleted payment links for the authenticated
+ company, ordered newest first. Each item embeds merchant-only settings and
+ its owning company.
+ parameters:
+ - name: page
+ in: query
+ required: false
+ description: Page number to return. Blank values use the first page.
+ example: 1
+ schema:
+ type: integer
+ minimum: 1
+ default: 1
+ - name: per_page
+ in: query
+ required: false
+ description: Number of records per page. Invalid or blank values use 20; values
+ above 100 are capped at 100.
+ example: 20
+ schema:
+ type: integer
+ minimum: 1
+ maximum: 100
+ default: 20
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: payment links
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/PlanListResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ post:
+ summary: Create a payment link
+ tags:
+ - Payment links
+ operationId: createPlan
+ description: Creates a reusable payment link. Payment type and currency default
+ to recurring and gbp when omitted. A fixed price is required unless the customer
+ selects the amount; recurring-only, donation, stock, and download fields apply
+ conditionally.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/PlanCreateRequest"
+ examples:
+ recurring:
+ summary: Recurring payment link
+ value:
+ payment_type: recurring
+ name: Consulting membership
+ price: 30
+ currency: gbp
+ billing_interval: month
+ donation:
+ summary: Combined one-off and recurring donation
+ value:
+ payment_type: one_off
+ name: Community appeal
+ currency: gbp
+ user_selects_amount: true
+ donation_mode: both
+ multipart/form-data:
+ schema:
+ "$ref": "#/components/schemas/PlanCreateMultipartRequest"
+ examples:
+ digital_download:
+ summary: Uploaded digital download
+ value:
+ payment_type: one_off
+ name: Example ebook
+ price: 15
+ currency: gbp
+ digital_download: true
+ download_type: upload
+ download_file: ""
+ responses:
+ '201':
+ description: payment link created
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/PlanResponse"
+ '400':
+ description: validation failed
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/BadRequestError"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ "/api/v1/plans/{id}":
+ parameters:
+ - name: id
+ in: path
+ required: true
+ description: Payment-link slug belonging to the authenticated company.
+ example: consulting-membership
+ schema:
+ type: string
+ minLength: 1
+ put:
+ summary: Update a payment link
+ tags:
+ - Payment links
+ operationId: updatePlan
+ description: Updates a company-scoped payment link and returns it. Omitted values
+ remain unchanged. Price and currency changes apply only to existing one-off
+ links; recurring schedule changes apply only to links that already support
+ recurring payments.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/PlanUpdateRequest"
+ examples:
+ rename:
+ summary: Rename a payment link
+ value:
+ name: Updated consulting membership
+ multipart/form-data:
+ schema:
+ "$ref": "#/components/schemas/PlanUpdateMultipartRequest"
+ examples:
+ replace_download:
+ summary: Replace an uploaded download
+ value:
+ download_type: upload
+ download_file: ""
+ responses:
+ '200':
+ description: payment link updated
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/PlanResponse"
+ '400':
+ description: validation failed
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/BadRequestError"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ '404':
+ description: payment link not found
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/NotFoundError"
+ "/api/v1/refunds":
+ post:
+ summary: Refund a payment
+ tags:
+ - Refunds
+ operationId: createRefund
+ description: Refunds all or part of a company payment through its processor.
+ Amount is expressed in the payment currency's major unit, cannot exceed the
+ unrefunded balance, and updates the payment to part_refund or full_refund.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/RefundRequest"
+ examples:
+ partial_refund:
+ summary: Refund part of a payment
+ value:
+ payment_id: 101
+ amount: 5
+ reason: requested_by_customer
+ responses:
+ '204':
+ description: payment refunded
+ '400':
+ description: refund failed
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/BadRequestError"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ '404':
+ description: payment not found
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/NotFoundError"
+ "/api/v1/subscriptions":
+ get:
+ summary: List subscriptions
+ tags:
+ - Subscriptions
+ operationId: listSubscriptions
+ description: Returns provider-backed subscriptions for the authenticated company,
+ ordered by most recently updated. Active, pending, past-due, and trialing
+ subscriptions are returned by default; with_cancelled=true also includes terminal
+ statuses.
+ parameters:
+ - name: page
+ in: query
+ required: false
+ description: Page number to return. Blank values use the first page.
+ example: 1
+ schema:
+ type: integer
+ minimum: 1
+ default: 1
+ - name: per_page
+ in: query
+ required: false
+ description: Number of records per page. Invalid or blank values use 20; values
+ above 100 are capped at 100.
+ example: 20
+ schema:
+ type: integer
+ minimum: 1
+ maximum: 100
+ default: 20
+ - name: with_cancelled
+ in: query
+ required: false
+ description: When true, includes cancelled, canceled, incomplete, incomplete_expired,
+ and unpaid subscriptions. Blank values behave as false.
+ example: true
+ schema:
+ type: boolean
+ default: false
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: subscriptions
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/SubscriptionListResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ "/api/v1/subscriptions/{id}":
+ parameters:
+ - name: id
+ in: path
+ required: true
+ description: Numeric subscription ID belonging to the authenticated company.
+ example: 77
+ schema:
+ type: integer
+ minimum: 1
+ get:
+ summary: Retrieve a subscription
+ tags:
+ - Subscriptions
+ operationId: getSubscription
+ description: Returns a company-scoped subscription with its customer, payment
+ link, and payments ordered newest first.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: subscription
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/SubscriptionResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ '404':
+ description: subscription not found
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/NotFoundError"
+ delete:
+ summary: Cancel a subscription
+ tags:
+ - Subscriptions
+ operationId: cancelSubscription
+ description: Immediately requests cancellation from Stripe or GoCardless and
+ marks the local subscription cancelled. It does not wait until the end of
+ the current billing period.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '204':
+ description: subscription cancelled
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+ '404':
+ description: subscription not found
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/NotFoundError"
+ "/api/v1/user":
+ get:
+ summary: Retrieve the current user
+ tags:
+ - User
+ operationId: getCurrentUser
+ description: Returns the authenticated user, their role in the active company,
+ and the companies available to them. API keys may be supplied as a bearer
+ token or the access_token query parameter.
+ security:
+ - BearerAuth: []
+ - AccessToken: []
+ responses:
+ '200':
+ description: current user
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/UserResponse"
+ '401':
+ description: authentication required
+ content:
+ application/json:
+ schema:
+ "$ref": "#/components/schemas/AuthenticationError"
+servers:
+- url: https://api.payhere.co
+ description: Production PayHere API
+- url: https://sandbox.payhere.co
+ description: Sandbox PayHere API for test data and integrations
+components:
+ schemas:
+ AuthenticationError:
+ type: object
+ description: Returned when the API key is missing, invalid, or expired.
+ required:
+ - error
+ properties:
+ error:
+ type: string
+ description: Human-readable explanation of the error.
+ example: The request could not be completed.
+ readOnly: true
+ additionalProperties: false
+ examples:
+ - error: You need to sign in or sign up before continuing.
+ title: AuthenticationError
+ BadRequestError:
+ description: A malformed request, business-rule failure, or validation failure.
+ oneOf:
+ - "$ref": "#/components/schemas/Error"
+ - "$ref": "#/components/schemas/ValidationError"
+ - "$ref": "#/components/schemas/MalformedRequestError"
+ examples:
+ - error: This feature is currently disabled on your account
+ - error: Plan validation failed
+ validation_errors:
+ - field: name
+ errors:
+ - can't be blank
+ full_errors:
+ - Name can't be blank
+ form_errors:
+ name: can't be blank
+ - status: 400
+ error: Bad Request
+ title: BadRequestError
+ Company:
+ type: object
+ description: A PayHere merchant account.
+ required:
+ - id
+ - name
+ - legal_name
+ - slug
+ - ready
+ - country_code
+ - button_color
+ - button_text
+ - role
+ - stripe_connected
+ - gocardless_connected
+ - currency
+ - vat_registered
+ - vat_rate
+ - small_logo_url
+ - facebook_pixel_id
+ - ga_tracking_id
+ - recaptcha_enabled
+ - avatar_url
+ - created_at
+ - updated_at
+ - type
+ properties:
+ id:
+ type: integer
+ description: Unique company ID.
+ example: 12
+ readOnly: true
+ name:
+ type: string
+ description: Public company name.
+ example: Example Studio
+ readOnly: true
+ legal_name:
+ type:
+ - string
+ - 'null'
+ description: Registered legal name, when supplied.
+ example: Example Studio Ltd
+ readOnly: true
+ slug:
+ type: string
+ description: URL-safe company identifier.
+ example: example-studio
+ readOnly: true
+ ready:
+ type: boolean
+ description: Whether the company is ready to accept payments.
+ example: true
+ readOnly: true
+ country_code:
+ type:
+ - string
+ - 'null'
+ description: Two-letter country code.
+ example: GB
+ pattern: "^[A-Z]{2}$"
+ readOnly: true
+ button_color:
+ type:
+ - string
+ - 'null'
+ description: Checkout button colour.
+ example: "#2563EB"
+ readOnly: true
+ button_text:
+ type:
+ - string
+ - 'null'
+ description: Contrasting checkout button text colour.
+ example: white
+ readOnly: true
+ role:
+ type: string
+ description: Company feature-access role.
+ example: standard
+ enum:
+ - standard
+ - beta
+ - testing
+ readOnly: true
+ stripe_connected:
+ type: boolean
+ description: Whether a Stripe account is connected.
+ example: true
+ readOnly: true
+ gocardless_connected:
+ type: boolean
+ description: Whether a GoCardless account is connected.
+ example: false
+ readOnly: true
+ currency:
+ type: string
+ description: Default lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ vat_registered:
+ type: boolean
+ description: Whether VAT collection is enabled.
+ example: true
+ readOnly: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: Configured VAT percentage; historical values may be strings.
+ example: 20
+ readOnly: true
+ small_logo_url:
+ type:
+ - string
+ - 'null'
+ description: Relative URL for the small company logo.
+ example: "/rails/active_storage/representations/example-logo.png"
+ readOnly: true
+ facebook_pixel_id:
+ type:
+ - string
+ - 'null'
+ description: Facebook Pixel ID used on checkout pages.
+ example:
+ readOnly: true
+ ga_tracking_id:
+ type:
+ - string
+ - 'null'
+ description: Google Analytics tracking ID used on checkout pages.
+ example:
+ readOnly: true
+ recaptcha_enabled:
+ type: boolean
+ description: Whether checkout forms require reCAPTCHA.
+ example: false
+ readOnly: true
+ avatar_url:
+ type: string
+ description: Generated company avatar URL.
+ example: https://example.com/avatar.png
+ format: uri
+ readOnly: true
+ created_at:
+ type: string
+ description: When the company was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the company was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: companies
+ const: companies
+ readOnly: true
+ testing_access:
+ type: boolean
+ description: Present only for companies with testing access.
+ example: true
+ readOnly: true
+ additionalProperties: false
+ title: Company
+ CompanyCustomer:
+ type: object
+ description: Company-specific details for a customer.
+ required:
+ - id
+ - card_brand
+ - card_last4
+ - created_at
+ - updated_at
+ - type
+ properties:
+ id:
+ type: integer
+ description: Unique company-customer relationship ID.
+ example: 31
+ readOnly: true
+ card_brand:
+ type:
+ - string
+ - 'null'
+ description: Brand of the customer's saved card, when available.
+ example: visa
+ readOnly: true
+ card_last4:
+ type:
+ - string
+ - 'null'
+ description: Last four digits of the customer's saved card.
+ example: '4242'
+ pattern: "^[0-9]{4}$"
+ readOnly: true
+ created_at:
+ type: string
+ description: When the customer was attached to the company.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the company-specific details last changed.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: company_customers
+ const: company_customers
+ readOnly: true
+ additionalProperties: false
+ title: CompanyCustomer
+ CompanyDetailed:
+ type: object
+ description: A company with account, tax, domain, and user details.
+ required:
+ - id
+ - name
+ - legal_name
+ - slug
+ - ready
+ - country_code
+ - button_color
+ - button_text
+ - role
+ - stripe_connected
+ - gocardless_connected
+ - currency
+ - vat_registered
+ - vat_rate
+ - small_logo_url
+ - facebook_pixel_id
+ - ga_tracking_id
+ - recaptcha_enabled
+ - avatar_url
+ - created_at
+ - updated_at
+ - type
+ - plan
+ - plan_interval
+ - subscription_status
+ - active_until
+ - support_email
+ - website
+ - address
+ - vat_registration_number
+ - vat_mechanism
+ - custom_domain
+ - users
+ properties:
+ id:
+ type: integer
+ description: Unique company ID.
+ example: 12
+ readOnly: true
+ name:
+ type: string
+ description: Public company name.
+ example: Example Studio
+ readOnly: true
+ legal_name:
+ type:
+ - string
+ - 'null'
+ description: Registered legal name, when supplied.
+ example: Example Studio Ltd
+ readOnly: true
+ slug:
+ type: string
+ description: URL-safe company identifier.
+ example: example-studio
+ readOnly: true
+ ready:
+ type: boolean
+ description: Whether the company is ready to accept payments.
+ example: true
+ readOnly: true
+ country_code:
+ type:
+ - string
+ - 'null'
+ description: Two-letter country code.
+ example: GB
+ pattern: "^[A-Z]{2}$"
+ readOnly: true
+ button_color:
+ type:
+ - string
+ - 'null'
+ description: Checkout button colour.
+ example: "#2563EB"
+ readOnly: true
+ button_text:
+ type:
+ - string
+ - 'null'
+ description: Contrasting checkout button text colour.
+ example: white
+ readOnly: true
+ role:
+ type: string
+ description: Company feature-access role.
+ example: standard
+ enum:
+ - standard
+ - beta
+ - testing
+ readOnly: true
+ stripe_connected:
+ type: boolean
+ description: Whether a Stripe account is connected.
+ example: true
+ readOnly: true
+ gocardless_connected:
+ type: boolean
+ description: Whether a GoCardless account is connected.
+ example: false
+ readOnly: true
+ currency:
+ type: string
+ description: Default lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ vat_registered:
+ type: boolean
+ description: Whether VAT collection is enabled.
+ example: true
+ readOnly: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: Configured VAT percentage; historical values may be strings.
+ example: 20
+ readOnly: true
+ small_logo_url:
+ type:
+ - string
+ - 'null'
+ description: Relative URL for the small company logo.
+ example: "/rails/active_storage/representations/example-logo.png"
+ readOnly: true
+ facebook_pixel_id:
+ type:
+ - string
+ - 'null'
+ description: Facebook Pixel ID used on checkout pages.
+ example:
+ readOnly: true
+ ga_tracking_id:
+ type:
+ - string
+ - 'null'
+ description: Google Analytics tracking ID used on checkout pages.
+ example:
+ readOnly: true
+ recaptcha_enabled:
+ type: boolean
+ description: Whether checkout forms require reCAPTCHA.
+ example: false
+ readOnly: true
+ avatar_url:
+ type: string
+ description: Generated company avatar URL.
+ example: https://example.com/avatar.png
+ format: uri
+ readOnly: true
+ created_at:
+ type: string
+ description: When the company was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the company was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: companies
+ const: companies
+ readOnly: true
+ testing_access:
+ type: boolean
+ description: Present only for companies with testing access.
+ example: true
+ readOnly: true
+ plan:
+ type:
+ - string
+ - 'null'
+ description: PayHere account plan.
+ example: growth
+ readOnly: true
+ plan_interval:
+ type:
+ - string
+ - 'null'
+ description: Account billing interval.
+ example: month
+ enum:
+ - month
+ - year
+ -
+ readOnly: true
+ subscription_status:
+ type:
+ - string
+ - 'null'
+ description: PayHere account subscription status.
+ example: active
+ enum:
+ - trial
+ - active
+ - past_due
+ - requires_billing_details
+ - cancelled
+ -
+ readOnly: true
+ active_until:
+ type:
+ - string
+ - 'null'
+ description: End of the current account access period, when applicable.
+ example:
+ format: date-time
+ readOnly: true
+ support_email:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing support email address.
+ example: support@example.com
+ format: email
+ readOnly: true
+ website:
+ type:
+ - string
+ - 'null'
+ description: Company website URL.
+ example: https://example.com
+ format: uri
+ readOnly: true
+ address:
+ type:
+ - string
+ - 'null'
+ description: Company postal address.
+ example: 1 Example Street, London
+ readOnly: true
+ vat_registration_number:
+ type:
+ - string
+ - 'null'
+ description: VAT registration number shown on receipts.
+ example: GB123456789
+ readOnly: true
+ vat_mechanism:
+ type:
+ - string
+ - 'null'
+ description: How VAT is calculated.
+ example: flat_rate
+ enum:
+ - flat_rate
+ - based_on_customer
+ - always
+ -
+ readOnly: true
+ custom_domain:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout domain, when configured.
+ example:
+ readOnly: true
+ users:
+ type: array
+ description: Users who can access the company.
+ items:
+ "$ref": "#/components/schemas/User"
+ readOnly: true
+ additionalProperties: false
+ title: CompanyDetailed
+ CompanyEmbeddedDetailed:
+ type: object
+ description: Company details embedded in another resource.
+ required:
+ - id
+ - name
+ - legal_name
+ - slug
+ - ready
+ - country_code
+ - button_color
+ - button_text
+ - role
+ - stripe_connected
+ - gocardless_connected
+ - currency
+ - vat_registered
+ - vat_rate
+ - small_logo_url
+ - facebook_pixel_id
+ - ga_tracking_id
+ - recaptcha_enabled
+ - avatar_url
+ - created_at
+ - updated_at
+ - type
+ - plan
+ - plan_interval
+ - subscription_status
+ - active_until
+ - support_email
+ - website
+ - address
+ - vat_registration_number
+ - vat_mechanism
+ - custom_domain
+ properties:
+ id:
+ type: integer
+ description: Unique company ID.
+ example: 12
+ readOnly: true
+ name:
+ type: string
+ description: Public company name.
+ example: Example Studio
+ readOnly: true
+ legal_name:
+ type:
+ - string
+ - 'null'
+ description: Registered legal name, when supplied.
+ example: Example Studio Ltd
+ readOnly: true
+ slug:
+ type: string
+ description: URL-safe company identifier.
+ example: example-studio
+ readOnly: true
+ ready:
+ type: boolean
+ description: Whether the company is ready to accept payments.
+ example: true
+ readOnly: true
+ country_code:
+ type:
+ - string
+ - 'null'
+ description: Two-letter country code.
+ example: GB
+ pattern: "^[A-Z]{2}$"
+ readOnly: true
+ button_color:
+ type:
+ - string
+ - 'null'
+ description: Checkout button colour.
+ example: "#2563EB"
+ readOnly: true
+ button_text:
+ type:
+ - string
+ - 'null'
+ description: Contrasting checkout button text colour.
+ example: white
+ readOnly: true
+ role:
+ type: string
+ description: Company feature-access role.
+ example: standard
+ enum:
+ - standard
+ - beta
+ - testing
+ readOnly: true
+ stripe_connected:
+ type: boolean
+ description: Whether a Stripe account is connected.
+ example: true
+ readOnly: true
+ gocardless_connected:
+ type: boolean
+ description: Whether a GoCardless account is connected.
+ example: false
+ readOnly: true
+ currency:
+ type: string
+ description: Default lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ vat_registered:
+ type: boolean
+ description: Whether VAT collection is enabled.
+ example: true
+ readOnly: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: Configured VAT percentage; historical values may be strings.
+ example: 20
+ readOnly: true
+ small_logo_url:
+ type:
+ - string
+ - 'null'
+ description: Relative URL for the small company logo.
+ example: "/rails/active_storage/representations/example-logo.png"
+ readOnly: true
+ facebook_pixel_id:
+ type:
+ - string
+ - 'null'
+ description: Facebook Pixel ID used on checkout pages.
+ example:
+ readOnly: true
+ ga_tracking_id:
+ type:
+ - string
+ - 'null'
+ description: Google Analytics tracking ID used on checkout pages.
+ example:
+ readOnly: true
+ recaptcha_enabled:
+ type: boolean
+ description: Whether checkout forms require reCAPTCHA.
+ example: false
+ readOnly: true
+ avatar_url:
+ type: string
+ description: Generated company avatar URL.
+ example: https://example.com/avatar.png
+ format: uri
+ readOnly: true
+ created_at:
+ type: string
+ description: When the company was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the company was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: companies
+ const: companies
+ readOnly: true
+ testing_access:
+ type: boolean
+ description: Present only for companies with testing access.
+ example: true
+ readOnly: true
+ plan:
+ type:
+ - string
+ - 'null'
+ description: PayHere account plan.
+ example: growth
+ readOnly: true
+ plan_interval:
+ type:
+ - string
+ - 'null'
+ description: Account billing interval.
+ example: month
+ enum:
+ - month
+ - year
+ -
+ readOnly: true
+ subscription_status:
+ type:
+ - string
+ - 'null'
+ description: PayHere account subscription status.
+ example: active
+ enum:
+ - trial
+ - active
+ - past_due
+ - requires_billing_details
+ - cancelled
+ -
+ readOnly: true
+ active_until:
+ type:
+ - string
+ - 'null'
+ description: End of the current account access period, when applicable.
+ example:
+ format: date-time
+ readOnly: true
+ support_email:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing support email address.
+ example: support@example.com
+ format: email
+ readOnly: true
+ website:
+ type:
+ - string
+ - 'null'
+ description: Company website URL.
+ example: https://example.com
+ format: uri
+ readOnly: true
+ address:
+ type:
+ - string
+ - 'null'
+ description: Company postal address.
+ example: 1 Example Street, London
+ readOnly: true
+ vat_registration_number:
+ type:
+ - string
+ - 'null'
+ description: VAT registration number shown on receipts.
+ example: GB123456789
+ readOnly: true
+ vat_mechanism:
+ type:
+ - string
+ - 'null'
+ description: How VAT is calculated.
+ example: flat_rate
+ enum:
+ - flat_rate
+ - based_on_customer
+ - always
+ -
+ readOnly: true
+ custom_domain:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout domain, when configured.
+ example:
+ readOnly: true
+ additionalProperties: false
+ title: CompanyEmbeddedDetailed
+ CompanyResponse:
+ type: object
+ description: Company response envelope.
+ required:
+ - data
+ properties:
+ data:
+ "$ref": "#/components/schemas/CompanyDetailed"
+ description: The authenticated company.
+ readOnly: true
+ examples:
+ - data:
+ id: 12
+ name: Example Studio
+ legal_name: Example Studio Ltd
+ slug: example-studio
+ ready: true
+ country_code: GB
+ button_color: "#2563EB"
+ button_text: white
+ role: standard
+ stripe_connected: true
+ gocardless_connected: false
+ currency: gbp
+ vat_registered: true
+ vat_rate: 20
+ small_logo_url: "/rails/active_storage/representations/example-logo.png"
+ facebook_pixel_id:
+ ga_tracking_id:
+ recaptcha_enabled: false
+ avatar_url: https://example.com/avatar.png
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: companies
+ plan: growth
+ plan_interval: month
+ subscription_status: active
+ active_until:
+ support_email: support@example.com
+ website: https://example.com
+ address: 1 Example Street, London
+ vat_registration_number: GB123456789
+ vat_mechanism: flat_rate
+ custom_domain:
+ users:
+ - id: 7
+ display_name: Alex Morgan
+ email: alex@example.com
+ unconfirmed_email:
+ role: admin
+ email_verified: true
+ company_id: 12
+ invitation_accepted: true
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: users
+ additionalProperties: false
+ title: CompanyResponse
+ CompanyUpdateMultipartRequest:
+ type: object
+ description: Company attributes submitted as multipart form data, including
+ an optional logo upload.
+ properties:
+ name:
+ type: string
+ description: Public company name. Blank values fail validation.
+ example: Example Studio
+ legal_name:
+ type:
+ - string
+ - 'null'
+ description: Registered legal name.
+ example: Example Studio Ltd
+ address:
+ type:
+ - string
+ - 'null'
+ description: Postal address shown on receipts.
+ example: 1 Example Street, London
+ support_email:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing support email.
+ example: support@example.com
+ format: email
+ website:
+ type:
+ - string
+ - 'null'
+ description: Company website URL; blank clears the value.
+ example: https://example.com
+ format: uri
+ button_color:
+ type:
+ - string
+ - 'null'
+ description: Checkout button colour.
+ example: "#2563EB"
+ button_text:
+ type:
+ - string
+ - 'null'
+ description: Checkout button text colour.
+ example: white
+ vat_registered:
+ type: boolean
+ description: Whether VAT collection is enabled.
+ example: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: VAT percentage to apply.
+ example: 20
+ vat_registration_number:
+ type:
+ - string
+ - 'null'
+ description: VAT registration number shown on receipts.
+ example: GB123456789
+ vat_mechanism:
+ type:
+ - string
+ - 'null'
+ description: How VAT is calculated.
+ example: flat_rate
+ enum:
+ - flat_rate
+ - based_on_customer
+ - always
+ -
+ company_number_label:
+ type:
+ - string
+ - 'null'
+ description: Label used for the company registration number.
+ example: Company number
+ company_number:
+ type:
+ - string
+ - 'null'
+ description: Company registration number.
+ example: '12345678'
+ invoice_reference_prefix:
+ type:
+ - string
+ - 'null'
+ description: Prefix applied to generated invoice references.
+ example: INV
+ invoice_tax_label:
+ type:
+ - string
+ - 'null'
+ description: Tax label shown on invoices.
+ example: VAT
+ invoice_tax_rate:
+ type:
+ - number
+ - 'null'
+ description: Default invoice tax percentage.
+ example: 20
+ minimum: 0
+ invoice_manual_payment_details:
+ type:
+ - string
+ - 'null'
+ description: Manual payment instructions shown on invoices.
+ example: Pay by bank transfer using the invoice reference.
+ attribution_reason:
+ type:
+ - string
+ - 'null'
+ description: How the company heard about PayHere.
+ example: Google
+ how_can_we_help:
+ type:
+ - string
+ - 'null'
+ description: Optional request for help from the PayHere team.
+ example: Help configuring VAT
+ facebook_pixel_id:
+ type:
+ - string
+ - 'null'
+ description: Facebook Pixel ID used on checkout pages.
+ example:
+ ga_tracking_id:
+ type:
+ - string
+ - 'null'
+ description: Google Analytics tracking ID used on checkout pages.
+ example:
+ custom_css:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout CSS for accounts with access to this feature.
+ example:
+ logo:
+ type: string
+ format: binary
+ description: Company logo image to upload.
+ examples:
+ - legal_name: Example Studio Ltd
+ support_email: support@example.com
+ - name: Example Studio
+ logo: ""
+ additionalProperties: false
+ title: CompanyUpdateMultipartRequest
+ CompanyUpdateRequest:
+ type: object
+ description: Company attributes to update. Omitted properties remain unchanged.
+ properties:
+ name:
+ type: string
+ description: Public company name. Blank values fail validation.
+ example: Example Studio
+ legal_name:
+ type:
+ - string
+ - 'null'
+ description: Registered legal name.
+ example: Example Studio Ltd
+ address:
+ type:
+ - string
+ - 'null'
+ description: Postal address shown on receipts.
+ example: 1 Example Street, London
+ support_email:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing support email.
+ example: support@example.com
+ format: email
+ website:
+ type:
+ - string
+ - 'null'
+ description: Company website URL; blank clears the value.
+ example: https://example.com
+ format: uri
+ button_color:
+ type:
+ - string
+ - 'null'
+ description: Checkout button colour.
+ example: "#2563EB"
+ button_text:
+ type:
+ - string
+ - 'null'
+ description: Checkout button text colour.
+ example: white
+ vat_registered:
+ type: boolean
+ description: Whether VAT collection is enabled.
+ example: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: VAT percentage to apply.
+ example: 20
+ vat_registration_number:
+ type:
+ - string
+ - 'null'
+ description: VAT registration number shown on receipts.
+ example: GB123456789
+ vat_mechanism:
+ type:
+ - string
+ - 'null'
+ description: How VAT is calculated.
+ example: flat_rate
+ enum:
+ - flat_rate
+ - based_on_customer
+ - always
+ -
+ company_number_label:
+ type:
+ - string
+ - 'null'
+ description: Label used for the company registration number.
+ example: Company number
+ company_number:
+ type:
+ - string
+ - 'null'
+ description: Company registration number.
+ example: '12345678'
+ invoice_reference_prefix:
+ type:
+ - string
+ - 'null'
+ description: Prefix applied to generated invoice references.
+ example: INV
+ invoice_tax_label:
+ type:
+ - string
+ - 'null'
+ description: Tax label shown on invoices.
+ example: VAT
+ invoice_tax_rate:
+ type:
+ - number
+ - 'null'
+ description: Default invoice tax percentage.
+ example: 20
+ minimum: 0
+ invoice_manual_payment_details:
+ type:
+ - string
+ - 'null'
+ description: Manual payment instructions shown on invoices.
+ example: Pay by bank transfer using the invoice reference.
+ attribution_reason:
+ type:
+ - string
+ - 'null'
+ description: How the company heard about PayHere.
+ example: Google
+ how_can_we_help:
+ type:
+ - string
+ - 'null'
+ description: Optional request for help from the PayHere team.
+ example: Help configuring VAT
+ facebook_pixel_id:
+ type:
+ - string
+ - 'null'
+ description: Facebook Pixel ID used on checkout pages.
+ example:
+ ga_tracking_id:
+ type:
+ - string
+ - 'null'
+ description: Google Analytics tracking ID used on checkout pages.
+ example:
+ custom_css:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout CSS for accounts with access to this feature.
+ example:
+ examples:
+ - legal_name: Example Studio Ltd
+ support_email: support@example.com
+ additionalProperties: false
+ title: CompanyUpdateRequest
+ CurrentUser:
+ type: object
+ description: The authenticated user with their available companies.
+ required:
+ - id
+ - display_name
+ - email
+ - unconfirmed_email
+ - role
+ - email_verified
+ - company_id
+ - invitation_accepted
+ - created_at
+ - updated_at
+ - type
+ - active_company_role
+ - available_companies
+ properties:
+ id:
+ type: integer
+ description: Unique user ID.
+ example: 7
+ readOnly: true
+ display_name:
+ type: string
+ description: User's display name.
+ example: Alex Morgan
+ readOnly: true
+ email:
+ type: string
+ description: User's confirmed email address.
+ example: alex@example.com
+ format: email
+ readOnly: true
+ unconfirmed_email:
+ type:
+ - string
+ - 'null'
+ description: Pending replacement email address awaiting confirmation.
+ example:
+ format: email
+ readOnly: true
+ role:
+ type: string
+ description: Application-level access role.
+ example: admin
+ enum:
+ - user
+ - beta_user
+ - admin
+ - superadmin
+ readOnly: true
+ email_verified:
+ type: boolean
+ description: Whether the email address is confirmed.
+ example: true
+ readOnly: true
+ company_id:
+ type:
+ - integer
+ - 'null'
+ description: Currently active company ID.
+ example: 12
+ readOnly: true
+ invitation_accepted:
+ type: boolean
+ description: Whether an invitation has been accepted or was not required.
+ example: true
+ readOnly: true
+ created_at:
+ type: string
+ description: When the user was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the user was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: users
+ const: users
+ readOnly: true
+ active_company_role:
+ type:
+ - string
+ - 'null'
+ description: Role within the active company.
+ example: owner
+ enum:
+ - member
+ - owner
+ -
+ readOnly: true
+ available_companies:
+ type: array
+ description: Companies the user can switch to.
+ readOnly: true
+ items:
+ type: object
+ required:
+ - id
+ - slug
+ - name
+ properties:
+ id:
+ type: integer
+ description: Company ID.
+ example: 12
+ readOnly: true
+ slug:
+ type: string
+ description: URL-safe company identifier.
+ example: example-studio
+ readOnly: true
+ name:
+ type: string
+ description: Company name.
+ example: Example Studio
+ readOnly: true
+ additionalProperties: false
+ additionalProperties: false
+ title: CurrentUser
+ CustomField:
+ type: object
+ description: A merchant-defined field collected during checkout.
+ required:
+ - label
+ - type
+ properties:
+ label:
+ type: string
+ description: Label shown to the customer.
+ example: Company name
+ type:
+ type: string
+ description: Input control type.
+ example: text
+ enum:
+ - text
+ - textarea
+ - dropdown
+ - checkbox
+ - label
+ required:
+ type: boolean
+ description: Whether the customer must supply a value.
+ example: true
+ hidden:
+ type: boolean
+ description: Whether the field is hidden from the customer.
+ example: false
+ options:
+ type:
+ - string
+ - 'null'
+ description: Comma-separated choices for a dropdown field.
+ example: Small, Medium, Large
+ additionalProperties: false
+ title: CustomField
+ Customer:
+ type: object
+ description: A customer who has paid or subscribed through the company.
+ required:
+ - id
+ - display_name
+ - name
+ - email
+ - ip_address
+ - location
+ - company_name
+ - company_address
+ - phone_number
+ - created_at
+ - updated_at
+ - type
+ properties:
+ id:
+ type: integer
+ description: Unique customer ID.
+ example: 24
+ readOnly: true
+ display_name:
+ type: string
+ description: Company name when present, otherwise the customer's name.
+ example: Acme Consulting
+ readOnly: true
+ name:
+ type: string
+ description: Customer's full name.
+ example: Jamie Taylor
+ readOnly: true
+ email:
+ type: string
+ description: Customer's email address.
+ example: jamie@example.com
+ format: email
+ readOnly: true
+ ip_address:
+ type:
+ - string
+ - 'null'
+ description: IP address captured when the customer was created.
+ example: 203.0.113.10
+ readOnly: true
+ location:
+ type:
+ - object
+ - 'null'
+ description: Geolocation data captured at checkout. Keys may vary by provider.
+ example:
+ city: London
+ country: United Kingdom
+ additionalProperties: true
+ readOnly: true
+ company_name:
+ type:
+ - string
+ - 'null'
+ description: Customer's organisation name.
+ example: Acme Consulting
+ readOnly: true
+ company_address:
+ type:
+ - string
+ - 'null'
+ description: Customer's organisation address.
+ example: 2 Example Road, London
+ readOnly: true
+ phone_number:
+ type:
+ - string
+ - 'null'
+ description: Customer's phone number.
+ example: "+44 20 7946 0958"
+ readOnly: true
+ created_at:
+ type: string
+ description: When the customer was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the customer was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: customers
+ const: customers
+ readOnly: true
+ additionalProperties: false
+ title: Customer
+ CustomerDetailed:
+ type: object
+ description: A customer with company-specific details, subscriptions, and payments.
+ required:
+ - id
+ - display_name
+ - name
+ - email
+ - ip_address
+ - location
+ - company_name
+ - company_address
+ - phone_number
+ - created_at
+ - updated_at
+ - type
+ - subscriptions
+ - payments
+ - company_customer
+ properties:
+ id:
+ type: integer
+ description: Unique customer ID.
+ example: 24
+ readOnly: true
+ display_name:
+ type: string
+ description: Company name when present, otherwise the customer's name.
+ example: Acme Consulting
+ readOnly: true
+ name:
+ type: string
+ description: Customer's full name.
+ example: Jamie Taylor
+ readOnly: true
+ email:
+ type: string
+ description: Customer's email address.
+ example: jamie@example.com
+ format: email
+ readOnly: true
+ ip_address:
+ type:
+ - string
+ - 'null'
+ description: IP address captured when the customer was created.
+ example: 203.0.113.10
+ readOnly: true
+ location:
+ type:
+ - object
+ - 'null'
+ description: Geolocation data captured at checkout. Keys may vary by provider.
+ example:
+ city: London
+ country: United Kingdom
+ additionalProperties: true
+ readOnly: true
+ company_name:
+ type:
+ - string
+ - 'null'
+ description: Customer's organisation name.
+ example: Acme Consulting
+ readOnly: true
+ company_address:
+ type:
+ - string
+ - 'null'
+ description: Customer's organisation address.
+ example: 2 Example Road, London
+ readOnly: true
+ phone_number:
+ type:
+ - string
+ - 'null'
+ description: Customer's phone number.
+ example: "+44 20 7946 0958"
+ readOnly: true
+ created_at:
+ type: string
+ description: When the customer was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the customer was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: customers
+ const: customers
+ readOnly: true
+ subscriptions:
+ type: array
+ description: Subscriptions belonging to this company, newest data first
+ as stored by the serializer.
+ items:
+ "$ref": "#/components/schemas/CustomerEmbeddedSubscription"
+ readOnly: true
+ payments:
+ type: array
+ description: Payments belonging to this company.
+ items:
+ "$ref": "#/components/schemas/CustomerEmbeddedPayment"
+ readOnly: true
+ company_customer:
+ description: Company-specific customer details, or null when no company
+ context was supplied.
+ anyOf:
+ - "$ref": "#/components/schemas/CompanyCustomer"
+ - type: 'null'
+ readOnly: true
+ additionalProperties: false
+ title: CustomerDetailed
+ CustomerEmbeddedPayment:
+ type: object
+ description: Raw payment details embedded in a detailed customer response.
+ required:
+ - id
+ - reference
+ - amount_in_cents
+ - stripe_charge_id
+ - company_id
+ - created_at
+ - updated_at
+ - card_brand
+ - card_country
+ - card_last4
+ - secure_token
+ - application_fee_in_cents
+ - metadata
+ - subscription_id
+ - customer_id
+ - user_present
+ - products_purchased
+ - ip_address
+ - location
+ - status
+ - refunded_at
+ - refund_amount_in_cents
+ - currency
+ - stripe_card_token
+ - last_error
+ - object_type
+ - object_id
+ - usd_amount_in_cents
+ - stripe_payment_method
+ - purchased_qty
+ - provider
+ - custom_fields
+ - gocardless_payment_id
+ - failed_attempts
+ - vat_included
+ - vat_rate
+ - vat_amount_in_cents
+ - ex_vat_amount_in_cents
+ - country_code
+ - invoice_id
+ - coupon_code
+ - discount_percent
+ - temporary
+ - discount_amount_in_cents
+ - billing_engine_charge_attempt_id
+ - stripe_intent_id
+ - embed_origin
+ - gateway_fee_in_cents
+ - payment_request_method
+ - trial_signup
+ properties:
+ id:
+ type: integer
+ description: Unique payment ID.
+ example: 101
+ readOnly: true
+ reference:
+ type:
+ - string
+ - 'null'
+ description: Merchant-provided payment reference.
+ example: ORDER-1001
+ readOnly: true
+ amount_in_cents:
+ type: integer
+ description: Original payment amount in the currency's smallest unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ stripe_charge_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe charge ID, when processed by Stripe.
+ example: ch_example
+ readOnly: true
+ company_id:
+ type: integer
+ description: Company that received the payment.
+ example: 12
+ readOnly: true
+ created_at:
+ type: string
+ description: When the payment was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the payment was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ card_brand:
+ type:
+ - string
+ - 'null'
+ description: Payment card brand.
+ example: visa
+ readOnly: true
+ card_country:
+ type:
+ - string
+ - 'null'
+ description: Two-letter country code reported for the card.
+ example: GB
+ readOnly: true
+ card_last4:
+ type:
+ - string
+ - 'null'
+ description: Last four card digits.
+ example: '4242'
+ pattern: "^[0-9]{4}$"
+ readOnly: true
+ secure_token:
+ type:
+ - string
+ - 'null'
+ description: Opaque token used by customer-facing payment links.
+ example: example-payment-token
+ readOnly: true
+ application_fee_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: PayHere application fee in the smallest currency unit.
+ example: 60
+ readOnly: true
+ metadata:
+ type: object
+ description: Internal payment metadata whose keys vary by payment flow.
+ example: {}
+ additionalProperties: true
+ readOnly: true
+ subscription_id:
+ type:
+ - integer
+ - 'null'
+ description: Related subscription ID.
+ example: 77
+ readOnly: true
+ customer_id:
+ type:
+ - integer
+ - 'null'
+ description: Related customer ID.
+ example: 24
+ readOnly: true
+ user_present:
+ type: boolean
+ description: Whether a user session was present during checkout.
+ example: true
+ readOnly: true
+ products_purchased:
+ type: array
+ description: Identifiers of products purchased in the payment.
+ example:
+ - '42'
+ items:
+ type: string
+ readOnly: true
+ ip_address:
+ type:
+ - string
+ - 'null'
+ description: IP address captured at checkout.
+ example: 203.0.113.10
+ readOnly: true
+ location:
+ type: object
+ description: Geolocation data captured at checkout; keys vary by provider.
+ example:
+ city: London
+ additionalProperties: true
+ readOnly: true
+ status:
+ type: string
+ description: Payment processing status.
+ example: success
+ enum:
+ - pending
+ - success
+ - part_refund
+ - full_refund
+ - future
+ - failed
+ readOnly: true
+ refunded_at:
+ type:
+ - string
+ - 'null'
+ description: When the payment was first refunded.
+ example:
+ format: date-time
+ readOnly: true
+ refund_amount_in_cents:
+ type: integer
+ description: Total refunded amount in the smallest currency unit.
+ example: 0
+ minimum: 0
+ readOnly: true
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ stripe_card_token:
+ type:
+ - string
+ - 'null'
+ description: Legacy Stripe card token.
+ example:
+ readOnly: true
+ last_error:
+ type:
+ - string
+ - 'null'
+ description: Stored payment processor error.
+ example:
+ readOnly: true
+ object_type:
+ type:
+ - string
+ - 'null'
+ description: Type of the purchased resource.
+ example: Plan
+ readOnly: true
+ object_id:
+ type:
+ - integer
+ - 'null'
+ description: ID of the purchased resource.
+ example: 42
+ readOnly: true
+ usd_amount_in_cents:
+ type: integer
+ description: Payment value converted to US cents.
+ example: 3800
+ readOnly: true
+ stripe_payment_method:
+ type:
+ - string
+ - 'null'
+ description: Stripe payment method ID.
+ example: pm_example
+ readOnly: true
+ purchased_qty:
+ type: integer
+ description: Quantity purchased.
+ example: 1
+ minimum: 1
+ readOnly: true
+ provider:
+ type: string
+ description: Payment provider.
+ example: stripe
+ readOnly: true
+ custom_fields:
+ type: object
+ description: Merchant-defined checkout answers.
+ example:
+ company_size: 10-20
+ additionalProperties: true
+ readOnly: true
+ gocardless_payment_id:
+ type:
+ - string
+ - 'null'
+ description: GoCardless payment ID.
+ example:
+ readOnly: true
+ failed_attempts:
+ type: integer
+ description: Number of failed collection attempts.
+ example: 0
+ minimum: 0
+ readOnly: true
+ vat_included:
+ type:
+ - boolean
+ - 'null'
+ description: Whether the amount includes VAT.
+ example: true
+ readOnly: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: VAT percentage; historical values may be strings.
+ example: 20
+ readOnly: true
+ vat_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: VAT amount in the smallest currency unit.
+ example: 500
+ readOnly: true
+ ex_vat_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Amount before VAT in the smallest currency unit.
+ example: 2500
+ readOnly: true
+ country_code:
+ type:
+ - string
+ - 'null'
+ description: Two-letter checkout country code.
+ example: GB
+ readOnly: true
+ invoice_id:
+ type:
+ - integer
+ - 'null'
+ description: Related invoice ID.
+ example:
+ readOnly: true
+ coupon_code:
+ type:
+ - string
+ - 'null'
+ description: Applied coupon code.
+ example:
+ readOnly: true
+ discount_percent:
+ type:
+ - string
+ - number
+ description: Applied percentage discount; historical values may be strings.
+ example: 0
+ readOnly: true
+ temporary:
+ type: boolean
+ description: Whether this is an unfinished checkout payment.
+ example: false
+ readOnly: true
+ discount_amount_in_cents:
+ type: integer
+ description: Discount amount in the smallest currency unit.
+ example: 0
+ minimum: 0
+ readOnly: true
+ billing_engine_charge_attempt_id:
+ type:
+ - integer
+ - 'null'
+ description: Related PayHere billing attempt ID.
+ example:
+ readOnly: true
+ stripe_intent_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe PaymentIntent or SetupIntent ID.
+ example: pi_example
+ readOnly: true
+ embed_origin:
+ type:
+ - string
+ - 'null'
+ description: Origin of the embedding site, when supplied.
+ example: https://example.com
+ readOnly: true
+ gateway_fee_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Processor fee in the smallest currency unit.
+ example: 60
+ readOnly: true
+ payment_request_method:
+ type:
+ - string
+ - 'null'
+ description: Wallet or payment-request method used at checkout.
+ example:
+ readOnly: true
+ trial_signup:
+ type: boolean
+ description: Whether the payment represents a free-trial signup.
+ example: false
+ readOnly: true
+ additionalProperties: false
+ title: CustomerEmbeddedPayment
+ CustomerEmbeddedSubscription:
+ type: object
+ description: Raw subscription details embedded in a detailed customer response.
+ required:
+ - id
+ - customer_id
+ - company_id
+ - last_charged
+ - next_charge_at
+ - stripe_subscription_id
+ - stripe_plan_id
+ - billing_interval
+ - created_at
+ - updated_at
+ - status
+ - plan_id
+ - provider
+ - metadata
+ - billing_interval_count
+ - min_billing_cycles
+ - cancel_after
+ - trial_period_days
+ - custom_fields
+ - coupon_code
+ - discount_percent
+ - quantity
+ - discount_amount_in_cents
+ - billing_engine
+ - stripe_payment_method_id
+ - charge_retry_count
+ - unit_amount_in_cents
+ properties:
+ id:
+ type: integer
+ description: Unique subscription ID.
+ example: 77
+ readOnly: true
+ customer_id:
+ type:
+ - integer
+ - 'null'
+ description: Related customer ID.
+ example: 24
+ readOnly: true
+ company_id:
+ type:
+ - integer
+ - 'null'
+ description: Company that owns the subscription.
+ example: 12
+ readOnly: true
+ last_charged:
+ type:
+ - string
+ - 'null'
+ description: When the subscription was most recently charged.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ next_charge_at:
+ type:
+ - string
+ - 'null'
+ description: Scheduled time of the next charge.
+ example: '2026-02-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ stripe_subscription_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe subscription ID.
+ example: sub_example
+ readOnly: true
+ stripe_plan_id:
+ type:
+ - string
+ - 'null'
+ description: Legacy Stripe plan or price ID.
+ example: price_example
+ readOnly: true
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ readOnly: true
+ created_at:
+ type: string
+ description: When the subscription was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the subscription was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ status:
+ type: string
+ description: Subscription status.
+ example: active
+ enum:
+ - active
+ - past_due
+ - pending
+ - trialing
+ - cancelled
+ - canceled
+ - incomplete
+ - incomplete_expired
+ - unpaid
+ readOnly: true
+ plan_id:
+ type:
+ - integer
+ - 'null'
+ description: Related payment-link ID.
+ example: 42
+ readOnly: true
+ provider:
+ type: string
+ description: Subscription payment provider.
+ example: stripe
+ readOnly: true
+ metadata:
+ type: object
+ description: Provider and billing metadata whose keys vary by subscription.
+ example: {}
+ additionalProperties: true
+ readOnly: true
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ readOnly: true
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ readOnly: true
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which the subscription ends.
+ example:
+ minimum: 1
+ readOnly: true
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days.
+ example:
+ minimum: 1
+ readOnly: true
+ custom_fields:
+ type: object
+ description: Merchant-defined checkout answers.
+ example:
+ company_size: 10-20
+ additionalProperties: true
+ readOnly: true
+ coupon_code:
+ type:
+ - string
+ - 'null'
+ description: Applied coupon code.
+ example:
+ readOnly: true
+ discount_percent:
+ type:
+ - string
+ - number
+ description: Applied percentage discount; historical values may be strings.
+ example: 0
+ readOnly: true
+ quantity:
+ type: integer
+ description: Quantity billed each cycle.
+ example: 1
+ minimum: 1
+ readOnly: true
+ discount_amount_in_cents:
+ type: integer
+ description: Discount per cycle in the smallest currency unit.
+ example: 0
+ minimum: 0
+ readOnly: true
+ billing_engine:
+ type: string
+ description: System responsible for scheduling charges.
+ example: stripe
+ enum:
+ - stripe
+ - payhere
+ readOnly: true
+ stripe_payment_method_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe payment method used for PayHere billing.
+ example:
+ readOnly: true
+ charge_retry_count:
+ type: integer
+ description: Number of charge retries attempted.
+ example: 0
+ minimum: 0
+ readOnly: true
+ unit_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Per-unit recurring amount in the smallest currency unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ additionalProperties: false
+ title: CustomerEmbeddedSubscription
+ CustomerListResponse:
+ type: object
+ description: Paginated customer response. Items include related records when
+ detailed=true.
+ required:
+ - data
+ - meta
+ properties:
+ data:
+ type: array
+ description: Customers in the requested page.
+ items:
+ oneOf:
+ - "$ref": "#/components/schemas/Customer"
+ - "$ref": "#/components/schemas/CustomerDetailed"
+ readOnly: true
+ meta:
+ "$ref": "#/components/schemas/Pagination"
+ description: Pagination details.
+ readOnly: true
+ examples:
+ - data:
+ - id: 24
+ display_name: Acme Consulting
+ name: Jamie Taylor
+ email: jamie@example.com
+ ip_address: 203.0.113.10
+ location:
+ city: London
+ country: United Kingdom
+ company_name: Acme Consulting
+ company_address: 2 Example Road, London
+ phone_number: "+44 20 7946 0958"
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: customers
+ meta:
+ current_page: 1
+ next_page: 2
+ prev_page:
+ total_pages: 3
+ total_count: 42
+ - data:
+ - id: 24
+ display_name: Acme Consulting
+ name: Jamie Taylor
+ email: jamie@example.com
+ ip_address: 203.0.113.10
+ location:
+ city: London
+ country: United Kingdom
+ company_name: Acme Consulting
+ company_address: 2 Example Road, London
+ phone_number: "+44 20 7946 0958"
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: customers
+ subscriptions: []
+ payments: []
+ company_customer:
+ id: 31
+ card_brand: visa
+ card_last4: '4242'
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: company_customers
+ meta:
+ current_page: 1
+ next_page: 2
+ prev_page:
+ total_pages: 3
+ total_count: 42
+ additionalProperties: false
+ title: CustomerListResponse
+ CustomerResponse:
+ type: object
+ description: Detailed customer response envelope.
+ required:
+ - data
+ properties:
+ data:
+ "$ref": "#/components/schemas/CustomerDetailed"
+ description: The requested customer.
+ readOnly: true
+ examples:
+ - data:
+ id: 24
+ display_name: Acme Consulting
+ name: Jamie Taylor
+ email: jamie@example.com
+ ip_address: 203.0.113.10
+ location:
+ city: London
+ country: United Kingdom
+ company_name: Acme Consulting
+ company_address: 2 Example Road, London
+ phone_number: "+44 20 7946 0958"
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: customers
+ subscriptions: []
+ payments: []
+ company_customer:
+ id: 31
+ card_brand: visa
+ card_last4: '4242'
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: company_customers
+ additionalProperties: false
+ title: CustomerResponse
+ Error:
+ type: object
+ description: An API error response.
+ required:
+ - error
+ properties:
+ error:
+ type: string
+ description: Human-readable explanation of the error.
+ example: The request could not be completed.
+ readOnly: true
+ additionalProperties: false
+ title: Error
+ MalformedRequestError:
+ type: object
+ description: Returned when Rails cannot parse the request.
+ required:
+ - error
+ - status
+ properties:
+ error:
+ type: string
+ description: Human-readable explanation of the error.
+ example: The request could not be completed.
+ readOnly: true
+ status:
+ type: integer
+ const: 400
+ description: HTTP status code.
+ example: 400
+ readOnly: true
+ additionalProperties: false
+ examples:
+ - status: 400
+ error: Bad Request
+ title: MalformedRequestError
+ NotFoundError:
+ type: object
+ description: Returned when a company-scoped resource cannot be found.
+ required:
+ - error
+ - status
+ properties:
+ error:
+ type: string
+ description: Human-readable explanation of the error.
+ example: The request could not be completed.
+ readOnly: true
+ status:
+ type: integer
+ const: 404
+ description: HTTP status code.
+ example: 404
+ readOnly: true
+ additionalProperties: false
+ examples:
+ - status: 404
+ error: Not Found
+ title: NotFoundError
+ Pagination:
+ type: object
+ description: Pagination metadata for a collection response.
+ required:
+ - current_page
+ - next_page
+ - prev_page
+ - total_pages
+ - total_count
+ properties:
+ current_page:
+ type: integer
+ minimum: 1
+ description: Page represented by this response.
+ example: 1
+ readOnly: true
+ next_page:
+ type:
+ - integer
+ - 'null'
+ description: Next page number, or null on the last page.
+ example: 2
+ readOnly: true
+ prev_page:
+ type:
+ - integer
+ - 'null'
+ description: Previous page number, or null on the first page.
+ example:
+ readOnly: true
+ total_pages:
+ type: integer
+ minimum: 0
+ description: Total number of pages available.
+ example: 3
+ readOnly: true
+ total_count:
+ type: integer
+ minimum: 0
+ description: Total number of matching records.
+ example: 42
+ readOnly: true
+ additionalProperties: false
+ title: Pagination
+ Payment:
+ type: object
+ description: A payment received by the company.
+ required:
+ - id
+ - hashid
+ - reference
+ - formatted_amount
+ - amount
+ - currency
+ - refund_amount
+ - amount_paid
+ - amount_without_fees
+ - vat_included
+ - vat_rate
+ - vat_amount
+ - ex_vat_amount
+ - purchased_qty
+ - company_id
+ - card_brand
+ - card_last4
+ - secure_token
+ - status
+ - success
+ - stripe_charge_id
+ - gateway_url
+ - gocardless_payment_id
+ - object_name
+ - failed_attempts
+ - usd_amount_in_cents
+ - custom_fields
+ - provider
+ - application_fee
+ - gateway_fee
+ - last_error_message
+ - coupon_code
+ - discount_percent
+ - created_at
+ - updated_at
+ - type
+ properties:
+ id:
+ type: integer
+ description: Unique payment ID.
+ example: 101
+ readOnly: true
+ hashid:
+ type: string
+ description: Public opaque payment identifier.
+ example: pay_7Yx2K9
+ readOnly: true
+ reference:
+ type:
+ - string
+ - 'null'
+ description: Merchant-provided payment reference.
+ example: ORDER-1001
+ readOnly: true
+ formatted_amount:
+ type: string
+ description: Localized display amount.
+ example: "£30.00"
+ readOnly: true
+ amount:
+ type: number
+ description: Original amount in major currency units.
+ example: 30.0
+ minimum: 0
+ readOnly: true
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ refund_amount:
+ type: number
+ description: Total amount refunded in major currency units.
+ example: 0.0
+ minimum: 0
+ readOnly: true
+ amount_paid:
+ type: number
+ description: Amount remaining after refunds.
+ example: 30.0
+ readOnly: true
+ amount_without_fees:
+ type: number
+ description: Amount after processor and application fees.
+ example: 28.8
+ readOnly: true
+ vat_included:
+ type:
+ - boolean
+ - 'null'
+ description: Whether the amount includes VAT.
+ example: true
+ readOnly: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: VAT percentage; historical values may be strings.
+ example: 20
+ readOnly: true
+ vat_amount:
+ type: number
+ description: VAT amount in major currency units.
+ example: 5.0
+ readOnly: true
+ ex_vat_amount:
+ type: number
+ description: Amount before VAT in major currency units.
+ example: 25.0
+ readOnly: true
+ purchased_qty:
+ type: integer
+ description: Quantity purchased.
+ example: 1
+ minimum: 1
+ readOnly: true
+ company_id:
+ type: integer
+ description: Company that received the payment.
+ example: 12
+ readOnly: true
+ card_brand:
+ type:
+ - string
+ - 'null'
+ description: Payment card brand.
+ example: visa
+ readOnly: true
+ card_last4:
+ type:
+ - string
+ - 'null'
+ description: Last four card digits.
+ example: '4242'
+ pattern: "^[0-9]{4}$"
+ readOnly: true
+ secure_token:
+ type: string
+ description: Opaque token for customer-facing payment access.
+ example: example-payment-token
+ readOnly: true
+ status:
+ type: string
+ description: Payment processing status.
+ example: success
+ enum:
+ - pending
+ - success
+ - part_refund
+ - full_refund
+ - future
+ - failed
+ readOnly: true
+ success:
+ type: boolean
+ description: Whether the payment is successful or partially refunded.
+ example: true
+ readOnly: true
+ stripe_charge_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe charge ID.
+ example: ch_example
+ readOnly: true
+ gateway_url:
+ type:
+ - string
+ - 'null'
+ description: Provider-hosted payment URL, when applicable.
+ example:
+ readOnly: true
+ gocardless_payment_id:
+ type:
+ - string
+ - 'null'
+ description: GoCardless payment ID.
+ example:
+ readOnly: true
+ object_name:
+ type:
+ - string
+ - 'null'
+ description: Display name of the purchased resource.
+ example: Consulting session
+ readOnly: true
+ failed_attempts:
+ type: integer
+ description: Number of failed collection attempts.
+ example: 0
+ minimum: 0
+ readOnly: true
+ usd_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Payment value converted to US cents.
+ example: 3800
+ readOnly: true
+ custom_fields:
+ type: object
+ description: Merchant-defined checkout answers.
+ example:
+ company_size: 10-20
+ additionalProperties: true
+ readOnly: true
+ provider:
+ type: string
+ description: Payment provider.
+ example: stripe
+ readOnly: true
+ application_fee:
+ type:
+ - number
+ - 'null'
+ description: PayHere application fee in major currency units.
+ example: 0.6
+ readOnly: true
+ gateway_fee:
+ type:
+ - number
+ - 'null'
+ description: Processor fee in major currency units.
+ example: 0.6
+ readOnly: true
+ last_error_message:
+ type:
+ - string
+ - 'null'
+ description: Most recent processor error message.
+ example:
+ readOnly: true
+ coupon_code:
+ type:
+ - string
+ - 'null'
+ description: Applied coupon code.
+ example:
+ readOnly: true
+ discount_percent:
+ type:
+ - string
+ - number
+ - 'null'
+ description: Applied percentage discount; historical values may be strings.
+ example:
+ readOnly: true
+ created_at:
+ type: string
+ description: When the payment was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the payment was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: payments
+ const: payments
+ readOnly: true
+ additionalProperties: false
+ title: Payment
+ PaymentDetailed:
+ type: object
+ description: A payment with its customer, purchased item, and subscription when
+ present.
+ required:
+ - id
+ - hashid
+ - reference
+ - formatted_amount
+ - amount
+ - currency
+ - refund_amount
+ - amount_paid
+ - amount_without_fees
+ - vat_included
+ - vat_rate
+ - vat_amount
+ - ex_vat_amount
+ - purchased_qty
+ - company_id
+ - card_brand
+ - card_last4
+ - secure_token
+ - status
+ - success
+ - stripe_charge_id
+ - gateway_url
+ - gocardless_payment_id
+ - object_name
+ - failed_attempts
+ - usd_amount_in_cents
+ - custom_fields
+ - provider
+ - application_fee
+ - gateway_fee
+ - last_error_message
+ - coupon_code
+ - discount_percent
+ - created_at
+ - updated_at
+ - type
+ - customer
+ - item
+ properties:
+ id:
+ type: integer
+ description: Unique payment ID.
+ example: 101
+ readOnly: true
+ hashid:
+ type: string
+ description: Public opaque payment identifier.
+ example: pay_7Yx2K9
+ readOnly: true
+ reference:
+ type:
+ - string
+ - 'null'
+ description: Merchant-provided payment reference.
+ example: ORDER-1001
+ readOnly: true
+ formatted_amount:
+ type: string
+ description: Localized display amount.
+ example: "£30.00"
+ readOnly: true
+ amount:
+ type: number
+ description: Original amount in major currency units.
+ example: 30.0
+ minimum: 0
+ readOnly: true
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ refund_amount:
+ type: number
+ description: Total amount refunded in major currency units.
+ example: 0.0
+ minimum: 0
+ readOnly: true
+ amount_paid:
+ type: number
+ description: Amount remaining after refunds.
+ example: 30.0
+ readOnly: true
+ amount_without_fees:
+ type: number
+ description: Amount after processor and application fees.
+ example: 28.8
+ readOnly: true
+ vat_included:
+ type:
+ - boolean
+ - 'null'
+ description: Whether the amount includes VAT.
+ example: true
+ readOnly: true
+ vat_rate:
+ type:
+ - string
+ - number
+ - 'null'
+ description: VAT percentage; historical values may be strings.
+ example: 20
+ readOnly: true
+ vat_amount:
+ type: number
+ description: VAT amount in major currency units.
+ example: 5.0
+ readOnly: true
+ ex_vat_amount:
+ type: number
+ description: Amount before VAT in major currency units.
+ example: 25.0
+ readOnly: true
+ purchased_qty:
+ type: integer
+ description: Quantity purchased.
+ example: 1
+ minimum: 1
+ readOnly: true
+ company_id:
+ type: integer
+ description: Company that received the payment.
+ example: 12
+ readOnly: true
+ card_brand:
+ type:
+ - string
+ - 'null'
+ description: Payment card brand.
+ example: visa
+ readOnly: true
+ card_last4:
+ type:
+ - string
+ - 'null'
+ description: Last four card digits.
+ example: '4242'
+ pattern: "^[0-9]{4}$"
+ readOnly: true
+ secure_token:
+ type: string
+ description: Opaque token for customer-facing payment access.
+ example: example-payment-token
+ readOnly: true
+ status:
+ type: string
+ description: Payment processing status.
+ example: success
+ enum:
+ - pending
+ - success
+ - part_refund
+ - full_refund
+ - future
+ - failed
+ readOnly: true
+ success:
+ type: boolean
+ description: Whether the payment is successful or partially refunded.
+ example: true
+ readOnly: true
+ stripe_charge_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe charge ID.
+ example: ch_example
+ readOnly: true
+ gateway_url:
+ type:
+ - string
+ - 'null'
+ description: Provider-hosted payment URL, when applicable.
+ example:
+ readOnly: true
+ gocardless_payment_id:
+ type:
+ - string
+ - 'null'
+ description: GoCardless payment ID.
+ example:
+ readOnly: true
+ object_name:
+ type:
+ - string
+ - 'null'
+ description: Display name of the purchased resource.
+ example: Consulting session
+ readOnly: true
+ failed_attempts:
+ type: integer
+ description: Number of failed collection attempts.
+ example: 0
+ minimum: 0
+ readOnly: true
+ usd_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Payment value converted to US cents.
+ example: 3800
+ readOnly: true
+ custom_fields:
+ type: object
+ description: Merchant-defined checkout answers.
+ example:
+ company_size: 10-20
+ additionalProperties: true
+ readOnly: true
+ provider:
+ type: string
+ description: Payment provider.
+ example: stripe
+ readOnly: true
+ application_fee:
+ type:
+ - number
+ - 'null'
+ description: PayHere application fee in major currency units.
+ example: 0.6
+ readOnly: true
+ gateway_fee:
+ type:
+ - number
+ - 'null'
+ description: Processor fee in major currency units.
+ example: 0.6
+ readOnly: true
+ last_error_message:
+ type:
+ - string
+ - 'null'
+ description: Most recent processor error message.
+ example:
+ readOnly: true
+ coupon_code:
+ type:
+ - string
+ - 'null'
+ description: Applied coupon code.
+ example:
+ readOnly: true
+ discount_percent:
+ type:
+ - string
+ - number
+ - 'null'
+ description: Applied percentage discount; historical values may be strings.
+ example:
+ readOnly: true
+ created_at:
+ type: string
+ description: When the payment was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the payment was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: payments
+ const: payments
+ readOnly: true
+ customer:
+ description: Customer who made the payment, or null when unavailable.
+ anyOf:
+ - "$ref": "#/components/schemas/CustomerDetailed"
+ - type: 'null'
+ readOnly: true
+ item:
+ type:
+ - object
+ - 'null'
+ description: Purchased resource. Its shape varies by resource type.
+ example:
+ id: 42
+ type: plans
+ name: Consulting session
+ additionalProperties: true
+ readOnly: true
+ subscription:
+ description: Related subscription, or null/omitted for one-off payments.
+ anyOf:
+ - "$ref": "#/components/schemas/Subscription"
+ - type: 'null'
+ readOnly: true
+ additionalProperties: false
+ title: PaymentDetailed
+ PaymentListResponse:
+ type: object
+ description: Paginated detailed payment response.
+ required:
+ - data
+ - meta
+ properties:
+ data:
+ type: array
+ description: Payments in the requested page.
+ items:
+ "$ref": "#/components/schemas/PaymentDetailed"
+ readOnly: true
+ meta:
+ "$ref": "#/components/schemas/Pagination"
+ description: Pagination details.
+ readOnly: true
+ examples:
+ - data:
+ - id: 101
+ hashid: pay_7Yx2K9
+ reference: ORDER-1001
+ formatted_amount: "£30.00"
+ amount: 30.0
+ currency: gbp
+ refund_amount: 0.0
+ amount_paid: 30.0
+ amount_without_fees: 28.8
+ vat_included: true
+ vat_rate: 20
+ vat_amount: 5.0
+ ex_vat_amount: 25.0
+ purchased_qty: 1
+ company_id: 12
+ card_brand: visa
+ card_last4: '4242'
+ secure_token: example-payment-token
+ status: success
+ success: true
+ stripe_charge_id: ch_example
+ gateway_url:
+ gocardless_payment_id:
+ object_name: Consulting session
+ failed_attempts: 0
+ usd_amount_in_cents: 3800
+ custom_fields:
+ company_size: 10-20
+ provider: stripe
+ application_fee: 0.6
+ gateway_fee: 0.6
+ last_error_message:
+ coupon_code:
+ discount_percent:
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: payments
+ customer:
+ id: 24
+ display_name: Acme Consulting
+ name: Jamie Taylor
+ email: jamie@example.com
+ ip_address: 203.0.113.10
+ location:
+ city: London
+ country: United Kingdom
+ company_name: Acme Consulting
+ company_address: 2 Example Road, London
+ phone_number: "+44 20 7946 0958"
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: customers
+ subscriptions: []
+ payments: []
+ company_customer:
+ id: 31
+ card_brand: visa
+ card_last4: '4242'
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: company_customers
+ item:
+ id: 42
+ type: plans
+ name: Consulting session
+ subscription:
+ meta:
+ current_page: 1
+ next_page: 2
+ prev_page:
+ total_pages: 3
+ total_count: 42
+ additionalProperties: false
+ title: PaymentListResponse
+ PaymentResponse:
+ type: object
+ description: Detailed payment response envelope.
+ required:
+ - data
+ properties:
+ data:
+ "$ref": "#/components/schemas/PaymentDetailed"
+ description: The requested payment.
+ readOnly: true
+ examples:
+ - data:
+ id: 101
+ hashid: pay_7Yx2K9
+ reference: ORDER-1001
+ formatted_amount: "£30.00"
+ amount: 30.0
+ currency: gbp
+ refund_amount: 0.0
+ amount_paid: 30.0
+ amount_without_fees: 28.8
+ vat_included: true
+ vat_rate: 20
+ vat_amount: 5.0
+ ex_vat_amount: 25.0
+ purchased_qty: 1
+ company_id: 12
+ card_brand: visa
+ card_last4: '4242'
+ secure_token: example-payment-token
+ status: success
+ success: true
+ stripe_charge_id: ch_example
+ gateway_url:
+ gocardless_payment_id:
+ object_name: Consulting session
+ failed_attempts: 0
+ usd_amount_in_cents: 3800
+ custom_fields:
+ company_size: 10-20
+ provider: stripe
+ application_fee: 0.6
+ gateway_fee: 0.6
+ last_error_message:
+ coupon_code:
+ discount_percent:
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: payments
+ customer:
+ id: 24
+ display_name: Acme Consulting
+ name: Jamie Taylor
+ email: jamie@example.com
+ ip_address: 203.0.113.10
+ location:
+ city: London
+ country: United Kingdom
+ company_name: Acme Consulting
+ company_address: 2 Example Road, London
+ phone_number: "+44 20 7946 0958"
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: customers
+ subscriptions: []
+ payments: []
+ company_customer:
+ id: 31
+ card_brand: visa
+ card_last4: '4242'
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: company_customers
+ item:
+ id: 42
+ type: plans
+ name: Consulting session
+ subscription:
+ additionalProperties: false
+ title: PaymentResponse
+ Plan:
+ type: object
+ description: A reusable PayHere payment link.
+ required:
+ - id
+ - payment_type
+ - name
+ - description
+ - price
+ - price_in_cents
+ - currency
+ - slug
+ - billing_interval
+ - billing_interval_count
+ - hidden
+ - min_billing_cycles
+ - billing_day
+ - limited_qty
+ - qty
+ - cancel_after
+ - success_url
+ - trial_period_days
+ - show_qty
+ - custom_fields
+ - user_selects_amount
+ - pay_button_text
+ - setup_fee
+ - has_setup_fee
+ - allow_coupons
+ - plan_url
+ - donation_mode
+ - show_preset_amounts
+ - donation_preset_amounts_in_cents
+ - digital_download
+ - download_type
+ - download_url
+ - download_file_url
+ - download_file_name
+ - created_at
+ - updated_at
+ - type
+ properties:
+ id:
+ type: integer
+ description: Unique payment-link ID.
+ example: 42
+ readOnly: true
+ payment_type:
+ type: string
+ description: Default payment schedule.
+ example: recurring
+ enum:
+ - recurring
+ - one_off
+ readOnly: true
+ name:
+ type: string
+ description: Customer-facing payment-link name.
+ example: Consulting membership
+ readOnly: true
+ description:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing description.
+ example: Monthly access to consulting sessions.
+ readOnly: true
+ price:
+ type: number
+ description: Price in major currency units; zero for pay-what-you-want links
+ without a fixed price.
+ example: 30.0
+ minimum: 0
+ readOnly: true
+ price_in_cents:
+ type: integer
+ description: Price in the currency's smallest unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ slug:
+ type: string
+ description: URL-safe payment-link identifier.
+ example: consulting-membership
+ readOnly: true
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Recurring billing interval; null for one-off links.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ readOnly: true
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing intervals between charges.
+ example: 1
+ minimum: 1
+ readOnly: true
+ hidden:
+ type: boolean
+ description: Whether the link is hidden from storefronts.
+ example: false
+ readOnly: true
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful billing cycles before cancellation is allowed.
+ example:
+ minimum: 1
+ readOnly: true
+ billing_day:
+ type:
+ - integer
+ - 'null'
+ description: 'Recurring billing anchor: 1-7 for weeks, 1-28 for months and
+ derived month intervals, or 1-366 for years.'
+ example:
+ minimum: 1
+ maximum: 366
+ readOnly: true
+ limited_qty:
+ type: boolean
+ description: Whether stock is limited.
+ example: false
+ readOnly: true
+ qty:
+ type: integer
+ description: Remaining quantity when stock is limited.
+ example: 0
+ minimum: 0
+ readOnly: true
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which a payment plan ends.
+ example:
+ minimum: 1
+ readOnly: true
+ success_url:
+ type:
+ - string
+ - 'null'
+ description: URL customers are sent to after successful checkout.
+ example: https://example.com/thanks
+ format: uri
+ readOnly: true
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days.
+ example:
+ minimum: 1
+ readOnly: true
+ show_qty:
+ type: boolean
+ description: Whether customers can select a quantity.
+ example: false
+ readOnly: true
+ custom_fields:
+ type: array
+ description: Additional fields collected during checkout.
+ example: []
+ items:
+ "$ref": "#/components/schemas/CustomField"
+ readOnly: true
+ user_selects_amount:
+ type: boolean
+ description: Whether the customer chooses the payment amount.
+ example: false
+ readOnly: true
+ pay_button_text:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout button label.
+ example: Subscribe
+ readOnly: true
+ setup_fee:
+ type: number
+ description: One-time setup fee in major currency units.
+ example: 0.0
+ minimum: 0
+ readOnly: true
+ has_setup_fee:
+ type: boolean
+ description: Whether a positive setup fee is configured.
+ example: false
+ readOnly: true
+ allow_coupons:
+ type: boolean
+ description: Whether checkout accepts coupon codes.
+ example: true
+ readOnly: true
+ donation_mode:
+ type:
+ - string
+ - 'null'
+ description: Schedules offered by a pay-what-you-want link.
+ example:
+ enum:
+ - recurring
+ - one_off
+ - both
+ -
+ readOnly: true
+ show_preset_amounts:
+ type: boolean
+ description: Whether donation amount presets are shown.
+ example: false
+ readOnly: true
+ donation_preset_amounts_in_cents:
+ type:
+ - array
+ - 'null'
+ description: Three increasing donation presets in the currency's smallest
+ unit.
+ example:
+ items:
+ type: integer
+ minimum: 100
+ minItems: 3
+ maxItems: 3
+ readOnly: true
+ plan_url:
+ type: string
+ description: Public checkout URL.
+ example: https://payhere.co/example-studio/consulting-membership
+ format: uri
+ readOnly: true
+ digital_download:
+ type: boolean
+ description: Whether successful customers receive a digital download.
+ example: false
+ readOnly: true
+ download_type:
+ type:
+ - string
+ - 'null'
+ description: How the digital download is delivered.
+ example: upload
+ enum:
+ - upload
+ - url
+ -
+ readOnly: true
+ download_url:
+ type:
+ - string
+ - 'null'
+ description: External download URL for url-based downloads.
+ example:
+ format: uri
+ readOnly: true
+ download_file_url:
+ type:
+ - string
+ - 'null'
+ description: Relative URL for an uploaded download file.
+ example:
+ readOnly: true
+ download_file_name:
+ type:
+ - string
+ - 'null'
+ description: Original name of the uploaded download file.
+ example:
+ readOnly: true
+ created_at:
+ type: string
+ description: When the payment link was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the payment link was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: plans
+ const: plans
+ readOnly: true
+ additionalProperties: false
+ title: Plan
+ PlanCreateMultipartRequest:
+ type: object
+ description: Payment-link attributes submitted as multipart form data, including
+ an uploaded digital download.
+ required:
+ - name
+ properties:
+ payment_type:
+ type: string
+ description: Default payment schedule.
+ example: recurring
+ enum:
+ - recurring
+ - one_off
+ default: recurring
+ name:
+ type: string
+ description: Customer-facing name.
+ example: Consulting membership
+ minLength: 1
+ description:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing description.
+ example: Monthly access to consulting sessions.
+ receipt_text:
+ type:
+ - string
+ - 'null'
+ description: Custom text included on receipts.
+ example: Thank you for your payment.
+ price:
+ type:
+ - number
+ - 'null'
+ description: Price in major currency units. Required unless user_selects_amount
+ is true.
+ example: 30
+ minimum: 1
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ default: gbp
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Recurring billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ default: month
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ default: 1
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which the plan ends.
+ example:
+ minimum: 1
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days; used only when recurring payments
+ are offered.
+ example:
+ minimum: 1
+ hidden:
+ type: boolean
+ description: Hide the link from storefronts.
+ example: false
+ default: false
+ limited_qty:
+ type: boolean
+ description: Enable stock limits.
+ example: false
+ default: false
+ qty:
+ type:
+ - integer
+ - 'null'
+ description: Available quantity when limited_qty is true.
+ example: 25
+ minimum: 0
+ show_qty:
+ type: boolean
+ description: Allow customers to choose a quantity.
+ example: false
+ default: false
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ billing_day:
+ type:
+ - integer
+ - 'null'
+ description: 'Recurring billing anchor: use 1-7 for weeks, 1-28 for months
+ and derived month intervals, or 1-366 for years.'
+ example:
+ minimum: 1
+ maximum: 366
+ success_url:
+ type:
+ - string
+ - 'null'
+ description: URL used after successful checkout.
+ example: https://example.com/thanks
+ format: uri
+ user_selects_amount:
+ type: boolean
+ description: Allow the customer to choose the amount.
+ example: false
+ default: false
+ webhook_url:
+ type:
+ - string
+ - 'null'
+ description: URL notified for payment-link events.
+ example: https://example.com/payhere-webhook
+ format: uri
+ pay_button_text:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout button label.
+ example: Subscribe
+ setup_fee:
+ type:
+ - number
+ - 'null'
+ description: One-time setup fee in major currency units.
+ example: 10
+ minimum: 0
+ allow_coupons:
+ type: boolean
+ description: Allow coupon codes at checkout.
+ example: true
+ default: false
+ digital_download:
+ type: boolean
+ description: Deliver digital content after successful payment.
+ example: false
+ default: false
+ download_type:
+ type:
+ - string
+ - 'null'
+ description: Use upload for an attached file or url for an external link.
+ example: url
+ enum:
+ - upload
+ - url
+ -
+ default: upload
+ download_url:
+ type:
+ - string
+ - 'null'
+ description: Required when digital_download is true and download_type is
+ url.
+ example: https://example.com/download.zip
+ format: uri
+ custom_fields:
+ description: Additional checkout fields. Multipart clients may submit the
+ array as JSON text.
+ anyOf:
+ - type: array
+ items:
+ "$ref": "#/components/schemas/CustomField"
+ - type: string
+ contentMediaType: application/json
+ example:
+ - label: Company name
+ type: text
+ required: true
+ hidden: false
+ donation_mode:
+ type:
+ - string
+ - 'null'
+ description: Payment schedules offered when user_selects_amount is true.
+ example: both
+ enum:
+ - recurring
+ - one_off
+ - both
+ -
+ show_preset_amounts:
+ type: boolean
+ description: Show three suggested donation amounts.
+ example: true
+ default: false
+ donation_preset_amounts_in_cents:
+ type: array
+ description: Three unique, increasing suggested amounts in the currency's
+ smallest unit.
+ example:
+ - 2000
+ - 5000
+ - 10000
+ items:
+ type: integer
+ minimum: 100
+ minItems: 3
+ maxItems: 3
+ uniqueItems: true
+ download_file:
+ type: string
+ format: binary
+ description: File delivered after payment when digital_download is true
+ and download_type is upload.
+ anyOf:
+ - required:
+ - price
+ properties:
+ price:
+ type: number
+ - required:
+ - user_selects_amount
+ properties:
+ user_selects_amount:
+ const: true
+ examples:
+ - payment_type: recurring
+ name: Consulting membership
+ price: 30
+ currency: gbp
+ billing_interval: month
+ - payment_type: one_off
+ name: Community appeal
+ currency: gbp
+ user_selects_amount: true
+ donation_mode: both
+ - payment_type: one_off
+ name: Example ebook
+ price: 15
+ currency: gbp
+ digital_download: true
+ download_type: upload
+ download_file: ""
+ additionalProperties: false
+ title: PlanCreateMultipartRequest
+ PlanCreateRequest:
+ type: object
+ description: Attributes for a new payment link. Price is optional only when
+ the customer selects the amount.
+ required:
+ - name
+ properties:
+ payment_type:
+ type: string
+ description: Default payment schedule.
+ example: recurring
+ enum:
+ - recurring
+ - one_off
+ default: recurring
+ name:
+ type: string
+ description: Customer-facing name.
+ example: Consulting membership
+ minLength: 1
+ description:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing description.
+ example: Monthly access to consulting sessions.
+ receipt_text:
+ type:
+ - string
+ - 'null'
+ description: Custom text included on receipts.
+ example: Thank you for your payment.
+ price:
+ type:
+ - number
+ - 'null'
+ description: Price in major currency units. Required unless user_selects_amount
+ is true.
+ example: 30
+ minimum: 1
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ default: gbp
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Recurring billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ default: month
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ default: 1
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which the plan ends.
+ example:
+ minimum: 1
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days; used only when recurring payments
+ are offered.
+ example:
+ minimum: 1
+ hidden:
+ type: boolean
+ description: Hide the link from storefronts.
+ example: false
+ default: false
+ limited_qty:
+ type: boolean
+ description: Enable stock limits.
+ example: false
+ default: false
+ qty:
+ type:
+ - integer
+ - 'null'
+ description: Available quantity when limited_qty is true.
+ example: 25
+ minimum: 0
+ show_qty:
+ type: boolean
+ description: Allow customers to choose a quantity.
+ example: false
+ default: false
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ billing_day:
+ type:
+ - integer
+ - 'null'
+ description: 'Recurring billing anchor: use 1-7 for weeks, 1-28 for months
+ and derived month intervals, or 1-366 for years.'
+ example:
+ minimum: 1
+ maximum: 366
+ success_url:
+ type:
+ - string
+ - 'null'
+ description: URL used after successful checkout.
+ example: https://example.com/thanks
+ format: uri
+ user_selects_amount:
+ type: boolean
+ description: Allow the customer to choose the amount.
+ example: false
+ default: false
+ webhook_url:
+ type:
+ - string
+ - 'null'
+ description: URL notified for payment-link events.
+ example: https://example.com/payhere-webhook
+ format: uri
+ pay_button_text:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout button label.
+ example: Subscribe
+ setup_fee:
+ type:
+ - number
+ - 'null'
+ description: One-time setup fee in major currency units.
+ example: 10
+ minimum: 0
+ allow_coupons:
+ type: boolean
+ description: Allow coupon codes at checkout.
+ example: true
+ default: false
+ digital_download:
+ type: boolean
+ description: Deliver digital content after successful payment.
+ example: false
+ default: false
+ download_type:
+ type:
+ - string
+ - 'null'
+ description: Use upload for an attached file or url for an external link.
+ example: url
+ enum:
+ - upload
+ - url
+ -
+ default: upload
+ download_url:
+ type:
+ - string
+ - 'null'
+ description: Required when digital_download is true and download_type is
+ url.
+ example: https://example.com/download.zip
+ format: uri
+ custom_fields:
+ description: Additional checkout fields. Multipart clients may submit the
+ array as JSON text.
+ anyOf:
+ - type: array
+ items:
+ "$ref": "#/components/schemas/CustomField"
+ - type: string
+ contentMediaType: application/json
+ example:
+ - label: Company name
+ type: text
+ required: true
+ hidden: false
+ donation_mode:
+ type:
+ - string
+ - 'null'
+ description: Payment schedules offered when user_selects_amount is true.
+ example: both
+ enum:
+ - recurring
+ - one_off
+ - both
+ -
+ show_preset_amounts:
+ type: boolean
+ description: Show three suggested donation amounts.
+ example: true
+ default: false
+ donation_preset_amounts_in_cents:
+ type: array
+ description: Three unique, increasing suggested amounts in the currency's
+ smallest unit.
+ example:
+ - 2000
+ - 5000
+ - 10000
+ items:
+ type: integer
+ minimum: 100
+ minItems: 3
+ maxItems: 3
+ uniqueItems: true
+ anyOf:
+ - required:
+ - price
+ properties:
+ price:
+ type: number
+ - required:
+ - user_selects_amount
+ properties:
+ user_selects_amount:
+ const: true
+ examples:
+ - payment_type: recurring
+ name: Consulting membership
+ price: 30
+ currency: gbp
+ billing_interval: month
+ - payment_type: one_off
+ name: Community appeal
+ currency: gbp
+ user_selects_amount: true
+ donation_mode: both
+ additionalProperties: false
+ title: PlanCreateRequest
+ PlanDetailed:
+ type: object
+ description: A payment link with merchant-only configuration and company details.
+ required:
+ - id
+ - payment_type
+ - name
+ - description
+ - price
+ - price_in_cents
+ - currency
+ - slug
+ - billing_interval
+ - billing_interval_count
+ - hidden
+ - min_billing_cycles
+ - billing_day
+ - limited_qty
+ - qty
+ - cancel_after
+ - success_url
+ - trial_period_days
+ - show_qty
+ - custom_fields
+ - user_selects_amount
+ - pay_button_text
+ - setup_fee
+ - has_setup_fee
+ - allow_coupons
+ - plan_url
+ - donation_mode
+ - show_preset_amounts
+ - donation_preset_amounts_in_cents
+ - digital_download
+ - download_type
+ - download_url
+ - download_file_url
+ - download_file_name
+ - created_at
+ - updated_at
+ - type
+ - receipt_text
+ - webhook_url
+ - company
+ properties:
+ id:
+ type: integer
+ description: Unique payment-link ID.
+ example: 42
+ readOnly: true
+ payment_type:
+ type: string
+ description: Default payment schedule.
+ example: recurring
+ enum:
+ - recurring
+ - one_off
+ readOnly: true
+ name:
+ type: string
+ description: Customer-facing payment-link name.
+ example: Consulting membership
+ readOnly: true
+ description:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing description.
+ example: Monthly access to consulting sessions.
+ readOnly: true
+ price:
+ type: number
+ description: Price in major currency units; zero for pay-what-you-want links
+ without a fixed price.
+ example: 30.0
+ minimum: 0
+ readOnly: true
+ price_in_cents:
+ type: integer
+ description: Price in the currency's smallest unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ slug:
+ type: string
+ description: URL-safe payment-link identifier.
+ example: consulting-membership
+ readOnly: true
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Recurring billing interval; null for one-off links.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ readOnly: true
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing intervals between charges.
+ example: 1
+ minimum: 1
+ readOnly: true
+ hidden:
+ type: boolean
+ description: Whether the link is hidden from storefronts.
+ example: false
+ readOnly: true
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful billing cycles before cancellation is allowed.
+ example:
+ minimum: 1
+ readOnly: true
+ billing_day:
+ type:
+ - integer
+ - 'null'
+ description: 'Recurring billing anchor: 1-7 for weeks, 1-28 for months and
+ derived month intervals, or 1-366 for years.'
+ example:
+ minimum: 1
+ maximum: 366
+ readOnly: true
+ limited_qty:
+ type: boolean
+ description: Whether stock is limited.
+ example: false
+ readOnly: true
+ qty:
+ type: integer
+ description: Remaining quantity when stock is limited.
+ example: 0
+ minimum: 0
+ readOnly: true
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which a payment plan ends.
+ example:
+ minimum: 1
+ readOnly: true
+ success_url:
+ type:
+ - string
+ - 'null'
+ description: URL customers are sent to after successful checkout.
+ example: https://example.com/thanks
+ format: uri
+ readOnly: true
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days.
+ example:
+ minimum: 1
+ readOnly: true
+ show_qty:
+ type: boolean
+ description: Whether customers can select a quantity.
+ example: false
+ readOnly: true
+ custom_fields:
+ type: array
+ description: Additional fields collected during checkout.
+ example: []
+ items:
+ "$ref": "#/components/schemas/CustomField"
+ readOnly: true
+ user_selects_amount:
+ type: boolean
+ description: Whether the customer chooses the payment amount.
+ example: false
+ readOnly: true
+ pay_button_text:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout button label.
+ example: Subscribe
+ readOnly: true
+ setup_fee:
+ type: number
+ description: One-time setup fee in major currency units.
+ example: 0.0
+ minimum: 0
+ readOnly: true
+ has_setup_fee:
+ type: boolean
+ description: Whether a positive setup fee is configured.
+ example: false
+ readOnly: true
+ allow_coupons:
+ type: boolean
+ description: Whether checkout accepts coupon codes.
+ example: true
+ readOnly: true
+ donation_mode:
+ type:
+ - string
+ - 'null'
+ description: Schedules offered by a pay-what-you-want link.
+ example:
+ enum:
+ - recurring
+ - one_off
+ - both
+ -
+ readOnly: true
+ show_preset_amounts:
+ type: boolean
+ description: Whether donation amount presets are shown.
+ example: false
+ readOnly: true
+ donation_preset_amounts_in_cents:
+ type:
+ - array
+ - 'null'
+ description: Three increasing donation presets in the currency's smallest
+ unit.
+ example:
+ items:
+ type: integer
+ minimum: 100
+ minItems: 3
+ maxItems: 3
+ readOnly: true
+ plan_url:
+ type: string
+ description: Public checkout URL.
+ example: https://payhere.co/example-studio/consulting-membership
+ format: uri
+ readOnly: true
+ digital_download:
+ type: boolean
+ description: Whether successful customers receive a digital download.
+ example: false
+ readOnly: true
+ download_type:
+ type:
+ - string
+ - 'null'
+ description: How the digital download is delivered.
+ example: upload
+ enum:
+ - upload
+ - url
+ -
+ readOnly: true
+ download_url:
+ type:
+ - string
+ - 'null'
+ description: External download URL for url-based downloads.
+ example:
+ format: uri
+ readOnly: true
+ download_file_url:
+ type:
+ - string
+ - 'null'
+ description: Relative URL for an uploaded download file.
+ example:
+ readOnly: true
+ download_file_name:
+ type:
+ - string
+ - 'null'
+ description: Original name of the uploaded download file.
+ example:
+ readOnly: true
+ created_at:
+ type: string
+ description: When the payment link was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the payment link was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: plans
+ const: plans
+ readOnly: true
+ receipt_text:
+ type:
+ - string
+ - 'null'
+ description: Custom text included on payment receipts.
+ example: Thank you for your payment.
+ readOnly: true
+ webhook_url:
+ type:
+ - string
+ - 'null'
+ description: URL notified for payment-link events.
+ example: https://example.com/payhere-webhook
+ format: uri
+ readOnly: true
+ company:
+ "$ref": "#/components/schemas/CompanyEmbeddedDetailed"
+ description: Company that owns the payment link.
+ readOnly: true
+ additionalProperties: false
+ title: PlanDetailed
+ PlanEmbeddedDetailed:
+ type: object
+ description: Payment-link details embedded in another resource.
+ required:
+ - id
+ - payment_type
+ - name
+ - description
+ - price
+ - price_in_cents
+ - currency
+ - slug
+ - billing_interval
+ - billing_interval_count
+ - hidden
+ - min_billing_cycles
+ - billing_day
+ - limited_qty
+ - qty
+ - cancel_after
+ - success_url
+ - trial_period_days
+ - show_qty
+ - custom_fields
+ - user_selects_amount
+ - pay_button_text
+ - setup_fee
+ - has_setup_fee
+ - allow_coupons
+ - plan_url
+ - donation_mode
+ - show_preset_amounts
+ - donation_preset_amounts_in_cents
+ - digital_download
+ - download_type
+ - download_url
+ - download_file_url
+ - download_file_name
+ - created_at
+ - updated_at
+ - type
+ - receipt_text
+ - webhook_url
+ properties:
+ id:
+ type: integer
+ description: Unique payment-link ID.
+ example: 42
+ readOnly: true
+ payment_type:
+ type: string
+ description: Default payment schedule.
+ example: recurring
+ enum:
+ - recurring
+ - one_off
+ readOnly: true
+ name:
+ type: string
+ description: Customer-facing payment-link name.
+ example: Consulting membership
+ readOnly: true
+ description:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing description.
+ example: Monthly access to consulting sessions.
+ readOnly: true
+ price:
+ type: number
+ description: Price in major currency units; zero for pay-what-you-want links
+ without a fixed price.
+ example: 30.0
+ minimum: 0
+ readOnly: true
+ price_in_cents:
+ type: integer
+ description: Price in the currency's smallest unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ slug:
+ type: string
+ description: URL-safe payment-link identifier.
+ example: consulting-membership
+ readOnly: true
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Recurring billing interval; null for one-off links.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ readOnly: true
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing intervals between charges.
+ example: 1
+ minimum: 1
+ readOnly: true
+ hidden:
+ type: boolean
+ description: Whether the link is hidden from storefronts.
+ example: false
+ readOnly: true
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful billing cycles before cancellation is allowed.
+ example:
+ minimum: 1
+ readOnly: true
+ billing_day:
+ type:
+ - integer
+ - 'null'
+ description: 'Recurring billing anchor: 1-7 for weeks, 1-28 for months and
+ derived month intervals, or 1-366 for years.'
+ example:
+ minimum: 1
+ maximum: 366
+ readOnly: true
+ limited_qty:
+ type: boolean
+ description: Whether stock is limited.
+ example: false
+ readOnly: true
+ qty:
+ type: integer
+ description: Remaining quantity when stock is limited.
+ example: 0
+ minimum: 0
+ readOnly: true
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which a payment plan ends.
+ example:
+ minimum: 1
+ readOnly: true
+ success_url:
+ type:
+ - string
+ - 'null'
+ description: URL customers are sent to after successful checkout.
+ example: https://example.com/thanks
+ format: uri
+ readOnly: true
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days.
+ example:
+ minimum: 1
+ readOnly: true
+ show_qty:
+ type: boolean
+ description: Whether customers can select a quantity.
+ example: false
+ readOnly: true
+ custom_fields:
+ type: array
+ description: Additional fields collected during checkout.
+ example: []
+ items:
+ "$ref": "#/components/schemas/CustomField"
+ readOnly: true
+ user_selects_amount:
+ type: boolean
+ description: Whether the customer chooses the payment amount.
+ example: false
+ readOnly: true
+ pay_button_text:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout button label.
+ example: Subscribe
+ readOnly: true
+ setup_fee:
+ type: number
+ description: One-time setup fee in major currency units.
+ example: 0.0
+ minimum: 0
+ readOnly: true
+ has_setup_fee:
+ type: boolean
+ description: Whether a positive setup fee is configured.
+ example: false
+ readOnly: true
+ allow_coupons:
+ type: boolean
+ description: Whether checkout accepts coupon codes.
+ example: true
+ readOnly: true
+ donation_mode:
+ type:
+ - string
+ - 'null'
+ description: Schedules offered by a pay-what-you-want link.
+ example:
+ enum:
+ - recurring
+ - one_off
+ - both
+ -
+ readOnly: true
+ show_preset_amounts:
+ type: boolean
+ description: Whether donation amount presets are shown.
+ example: false
+ readOnly: true
+ donation_preset_amounts_in_cents:
+ type:
+ - array
+ - 'null'
+ description: Three increasing donation presets in the currency's smallest
+ unit.
+ example:
+ items:
+ type: integer
+ minimum: 100
+ minItems: 3
+ maxItems: 3
+ readOnly: true
+ plan_url:
+ type: string
+ description: Public checkout URL.
+ example: https://payhere.co/example-studio/consulting-membership
+ format: uri
+ readOnly: true
+ digital_download:
+ type: boolean
+ description: Whether successful customers receive a digital download.
+ example: false
+ readOnly: true
+ download_type:
+ type:
+ - string
+ - 'null'
+ description: How the digital download is delivered.
+ example: upload
+ enum:
+ - upload
+ - url
+ -
+ readOnly: true
+ download_url:
+ type:
+ - string
+ - 'null'
+ description: External download URL for url-based downloads.
+ example:
+ format: uri
+ readOnly: true
+ download_file_url:
+ type:
+ - string
+ - 'null'
+ description: Relative URL for an uploaded download file.
+ example:
+ readOnly: true
+ download_file_name:
+ type:
+ - string
+ - 'null'
+ description: Original name of the uploaded download file.
+ example:
+ readOnly: true
+ created_at:
+ type: string
+ description: When the payment link was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the payment link was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: plans
+ const: plans
+ readOnly: true
+ receipt_text:
+ type:
+ - string
+ - 'null'
+ description: Custom text included on payment receipts.
+ example: Thank you for your payment.
+ readOnly: true
+ webhook_url:
+ type:
+ - string
+ - 'null'
+ description: URL notified for payment-link events.
+ example: https://example.com/payhere-webhook
+ format: uri
+ readOnly: true
+ additionalProperties: false
+ title: PlanEmbeddedDetailed
+ PlanListResponse:
+ type: object
+ description: Paginated detailed payment-link response.
+ required:
+ - data
+ - meta
+ properties:
+ data:
+ type: array
+ description: Payment links in the requested page.
+ items:
+ "$ref": "#/components/schemas/PlanDetailed"
+ readOnly: true
+ meta:
+ "$ref": "#/components/schemas/Pagination"
+ description: Pagination details.
+ readOnly: true
+ examples:
+ - data:
+ - id: 42
+ payment_type: recurring
+ name: Consulting membership
+ description: Monthly access to consulting sessions.
+ price: 30.0
+ price_in_cents: 3000
+ currency: gbp
+ slug: consulting-membership
+ billing_interval: month
+ billing_interval_count: 1
+ hidden: false
+ min_billing_cycles:
+ billing_day:
+ limited_qty: false
+ qty: 0
+ cancel_after:
+ success_url: https://example.com/thanks
+ trial_period_days:
+ show_qty: false
+ custom_fields: []
+ user_selects_amount: false
+ pay_button_text: Subscribe
+ setup_fee: 0.0
+ has_setup_fee: false
+ allow_coupons: true
+ donation_mode:
+ show_preset_amounts: false
+ donation_preset_amounts_in_cents:
+ plan_url: https://payhere.co/example-studio/consulting-membership
+ digital_download: false
+ download_type: upload
+ download_url:
+ download_file_url:
+ download_file_name:
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: plans
+ receipt_text: Thank you for your payment.
+ webhook_url: https://example.com/payhere-webhook
+ company:
+ id: 12
+ name: Example Studio
+ legal_name: Example Studio Ltd
+ slug: example-studio
+ ready: true
+ country_code: GB
+ button_color: "#2563EB"
+ button_text: white
+ role: standard
+ stripe_connected: true
+ gocardless_connected: false
+ currency: gbp
+ vat_registered: true
+ vat_rate: 20
+ small_logo_url: "/rails/active_storage/representations/example-logo.png"
+ facebook_pixel_id:
+ ga_tracking_id:
+ recaptcha_enabled: false
+ avatar_url: https://example.com/avatar.png
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: companies
+ plan: growth
+ plan_interval: month
+ subscription_status: active
+ active_until:
+ support_email: support@example.com
+ website: https://example.com
+ address: 1 Example Street, London
+ vat_registration_number: GB123456789
+ vat_mechanism: flat_rate
+ custom_domain:
+ meta:
+ current_page: 1
+ next_page: 2
+ prev_page:
+ total_pages: 3
+ total_count: 42
+ additionalProperties: false
+ title: PlanListResponse
+ PlanResponse:
+ type: object
+ description: Payment-link response envelope.
+ required:
+ - data
+ properties:
+ data:
+ "$ref": "#/components/schemas/Plan"
+ description: The created or updated payment link.
+ readOnly: true
+ examples:
+ - data:
+ id: 42
+ payment_type: recurring
+ name: Consulting membership
+ description: Monthly access to consulting sessions.
+ price: 30.0
+ price_in_cents: 3000
+ currency: gbp
+ slug: consulting-membership
+ billing_interval: month
+ billing_interval_count: 1
+ hidden: false
+ min_billing_cycles:
+ billing_day:
+ limited_qty: false
+ qty: 0
+ cancel_after:
+ success_url: https://example.com/thanks
+ trial_period_days:
+ show_qty: false
+ custom_fields: []
+ user_selects_amount: false
+ pay_button_text: Subscribe
+ setup_fee: 0.0
+ has_setup_fee: false
+ allow_coupons: true
+ donation_mode:
+ show_preset_amounts: false
+ donation_preset_amounts_in_cents:
+ plan_url: https://payhere.co/example-studio/consulting-membership
+ digital_download: false
+ download_type: upload
+ download_url:
+ download_file_url:
+ download_file_name:
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: plans
+ additionalProperties: false
+ title: PlanResponse
+ PlanUpdateMultipartRequest:
+ type: object
+ description: Payment-link updates submitted as multipart form data, including
+ a replacement download file.
+ properties:
+ name:
+ type: string
+ description: Customer-facing name.
+ example: Consulting membership
+ minLength: 1
+ description:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing description.
+ example: Monthly access to consulting sessions.
+ receipt_text:
+ type:
+ - string
+ - 'null'
+ description: Custom text included on receipts.
+ example: Thank you for your payment.
+ price:
+ type:
+ - number
+ - 'null'
+ description: Price in major currency units. Required unless user_selects_amount
+ is true.
+ example: 30
+ minimum: 1
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ default: gbp
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Recurring billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ default: month
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ default: 1
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which the plan ends.
+ example:
+ minimum: 1
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days; used only when recurring payments
+ are offered.
+ example:
+ minimum: 1
+ hidden:
+ type: boolean
+ description: Hide the link from storefronts.
+ example: false
+ default: false
+ limited_qty:
+ type: boolean
+ description: Enable stock limits.
+ example: false
+ default: false
+ qty:
+ type:
+ - integer
+ - 'null'
+ description: Available quantity when limited_qty is true.
+ example: 25
+ minimum: 0
+ show_qty:
+ type: boolean
+ description: Allow customers to choose a quantity.
+ example: false
+ default: false
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ billing_day:
+ type:
+ - integer
+ - 'null'
+ description: 'Recurring billing anchor: use 1-7 for weeks, 1-28 for months
+ and derived month intervals, or 1-366 for years.'
+ example:
+ minimum: 1
+ maximum: 366
+ success_url:
+ type:
+ - string
+ - 'null'
+ description: URL used after successful checkout.
+ example: https://example.com/thanks
+ format: uri
+ webhook_url:
+ type:
+ - string
+ - 'null'
+ description: URL notified for payment-link events.
+ example: https://example.com/payhere-webhook
+ format: uri
+ pay_button_text:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout button label.
+ example: Subscribe
+ setup_fee:
+ type:
+ - number
+ - 'null'
+ description: One-time setup fee in major currency units.
+ example: 10
+ minimum: 0
+ allow_coupons:
+ type: boolean
+ description: Allow coupon codes at checkout.
+ example: true
+ default: false
+ download_type:
+ type:
+ - string
+ - 'null'
+ description: Use upload for an attached file or url for an external link.
+ example: url
+ enum:
+ - upload
+ - url
+ -
+ default: upload
+ download_url:
+ type:
+ - string
+ - 'null'
+ description: Required when digital_download is true and download_type is
+ url.
+ example: https://example.com/download.zip
+ format: uri
+ custom_fields:
+ description: Additional checkout fields. Multipart clients may submit the
+ array as JSON text.
+ anyOf:
+ - type: array
+ items:
+ "$ref": "#/components/schemas/CustomField"
+ - type: string
+ contentMediaType: application/json
+ example:
+ - label: Company name
+ type: text
+ required: true
+ hidden: false
+ donation_mode:
+ type:
+ - string
+ - 'null'
+ description: Payment schedules offered when user_selects_amount is true.
+ example: both
+ enum:
+ - recurring
+ - one_off
+ - both
+ -
+ show_preset_amounts:
+ type: boolean
+ description: Show three suggested donation amounts.
+ example: true
+ default: false
+ donation_preset_amounts_in_cents:
+ type: array
+ description: Three unique, increasing suggested amounts in the currency's
+ smallest unit.
+ example:
+ - 2000
+ - 5000
+ - 10000
+ items:
+ type: integer
+ minimum: 100
+ minItems: 3
+ maxItems: 3
+ uniqueItems: true
+ download_file:
+ type: string
+ format: binary
+ description: Replacement file for an upload-based digital download.
+ examples:
+ - name: Updated consulting membership
+ price: 35
+ - download_type: upload
+ download_file: ""
+ additionalProperties: false
+ title: PlanUpdateMultipartRequest
+ PlanUpdateRequest:
+ type: object
+ description: Payment-link attributes to update. Price and currency are applied
+ only to existing one-off links; recurring schedule fields are applied only
+ when the existing link supports recurring payments.
+ properties:
+ name:
+ type: string
+ description: Customer-facing name.
+ example: Consulting membership
+ minLength: 1
+ description:
+ type:
+ - string
+ - 'null'
+ description: Customer-facing description.
+ example: Monthly access to consulting sessions.
+ receipt_text:
+ type:
+ - string
+ - 'null'
+ description: Custom text included on receipts.
+ example: Thank you for your payment.
+ price:
+ type:
+ - number
+ - 'null'
+ description: Price in major currency units. Required unless user_selects_amount
+ is true.
+ example: 30
+ minimum: 1
+ currency:
+ type: string
+ description: Lowercase ISO 4217 currency code.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ default: gbp
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Recurring billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ default: month
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ default: 1
+ cancel_after:
+ type:
+ - integer
+ - 'null'
+ description: Number of billing cycles after which the plan ends.
+ example:
+ minimum: 1
+ trial_period_days:
+ type:
+ - integer
+ - 'null'
+ description: Free-trial duration in days; used only when recurring payments
+ are offered.
+ example:
+ minimum: 1
+ hidden:
+ type: boolean
+ description: Hide the link from storefronts.
+ example: false
+ default: false
+ limited_qty:
+ type: boolean
+ description: Enable stock limits.
+ example: false
+ default: false
+ qty:
+ type:
+ - integer
+ - 'null'
+ description: Available quantity when limited_qty is true.
+ example: 25
+ minimum: 0
+ show_qty:
+ type: boolean
+ description: Allow customers to choose a quantity.
+ example: false
+ default: false
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ billing_day:
+ type:
+ - integer
+ - 'null'
+ description: 'Recurring billing anchor: use 1-7 for weeks, 1-28 for months
+ and derived month intervals, or 1-366 for years.'
+ example:
+ minimum: 1
+ maximum: 366
+ success_url:
+ type:
+ - string
+ - 'null'
+ description: URL used after successful checkout.
+ example: https://example.com/thanks
+ format: uri
+ webhook_url:
+ type:
+ - string
+ - 'null'
+ description: URL notified for payment-link events.
+ example: https://example.com/payhere-webhook
+ format: uri
+ pay_button_text:
+ type:
+ - string
+ - 'null'
+ description: Custom checkout button label.
+ example: Subscribe
+ setup_fee:
+ type:
+ - number
+ - 'null'
+ description: One-time setup fee in major currency units.
+ example: 10
+ minimum: 0
+ allow_coupons:
+ type: boolean
+ description: Allow coupon codes at checkout.
+ example: true
+ default: false
+ download_type:
+ type:
+ - string
+ - 'null'
+ description: Use upload for an attached file or url for an external link.
+ example: url
+ enum:
+ - upload
+ - url
+ -
+ default: upload
+ download_url:
+ type:
+ - string
+ - 'null'
+ description: Required when digital_download is true and download_type is
+ url.
+ example: https://example.com/download.zip
+ format: uri
+ custom_fields:
+ description: Additional checkout fields. Multipart clients may submit the
+ array as JSON text.
+ anyOf:
+ - type: array
+ items:
+ "$ref": "#/components/schemas/CustomField"
+ - type: string
+ contentMediaType: application/json
+ example:
+ - label: Company name
+ type: text
+ required: true
+ hidden: false
+ donation_mode:
+ type:
+ - string
+ - 'null'
+ description: Payment schedules offered when user_selects_amount is true.
+ example: both
+ enum:
+ - recurring
+ - one_off
+ - both
+ -
+ show_preset_amounts:
+ type: boolean
+ description: Show three suggested donation amounts.
+ example: true
+ default: false
+ donation_preset_amounts_in_cents:
+ type: array
+ description: Three unique, increasing suggested amounts in the currency's
+ smallest unit.
+ example:
+ - 2000
+ - 5000
+ - 10000
+ items:
+ type: integer
+ minimum: 100
+ minItems: 3
+ maxItems: 3
+ uniqueItems: true
+ examples:
+ - name: Updated consulting membership
+ price: 35
+ additionalProperties: false
+ title: PlanUpdateRequest
+ RefundRequest:
+ type: object
+ description: A full or partial refund against an existing company payment.
+ required:
+ - payment_id
+ - amount
+ - reason
+ properties:
+ payment_id:
+ type: integer
+ description: Numeric ID of the payment to refund.
+ example: 101
+ amount:
+ type: number
+ description: Amount to refund in major currency units. It cannot exceed
+ the payment's remaining paid amount.
+ example: 5.0
+ exclusiveMinimum: 0
+ reason:
+ type: string
+ description: Processor-compatible reason for the refund.
+ example: requested_by_customer
+ enum:
+ - requested_by_customer
+ - duplicate
+ - fraudulent
+ examples:
+ - payment_id: 101
+ amount: 5.0
+ reason: requested_by_customer
+ additionalProperties: false
+ title: RefundRequest
+ StatsResponse:
+ type: object
+ description: Payment and subscriber totals in the company's configured currency.
+ required:
+ - currency
+ - payments_last_30
+ - payments_comparison
+ - subscribers_last_30
+ - subscribers_comparison
+ - payments_all_time
+ properties:
+ currency:
+ type: string
+ description: Lowercase currency code used for payment totals.
+ example: gbp
+ enum:
+ - usd
+ - aed
+ - all
+ - amd
+ - ang
+ - aud
+ - awg
+ - azn
+ - bam
+ - bbd
+ - bdt
+ - bgn
+ - bif
+ - bmd
+ - bnd
+ - brl
+ - bsd
+ - bwp
+ - bzd
+ - cad
+ - cdf
+ - chf
+ - cny
+ - czk
+ - dkk
+ - dop
+ - dzd
+ - egp
+ - etb
+ - eur
+ - fjd
+ - gbp
+ - gel
+ - gip
+ - gmd
+ - gyd
+ - hkd
+ - hrk
+ - htg
+ - huf
+ - idr
+ - ils
+ - inr
+ - isk
+ - jmd
+ - jpy
+ - kes
+ - kgs
+ - khr
+ - kmf
+ - krw
+ - kyd
+ - kzt
+ - lbp
+ - lkr
+ - lrd
+ - lsl
+ - mad
+ - mdl
+ - mga
+ - mkd
+ - mmk
+ - mnt
+ - mop
+ - mro
+ - mvr
+ - mwk
+ - mxn
+ - myr
+ - mzn
+ - nad
+ - ngn
+ - nok
+ - npr
+ - nzd
+ - pgk
+ - php
+ - pkr
+ - pln
+ - qar
+ - ron
+ - rsd
+ - rub
+ - rwf
+ - sar
+ - sbd
+ - scr
+ - sek
+ - sgd
+ - sll
+ - sos
+ - std
+ - szl
+ - thb
+ - tjs
+ - top
+ - try
+ - ttd
+ - twd
+ - tzs
+ - uah
+ - ugx
+ - uzs
+ - vnd
+ - vuv
+ - wst
+ - xaf
+ - xcd
+ - yer
+ - zar
+ - zmw
+ readOnly: true
+ payments_last_30:
+ type: number
+ description: Successful payment volume from the last 30 days.
+ example: 1240.5
+ readOnly: true
+ payments_comparison:
+ type: number
+ description: Successful payment volume from the preceding 30-day period.
+ example: 980.25
+ readOnly: true
+ subscribers_last_30:
+ type: integer
+ description: Active subscriptions created in the last 30 days.
+ example: 18
+ readOnly: true
+ subscribers_comparison:
+ type: integer
+ description: Active subscriptions created in the preceding 30-day period.
+ example: 14
+ readOnly: true
+ payments_all_time:
+ type: number
+ description: All-time successful payment volume.
+ example: 52430.75
+ readOnly: true
+ examples:
+ - currency: gbp
+ payments_last_30: 1240.5
+ payments_comparison: 980.25
+ subscribers_last_30: 18
+ subscribers_comparison: 14
+ payments_all_time: 52430.75
+ additionalProperties: false
+ title: StatsResponse
+ Subscription:
+ type: object
+ description: A recurring customer subscription.
+ required:
+ - id
+ - customer_id
+ - last_charged
+ - next_charge_at
+ - status
+ - stripe_subscription_id
+ - stripe_plan_id
+ - billing_interval
+ - plan_id
+ - provider
+ - metadata
+ - custom_fields
+ - billing_interval_count
+ - unit_amount_in_cents
+ - min_billing_cycles
+ - quantity
+ - created_at
+ - updated_at
+ - type
+ properties:
+ id:
+ type: integer
+ description: Unique subscription ID.
+ example: 77
+ readOnly: true
+ customer_id:
+ type:
+ - integer
+ - 'null'
+ description: Related customer ID.
+ example: 24
+ readOnly: true
+ last_charged:
+ type:
+ - string
+ - 'null'
+ description: When the subscription was most recently charged.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ next_charge_at:
+ type:
+ - string
+ - 'null'
+ description: Scheduled time of the next charge.
+ example: '2026-02-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ status:
+ type: string
+ description: Subscription status.
+ example: active
+ enum:
+ - active
+ - past_due
+ - pending
+ - trialing
+ - cancelled
+ - canceled
+ - incomplete
+ - incomplete_expired
+ - unpaid
+ readOnly: true
+ stripe_subscription_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe subscription ID.
+ example: sub_example
+ readOnly: true
+ stripe_plan_id:
+ type:
+ - string
+ - 'null'
+ description: Legacy Stripe plan or price ID.
+ example: price_example
+ readOnly: true
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ readOnly: true
+ plan_id:
+ type:
+ - integer
+ - 'null'
+ description: Related payment-link ID.
+ example: 42
+ readOnly: true
+ provider:
+ type: string
+ description: Subscription payment provider.
+ example: stripe
+ readOnly: true
+ metadata:
+ type: object
+ description: Provider and billing metadata whose keys vary by subscription.
+ example: {}
+ additionalProperties: true
+ readOnly: true
+ custom_fields:
+ type: object
+ description: Merchant-defined checkout answers.
+ example:
+ company_size: 10-20
+ additionalProperties: true
+ readOnly: true
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ readOnly: true
+ unit_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Per-unit recurring amount in the smallest currency unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ readOnly: true
+ quantity:
+ type: integer
+ description: Quantity billed each cycle.
+ example: 1
+ minimum: 1
+ readOnly: true
+ created_at:
+ type: string
+ description: When the subscription was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the subscription was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: subscriptions
+ const: subscriptions
+ readOnly: true
+ additionalProperties: false
+ title: Subscription
+ SubscriptionDetailed:
+ type: object
+ description: A subscription with its customer and payment link.
+ required:
+ - id
+ - customer_id
+ - last_charged
+ - next_charge_at
+ - status
+ - stripe_subscription_id
+ - stripe_plan_id
+ - billing_interval
+ - plan_id
+ - provider
+ - metadata
+ - custom_fields
+ - billing_interval_count
+ - unit_amount_in_cents
+ - min_billing_cycles
+ - quantity
+ - created_at
+ - updated_at
+ - type
+ - customer
+ - plan
+ properties:
+ id:
+ type: integer
+ description: Unique subscription ID.
+ example: 77
+ readOnly: true
+ customer_id:
+ type:
+ - integer
+ - 'null'
+ description: Related customer ID.
+ example: 24
+ readOnly: true
+ last_charged:
+ type:
+ - string
+ - 'null'
+ description: When the subscription was most recently charged.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ next_charge_at:
+ type:
+ - string
+ - 'null'
+ description: Scheduled time of the next charge.
+ example: '2026-02-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ status:
+ type: string
+ description: Subscription status.
+ example: active
+ enum:
+ - active
+ - past_due
+ - pending
+ - trialing
+ - cancelled
+ - canceled
+ - incomplete
+ - incomplete_expired
+ - unpaid
+ readOnly: true
+ stripe_subscription_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe subscription ID.
+ example: sub_example
+ readOnly: true
+ stripe_plan_id:
+ type:
+ - string
+ - 'null'
+ description: Legacy Stripe plan or price ID.
+ example: price_example
+ readOnly: true
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ readOnly: true
+ plan_id:
+ type:
+ - integer
+ - 'null'
+ description: Related payment-link ID.
+ example: 42
+ readOnly: true
+ provider:
+ type: string
+ description: Subscription payment provider.
+ example: stripe
+ readOnly: true
+ metadata:
+ type: object
+ description: Provider and billing metadata whose keys vary by subscription.
+ example: {}
+ additionalProperties: true
+ readOnly: true
+ custom_fields:
+ type: object
+ description: Merchant-defined checkout answers.
+ example:
+ company_size: 10-20
+ additionalProperties: true
+ readOnly: true
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ readOnly: true
+ unit_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Per-unit recurring amount in the smallest currency unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ readOnly: true
+ quantity:
+ type: integer
+ description: Quantity billed each cycle.
+ example: 1
+ minimum: 1
+ readOnly: true
+ created_at:
+ type: string
+ description: When the subscription was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the subscription was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: subscriptions
+ const: subscriptions
+ readOnly: true
+ customer:
+ description: Subscribed customer, or null for a deleted association.
+ anyOf:
+ - "$ref": "#/components/schemas/CustomerDetailed"
+ - type: 'null'
+ readOnly: true
+ plan:
+ description: Subscribed payment link, or null if it has been removed.
+ anyOf:
+ - "$ref": "#/components/schemas/PlanEmbeddedDetailed"
+ - type: 'null'
+ readOnly: true
+ additionalProperties: false
+ title: SubscriptionDetailed
+ SubscriptionListResponse:
+ type: object
+ description: Paginated detailed subscription response.
+ required:
+ - data
+ - meta
+ properties:
+ data:
+ type: array
+ description: Subscriptions in the requested page.
+ items:
+ "$ref": "#/components/schemas/SubscriptionDetailed"
+ readOnly: true
+ meta:
+ "$ref": "#/components/schemas/Pagination"
+ description: Pagination details.
+ readOnly: true
+ examples:
+ - data:
+ - id: 77
+ customer_id: 24
+ last_charged: '2026-01-15T10:30:00Z'
+ next_charge_at: '2026-02-15T10:30:00Z'
+ status: active
+ stripe_subscription_id: sub_example
+ stripe_plan_id: price_example
+ billing_interval: month
+ plan_id: 42
+ provider: stripe
+ metadata: {}
+ custom_fields:
+ company_size: 10-20
+ billing_interval_count: 1
+ unit_amount_in_cents: 3000
+ min_billing_cycles:
+ quantity: 1
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: subscriptions
+ customer:
+ id: 24
+ display_name: Acme Consulting
+ name: Jamie Taylor
+ email: jamie@example.com
+ ip_address: 203.0.113.10
+ location:
+ city: London
+ country: United Kingdom
+ company_name: Acme Consulting
+ company_address: 2 Example Road, London
+ phone_number: "+44 20 7946 0958"
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: customers
+ subscriptions: []
+ payments: []
+ company_customer:
+ id: 31
+ card_brand: visa
+ card_last4: '4242'
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: company_customers
+ plan:
+ id: 42
+ payment_type: recurring
+ name: Consulting membership
+ description: Monthly access to consulting sessions.
+ price: 30.0
+ price_in_cents: 3000
+ currency: gbp
+ slug: consulting-membership
+ billing_interval: month
+ billing_interval_count: 1
+ hidden: false
+ min_billing_cycles:
+ billing_day:
+ limited_qty: false
+ qty: 0
+ cancel_after:
+ success_url: https://example.com/thanks
+ trial_period_days:
+ show_qty: false
+ custom_fields: []
+ user_selects_amount: false
+ pay_button_text: Subscribe
+ setup_fee: 0.0
+ has_setup_fee: false
+ allow_coupons: true
+ donation_mode:
+ show_preset_amounts: false
+ donation_preset_amounts_in_cents:
+ plan_url: https://payhere.co/example-studio/consulting-membership
+ digital_download: false
+ download_type: upload
+ download_url:
+ download_file_url:
+ download_file_name:
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: plans
+ receipt_text: Thank you for your payment.
+ webhook_url: https://example.com/payhere-webhook
+ meta:
+ current_page: 1
+ next_page: 2
+ prev_page:
+ total_pages: 3
+ total_count: 42
+ additionalProperties: false
+ title: SubscriptionListResponse
+ SubscriptionResponse:
+ type: object
+ description: Detailed subscription response envelope.
+ required:
+ - data
+ properties:
+ data:
+ "$ref": "#/components/schemas/SubscriptionWithPayments"
+ description: The requested subscription.
+ readOnly: true
+ examples:
+ - data:
+ id: 77
+ customer_id: 24
+ last_charged: '2026-01-15T10:30:00Z'
+ next_charge_at: '2026-02-15T10:30:00Z'
+ status: active
+ stripe_subscription_id: sub_example
+ stripe_plan_id: price_example
+ billing_interval: month
+ plan_id: 42
+ provider: stripe
+ metadata: {}
+ custom_fields:
+ company_size: 10-20
+ billing_interval_count: 1
+ unit_amount_in_cents: 3000
+ min_billing_cycles:
+ quantity: 1
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: subscriptions
+ customer:
+ id: 24
+ display_name: Acme Consulting
+ name: Jamie Taylor
+ email: jamie@example.com
+ ip_address: 203.0.113.10
+ location:
+ city: London
+ country: United Kingdom
+ company_name: Acme Consulting
+ company_address: 2 Example Road, London
+ phone_number: "+44 20 7946 0958"
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: customers
+ subscriptions: []
+ payments: []
+ company_customer:
+ id: 31
+ card_brand: visa
+ card_last4: '4242'
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: company_customers
+ plan:
+ id: 42
+ payment_type: recurring
+ name: Consulting membership
+ description: Monthly access to consulting sessions.
+ price: 30.0
+ price_in_cents: 3000
+ currency: gbp
+ slug: consulting-membership
+ billing_interval: month
+ billing_interval_count: 1
+ hidden: false
+ min_billing_cycles:
+ billing_day:
+ limited_qty: false
+ qty: 0
+ cancel_after:
+ success_url: https://example.com/thanks
+ trial_period_days:
+ show_qty: false
+ custom_fields: []
+ user_selects_amount: false
+ pay_button_text: Subscribe
+ setup_fee: 0.0
+ has_setup_fee: false
+ allow_coupons: true
+ donation_mode:
+ show_preset_amounts: false
+ donation_preset_amounts_in_cents:
+ plan_url: https://payhere.co/example-studio/consulting-membership
+ digital_download: false
+ download_type: upload
+ download_url:
+ download_file_url:
+ download_file_name:
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: plans
+ receipt_text: Thank you for your payment.
+ webhook_url: https://example.com/payhere-webhook
+ payments:
+ - id: 101
+ hashid: pay_7Yx2K9
+ reference: ORDER-1001
+ formatted_amount: "£30.00"
+ amount: 30.0
+ currency: gbp
+ refund_amount: 0.0
+ amount_paid: 30.0
+ amount_without_fees: 28.8
+ vat_included: true
+ vat_rate: 20
+ vat_amount: 5.0
+ ex_vat_amount: 25.0
+ purchased_qty: 1
+ company_id: 12
+ card_brand: visa
+ card_last4: '4242'
+ secure_token: example-payment-token
+ status: success
+ success: true
+ stripe_charge_id: ch_example
+ gateway_url:
+ gocardless_payment_id:
+ object_name: Consulting session
+ failed_attempts: 0
+ usd_amount_in_cents: 3800
+ custom_fields:
+ company_size: 10-20
+ provider: stripe
+ application_fee: 0.6
+ gateway_fee: 0.6
+ last_error_message:
+ coupon_code:
+ discount_percent:
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: payments
+ additionalProperties: false
+ title: SubscriptionResponse
+ SubscriptionWithPayments:
+ type: object
+ description: A subscription with its customer, payment link, and payment history.
+ required:
+ - id
+ - customer_id
+ - last_charged
+ - next_charge_at
+ - status
+ - stripe_subscription_id
+ - stripe_plan_id
+ - billing_interval
+ - plan_id
+ - provider
+ - metadata
+ - custom_fields
+ - billing_interval_count
+ - unit_amount_in_cents
+ - min_billing_cycles
+ - quantity
+ - created_at
+ - updated_at
+ - type
+ - customer
+ - plan
+ - payments
+ properties:
+ id:
+ type: integer
+ description: Unique subscription ID.
+ example: 77
+ readOnly: true
+ customer_id:
+ type:
+ - integer
+ - 'null'
+ description: Related customer ID.
+ example: 24
+ readOnly: true
+ last_charged:
+ type:
+ - string
+ - 'null'
+ description: When the subscription was most recently charged.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ next_charge_at:
+ type:
+ - string
+ - 'null'
+ description: Scheduled time of the next charge.
+ example: '2026-02-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ status:
+ type: string
+ description: Subscription status.
+ example: active
+ enum:
+ - active
+ - past_due
+ - pending
+ - trialing
+ - cancelled
+ - canceled
+ - incomplete
+ - incomplete_expired
+ - unpaid
+ readOnly: true
+ stripe_subscription_id:
+ type:
+ - string
+ - 'null'
+ description: Stripe subscription ID.
+ example: sub_example
+ readOnly: true
+ stripe_plan_id:
+ type:
+ - string
+ - 'null'
+ description: Legacy Stripe plan or price ID.
+ example: price_example
+ readOnly: true
+ billing_interval:
+ type:
+ - string
+ - 'null'
+ description: Billing interval.
+ example: month
+ enum:
+ - day
+ - week
+ - month
+ - quarter
+ - six-months
+ - year
+ -
+ readOnly: true
+ plan_id:
+ type:
+ - integer
+ - 'null'
+ description: Related payment-link ID.
+ example: 42
+ readOnly: true
+ provider:
+ type: string
+ description: Subscription payment provider.
+ example: stripe
+ readOnly: true
+ metadata:
+ type: object
+ description: Provider and billing metadata whose keys vary by subscription.
+ example: {}
+ additionalProperties: true
+ readOnly: true
+ custom_fields:
+ type: object
+ description: Merchant-defined checkout answers.
+ example:
+ company_size: 10-20
+ additionalProperties: true
+ readOnly: true
+ billing_interval_count:
+ type:
+ - integer
+ - 'null'
+ description: Number of intervals between charges.
+ example: 1
+ minimum: 1
+ readOnly: true
+ unit_amount_in_cents:
+ type:
+ - integer
+ - 'null'
+ description: Per-unit recurring amount in the smallest currency unit.
+ example: 3000
+ minimum: 0
+ readOnly: true
+ min_billing_cycles:
+ type:
+ - integer
+ - 'null'
+ description: Minimum successful cycles before cancellation.
+ example:
+ minimum: 1
+ readOnly: true
+ quantity:
+ type: integer
+ description: Quantity billed each cycle.
+ example: 1
+ minimum: 1
+ readOnly: true
+ created_at:
+ type: string
+ description: When the subscription was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the subscription was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: subscriptions
+ const: subscriptions
+ readOnly: true
+ customer:
+ description: Subscribed customer, or null for a deleted association.
+ anyOf:
+ - "$ref": "#/components/schemas/CustomerDetailed"
+ - type: 'null'
+ readOnly: true
+ plan:
+ description: Subscribed payment link, or null if it has been removed.
+ anyOf:
+ - "$ref": "#/components/schemas/PlanEmbeddedDetailed"
+ - type: 'null'
+ readOnly: true
+ payments:
+ type: array
+ description: Payments ordered newest first.
+ items:
+ "$ref": "#/components/schemas/Payment"
+ readOnly: true
+ additionalProperties: false
+ title: SubscriptionWithPayments
+ User:
+ type: object
+ description: A PayHere account user.
+ required:
+ - id
+ - display_name
+ - email
+ - unconfirmed_email
+ - role
+ - email_verified
+ - company_id
+ - invitation_accepted
+ - created_at
+ - updated_at
+ - type
+ properties:
+ id:
+ type: integer
+ description: Unique user ID.
+ example: 7
+ readOnly: true
+ display_name:
+ type: string
+ description: User's display name.
+ example: Alex Morgan
+ readOnly: true
+ email:
+ type: string
+ description: User's confirmed email address.
+ example: alex@example.com
+ format: email
+ readOnly: true
+ unconfirmed_email:
+ type:
+ - string
+ - 'null'
+ description: Pending replacement email address awaiting confirmation.
+ example:
+ format: email
+ readOnly: true
+ role:
+ type: string
+ description: Application-level access role.
+ example: admin
+ enum:
+ - user
+ - beta_user
+ - admin
+ - superadmin
+ readOnly: true
+ email_verified:
+ type: boolean
+ description: Whether the email address is confirmed.
+ example: true
+ readOnly: true
+ company_id:
+ type:
+ - integer
+ - 'null'
+ description: Currently active company ID.
+ example: 12
+ readOnly: true
+ invitation_accepted:
+ type: boolean
+ description: Whether an invitation has been accepted or was not required.
+ example: true
+ readOnly: true
+ created_at:
+ type: string
+ description: When the user was created.
+ example: '2026-01-15T10:30:00Z'
+ format: date-time
+ readOnly: true
+ updated_at:
+ type: string
+ description: When the user was last updated.
+ example: '2026-01-16T09:15:00Z'
+ format: date-time
+ readOnly: true
+ type:
+ type: string
+ description: Resource type.
+ example: users
+ const: users
+ readOnly: true
+ additionalProperties: false
+ title: User
+ UserResponse:
+ type: object
+ description: Current-user response envelope.
+ required:
+ - data
+ properties:
+ data:
+ "$ref": "#/components/schemas/CurrentUser"
+ description: The authenticated user.
+ readOnly: true
+ examples:
+ - data:
+ id: 7
+ display_name: Alex Morgan
+ email: alex@example.com
+ unconfirmed_email:
+ role: admin
+ email_verified: true
+ company_id: 12
+ invitation_accepted: true
+ created_at: '2026-01-15T10:30:00Z'
+ updated_at: '2026-01-16T09:15:00Z'
+ type: users
+ active_company_role: owner
+ available_companies:
+ - id: 12
+ slug: example-studio
+ name: Example Studio
+ additionalProperties: false
+ title: UserResponse
+ ValidationError:
+ type: object
+ description: Validation errors returned when submitted attributes are invalid.
+ required:
+ - error
+ - validation_errors
+ - full_errors
+ - form_errors
+ properties:
+ error:
+ type: string
+ description: Human-readable explanation of the error.
+ example: The request could not be completed.
+ readOnly: true
+ validation_errors:
+ type: array
+ description: Validation messages grouped by field.
+ readOnly: true
+ items:
+ type: object
+ required:
+ - field
+ - errors
+ properties:
+ field:
+ type: string
+ description: Attribute that failed validation.
+ example: name
+ readOnly: true
+ errors:
+ type: array
+ description: Validation messages for the attribute.
+ items:
+ type: string
+ example:
+ - can't be blank
+ readOnly: true
+ additionalProperties: false
+ full_errors:
+ type: array
+ description: Complete validation messages including field names.
+ items:
+ type: string
+ example:
+ - Name can't be blank
+ readOnly: true
+ form_errors:
+ type: object
+ description: Field names mapped to messages for displaying beside form inputs.
+ example:
+ name: can't be blank
+ readOnly: true
+ additionalProperties:
+ type: string
+ additionalProperties: false
+ examples:
+ - error: Plan validation failed
+ validation_errors:
+ - field: name
+ errors:
+ - can't be blank
+ full_errors:
+ - Name can't be blank
+ form_errors:
+ name: can't be blank
+ title: ValidationError
+ securitySchemes:
+ AccessToken:
+ type: apiKey
+ name: access_token
+ in: query
+ description: PayHere API key passed as a query parameter
+ BearerAuth:
+ type: http
+ scheme: bearer
+ description: PayHere API key passed as a bearer token
+security: []
diff --git a/package.json b/package.json
index d2b5e0c..cf447d3 100644
--- a/package.json
+++ b/package.json
@@ -3,9 +3,13 @@
"version": "0.0.0",
"private": true,
"scripts": {
+ "api:clean": "docusaurus clean-api-docs publicV1",
+ "api:generate": "yarn api:clean && docusaurus gen-api-docs publicV1",
+ "api:lint": "redocly lint openapi/public_v1.yaml",
+ "api:sync": "node scripts/sync-openapi.mjs",
"docusaurus": "docusaurus",
- "start": "docusaurus start",
- "build": "docusaurus build",
+ "start": "yarn api:generate && docusaurus start",
+ "build": "yarn api:generate && docusaurus build",
"swizzle": "docusaurus swizzle",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
@@ -17,13 +21,18 @@
"@docusaurus/preset-classic": "3.10.2",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
+ "docusaurus-plugin-openapi-docs": "5.2.0",
+ "docusaurus-plugin-sass": "0.2.6",
+ "docusaurus-theme-openapi-docs": "5.2.0",
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.10.2",
- "@docusaurus/types": "3.10.2"
+ "@docusaurus/types": "3.10.2",
+ "@redocly/cli": "2.51.0",
+ "yaml": "2.9.0"
},
"browserslist": {
"production": [
@@ -38,6 +47,6 @@
]
},
"engines": {
- "node": ">=18.0"
+ "node": "^20.19.0 || >=22.12.0"
}
}
diff --git a/scripts/sync-openapi.mjs b/scripts/sync-openapi.mjs
new file mode 100644
index 0000000..d0d7dd1
--- /dev/null
+++ b/scripts/sync-openapi.mjs
@@ -0,0 +1,91 @@
+import { existsSync } from "node:fs";
+import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
+import path from "node:path";
+import process from "node:process";
+import { fileURLToPath } from "node:url";
+
+import YAML from "yaml";
+
+const DEFAULT_SPEC_URL =
+ "https://sandbox.payhere.co/openapi/public_v1.yaml";
+const specUrl = process.env.OPENAPI_SPEC_URL || DEFAULT_SPEC_URL;
+const checkOnly = process.argv.includes("--check");
+const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
+const snapshotPath = path.resolve(
+ scriptDirectory,
+ "../openapi/public_v1.yaml",
+);
+
+function canonicalize(value) {
+ if (Array.isArray(value)) {
+ return value.map(canonicalize);
+ }
+
+ if (value && typeof value === "object") {
+ return Object.fromEntries(
+ Object.keys(value)
+ .sort()
+ .map((key) => [key, canonicalize(value[key])]),
+ );
+ }
+
+ return value;
+}
+
+function semanticSignature(source, label) {
+ let document;
+
+ try {
+ document = YAML.parse(source);
+ } catch (error) {
+ throw new Error(`${label} is not valid YAML: ${error.message}`);
+ }
+
+ if (document?.openapi !== "3.1.0") {
+ throw new Error(
+ `${label} declares OpenAPI ${document?.openapi ?? "unknown"}; expected 3.1.0`,
+ );
+ }
+
+ return JSON.stringify(canonicalize(document));
+}
+
+const response = await fetch(specUrl, {
+ headers: { Accept: "application/yaml, text/yaml;q=0.9" },
+});
+
+if (!response.ok) {
+ throw new Error(
+ `Unable to download ${specUrl}: ${response.status} ${response.statusText}`,
+ );
+}
+
+const downloadedSource = await response.text();
+const downloadedSignature = semanticSignature(downloadedSource, specUrl);
+let currentSignature;
+
+if (existsSync(snapshotPath)) {
+ const currentSource = await readFile(snapshotPath, "utf8");
+ currentSignature = semanticSignature(currentSource, snapshotPath);
+}
+
+if (downloadedSignature === currentSignature) {
+ console.log("OpenAPI snapshot is already current.");
+ process.exit(0);
+}
+
+if (checkOnly) {
+ console.error("OpenAPI snapshot differs from the deployed sandbox contract.");
+ process.exit(1);
+}
+
+await mkdir(path.dirname(snapshotPath), { recursive: true });
+const temporaryPath = `${snapshotPath}.${process.pid}.tmp`;
+const normalizedSource = downloadedSource.endsWith("\n")
+ ? downloadedSource
+ : `${downloadedSource}\n`;
+
+await writeFile(temporaryPath, normalizedSource, "utf8");
+await rename(temporaryPath, snapshotPath);
+
+console.log(`Updated ${path.relative(process.cwd(), snapshotPath)} from ${specUrl}.`);
diff --git a/sidebars.js b/sidebars.js
index 6b162a1..6826091 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -1,4 +1,6 @@
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
+const apiReferenceSidebar = require("./docs/api-reference/sidebar.ts").default;
+
const sidebars = {
docs: [
{
@@ -22,52 +24,14 @@ const sidebars = {
{
type: "category",
label: "API",
- items: [
- "api-auth",
- {
- type: "category",
- label: "/v1/current_company",
- items: [
- "api-current-company-show",
- "api-current-company-update",
- "api-current-company-stats",
- ],
- },
- {
- type: "category",
- label: "/v1/customers",
- items: ["api-customers", "api-customer-show"],
- },
- {
- type: "category",
- label: "/v1/payments",
- items: ["api-payments", "api-payment-show"],
- },
- {
- type: "category",
- label: "/v1/plans",
- items: ["api-plans", "api-plans-create", "api-plans-update"],
- },
- {
- type: "category",
- label: "/v1/refunds",
- items: ["api-refunds"],
- },
- {
- type: "category",
- label: "/v1/subscriptions",
- items: [
- "api-subscriptions",
- "api-subscription-show",
- "api-subscription-destroy",
- ],
- },
- {
- type: "category",
- label: "/v1/user",
- items: ["api-user"],
- },
- ],
+ link: {
+ type: "generated-index",
+ title: "PayHere REST API Reference",
+ description:
+ "Generated from the OpenAPI contract published by the PayHere API.",
+ slug: "/category/api-reference",
+ },
+ items: apiReferenceSidebar,
},
],
};
diff --git a/src/css/custom.css b/src/css/custom.css
index 3352810..bb9fb05 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -382,3 +382,693 @@ table thead tr {
grid-template-columns: 1fr;
}
}
+
+/* ============================================================
+ Generated OpenAPI reference
+
+ The OpenAPI theme uses the same generic `.tabs` classes as our dark
+ editor-style code samples. These scoped rules give API controls their own
+ treatment while preserving that editor styling in the hand-written docs.
+ ============================================================ */
+
+.theme-api-markdown {
+ --openapi-card-background-color: var(--ph-gray-50);
+ --openapi-input-background: #fff;
+ --openapi-input-border: var(--ph-blue);
+ --openapi-tree-line-color: var(--ph-gray-300);
+ --openapi-code-tab-border-color: var(--ph-editor-border);
+ --openapi-explorer-border-color: var(--ph-gray-200);
+ --openapi-explorer-font-size-input: 0.8125rem;
+ --openapi-explorer-font-size-code: 0.78rem;
+ --openapi-explorer-padding-input: 0.65rem 0.75rem;
+ align-items: flex-start;
+}
+
+[data-theme='dark'] .theme-api-markdown {
+ --openapi-card-background-color: #151b27;
+ --openapi-input-background: #0e131c;
+ --openapi-tree-line-color: #30394a;
+ --openapi-explorer-border-color: #2a3343;
+}
+
+.theme-api-markdown .openapi-left-panel__container {
+ border-right: 0;
+ padding-right: 2rem !important;
+}
+
+.theme-api-markdown .openapi-right-panel__container {
+ padding-left: 2rem !important;
+}
+
+.theme-api-markdown .openapi__heading {
+ margin-bottom: 0.85rem !important;
+ font-size: clamp(2.25rem, 3vw, 3rem);
+ line-height: 1.08;
+ letter-spacing: -0.035em;
+}
+
+.theme-api-markdown .openapi__method-endpoint {
+ width: 100%;
+ padding: 0.65rem 0.75rem;
+ background: var(--ph-gray-50);
+ border-color: var(--ph-gray-200);
+ border-radius: var(--ph-radius-lg);
+}
+
+[data-theme='dark'] .theme-api-markdown .openapi__method-endpoint {
+ background: var(--ifm-background-surface-color);
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+.theme-api-markdown .openapi__method-endpoint-path {
+ overflow-wrap: anywhere;
+ font-size: 0.78rem;
+ color: var(--ifm-color-emphasis-700);
+}
+
+.theme-api-markdown .openapi__divider {
+ margin: 1.35rem 0 1.65rem;
+}
+
+.theme-api-markdown .openapi-left-panel__container > p {
+ font-size: 1rem;
+ line-height: 1.65;
+}
+
+/* API response, content-type, and schema tabs are compact controls, not code
+ editor tabs. */
+.theme-api-markdown .openapi-tabs__response-list-container,
+.theme-api-markdown .openapi-tabs__mime-list-container,
+.theme-api-markdown .openapi-tabs__schema-list-container,
+.theme-api-markdown .openapi-tabs__operation-list-container {
+ gap: 0.35rem;
+ padding: 0;
+ background: transparent;
+ border: 0;
+ border-radius: 0;
+}
+
+.theme-api-markdown .openapi-tabs__response-code-item,
+.theme-api-markdown .openapi-tabs__mime-item,
+.theme-api-markdown .openapi-tabs__schema-item,
+.theme-api-markdown .openapi-tabs__operation-item {
+ min-height: 30px;
+ margin-right: 0;
+ padding: 0.35rem 0.7rem;
+ background: transparent;
+ border: 1px solid var(--ph-gray-200);
+ border-radius: var(--ph-radius-md);
+ color: var(--ifm-color-emphasis-700);
+ font-size: 0.72rem;
+ line-height: 1;
+}
+
+[data-theme='dark'] .theme-api-markdown .openapi-tabs__response-code-item,
+[data-theme='dark'] .theme-api-markdown .openapi-tabs__mime-item,
+[data-theme='dark'] .theme-api-markdown .openapi-tabs__schema-item,
+[data-theme='dark'] .theme-api-markdown .openapi-tabs__operation-item {
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+.theme-api-markdown .openapi-tabs__response-code-item::before,
+.theme-api-markdown .openapi-tabs__mime-item::before,
+.theme-api-markdown .openapi-tabs__schema-item::before,
+.theme-api-markdown .openapi-tabs__operation-item::before {
+ display: none;
+}
+
+.theme-api-markdown .openapi-tabs__mime-item.active,
+.theme-api-markdown .openapi-tabs__schema-item.active,
+.theme-api-markdown .openapi-tabs__operation-item.active {
+ background: var(--ph-sidebar-active-bg);
+ border-color: rgba(0, 77, 201, 0.35);
+ color: var(--ifm-color-primary);
+}
+
+[data-theme='dark'] .theme-api-markdown .openapi-tabs__mime-item.active,
+[data-theme='dark'] .theme-api-markdown .openapi-tabs__schema-item.active,
+[data-theme='dark'] .theme-api-markdown .openapi-tabs__operation-item.active {
+ border-color: rgba(77, 139, 255, 0.45);
+}
+
+.theme-api-markdown .openapi-tabs__response-code-item.success.active {
+ background: #238636;
+ border-color: #238636;
+}
+
+.theme-api-markdown .openapi-tabs__response-code-item.danger.active {
+ background: #cf3347;
+ border-color: #cf3347;
+}
+
+.theme-api-markdown .openapi-tabs__response-code-item.info.active {
+ background: var(--ph-blue);
+ border-color: var(--ph-blue);
+}
+
+.theme-api-markdown .openapi-tabs__response-schema-container,
+.theme-api-markdown .openapi-tabs__operation-schema-container,
+.theme-api-markdown .openapi-tabs__mime-schema-container {
+ max-width: none;
+}
+
+/* Code samples retain the dark editor surface, but use the compact language
+ tabs already established in the hand-written API guides. */
+.theme-api-markdown
+ .openapi-tabs__code-container:not(.openapi-tabs__code-container-inner) {
+ padding: 0;
+ overflow: hidden;
+ background: var(--ph-editor-bg);
+ border: 1px solid var(--ph-editor-border);
+ border-radius: var(--ph-radius-lg);
+ box-shadow: none;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container:not(.openapi-tabs__code-container-inner):hover {
+ box-shadow: none;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container:not(.openapi-tabs__code-container-inner)
+ > .openapi-tabs__code-list-container {
+ gap: 0.25rem;
+ padding: 0.4rem;
+ background: var(--ph-editor-strip);
+ border: 0;
+ border-bottom: 1px solid var(--ph-editor-border);
+ border-radius: 0;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ .openapi-tabs__code-item {
+ flex: 0 0 auto;
+ flex-direction: row;
+ gap: 0.45rem;
+ min-height: 34px;
+ margin-right: 0;
+ padding: 0.45rem 0.7rem !important;
+ border: 1px solid transparent;
+ border-radius: var(--ph-radius-sm);
+ box-shadow: none !important;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ .openapi-tabs__code-item::after {
+ display: none;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ .openapi-tabs__code-item::before {
+ display: block;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ .openapi-tabs__code-item
+ > span {
+ padding: 0;
+ color: var(--ph-editor-muted);
+ font-size: 0.75rem;
+ line-height: 1;
+ text-transform: none;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ .openapi-tabs__code-item.active {
+ background: var(--ph-editor-active);
+ border-color: var(--ph-editor-border) !important;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ .openapi-tabs__code-item.active::before {
+ background: #34d399;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ .openapi-tabs__code-item.active
+ > span {
+ color: var(--ph-editor-text);
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container
+ > .margin-top--md {
+ margin-top: 0 !important;
+}
+
+.theme-api-markdown .openapi-tabs__code-container-inner {
+ margin-bottom: 0;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container-inner
+ > .openapi-tabs__code-list-container {
+ gap: 0.25rem;
+ padding: 0.35rem 0.75rem 0;
+ background: #111722;
+ border: 0;
+ border-radius: 0;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container-inner
+ .openapi-tabs__code-item {
+ min-height: 26px;
+ padding: 0.3rem 0.55rem !important;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container-inner
+ .openapi-tabs__code-item::before {
+ display: none;
+}
+
+.theme-api-markdown
+ .openapi-tabs__code-container-inner
+ > .openapi-tabs__code-list-container:has(
+ > .openapi-tabs__code-item:only-child
+ ) {
+ display: none;
+}
+
+.theme-api-markdown .openapi-explorer__code-block-container {
+ box-shadow: none;
+}
+
+/* Explorer cards and form fields use the same quiet borders and radii as the
+ rest of the docs instead of the plugin's elevated demo-card treatment. */
+.theme-api-markdown .openapi-security__details,
+.theme-api-markdown .openapi-explorer__request-form {
+ overflow: hidden;
+ background: var(--ifm-background-surface-color);
+ border: 1px solid var(--openapi-explorer-border-color);
+ border-radius: var(--ph-radius-lg);
+ box-shadow: none;
+}
+
+.theme-api-markdown .openapi-explorer__request-form:hover {
+ box-shadow: 0 8px 24px -20px rgba(3, 13, 29, 0.45);
+}
+
+.theme-api-markdown .openapi-security__summary-container,
+.theme-api-markdown .openapi-explorer__request-header-container {
+ padding: 0.8rem 1rem;
+ background: var(--ph-gray-50);
+ letter-spacing: 0.035em;
+}
+
+[data-theme='dark'] .theme-api-markdown .openapi-security__summary-container,
+[data-theme='dark']
+ .theme-api-markdown
+ .openapi-explorer__request-header-container {
+ background: #151b27;
+}
+
+.theme-api-markdown .openapi-security__summary-container:hover {
+ background: var(--ph-gray-100);
+}
+
+[data-theme='dark']
+ .theme-api-markdown
+ .openapi-security__summary-container:hover {
+ background: #1b2333;
+}
+
+.theme-api-markdown .openapi-security__summary-header {
+ letter-spacing: 0.035em;
+}
+
+.theme-api-markdown .openapi-explorer__details-outer-container {
+ padding: 0.75rem 1rem 1rem;
+}
+
+.theme-api-markdown .openapi-explorer__form-item {
+ padding: 0.55rem 0;
+}
+
+.theme-api-markdown .openapi-explorer__form-item-input,
+.theme-api-markdown .openapi-explorer__select-input {
+ border: 1px solid var(--openapi-explorer-border-color);
+ border-radius: var(--ph-radius-md);
+ color: var(--ifm-font-color-base);
+}
+
+.theme-api-markdown .openapi-explorer__form-item-input:hover {
+ border-color: var(--ifm-color-emphasis-400);
+}
+
+.theme-api-markdown .openapi-explorer__form-item-input:focus,
+.theme-api-markdown .openapi-explorer__select-input:focus {
+ border-color: var(--ifm-color-primary);
+ box-shadow: 0 0 0 3px rgba(0, 77, 201, 0.12);
+}
+
+.theme-api-markdown .openapi-schema__list-item {
+ padding-top: 0.55rem;
+ padding-bottom: 0.55rem;
+}
+
+.theme-api-markdown .openapi-schema__property {
+ font-size: 0.84rem;
+ font-weight: 600;
+}
+
+.theme-api-markdown .openapi-schema__type,
+.theme-api-markdown .openapi-schema__name {
+ font-size: 0.8rem;
+}
+
+.theme-api-markdown .openapi-schema__required {
+ padding: 0.12rem 0.35rem;
+ background: rgba(207, 51, 71, 0.08);
+ border-radius: 999px;
+}
+
+.theme-api-markdown .openapi-schema__divider {
+ margin-right: 0.6rem;
+ margin-left: 0.6rem;
+}
+
+/* With the docs sidebar open, intermediate laptop widths leave too little
+ room for a useful split view. Stack the reference and explorer until both
+ columns can breathe. */
+@media (min-width: 997px) and (max-width: 1300px) {
+ .theme-api-markdown {
+ display: block;
+ }
+
+ .theme-api-markdown .openapi-left-panel__container,
+ .theme-api-markdown .openapi-right-panel__container {
+ width: 100%;
+ max-width: 100%;
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ --ifm-col-width: 100%;
+ }
+
+ .theme-api-markdown .openapi-right-panel__container {
+ position: static;
+ max-height: none;
+ margin-top: 2rem;
+ padding-top: 2rem !important;
+ overflow: visible;
+ border-top: 1px solid var(--ifm-toc-border-color);
+ }
+}
+
+@media (max-width: 996px) {
+ .theme-api-markdown .openapi-left-panel__container,
+ .theme-api-markdown .openapi-right-panel__container {
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ }
+
+ .theme-api-markdown .openapi-right-panel__container {
+ margin-top: 2rem;
+ }
+}
+
+@media (max-width: 576px) {
+ .theme-api-markdown .openapi__heading {
+ font-size: 2rem;
+ }
+
+ .theme-api-markdown .openapi-tabs__response-header-section {
+ gap: 0.75rem;
+ }
+
+ .theme-api-markdown .openapi-tabs__response-container {
+ margin-top: 0;
+ }
+}
+
+/* ============================================================
+ Generated OpenAPI overview
+
+ The generated information page does not use `.theme-api-markdown`, so it
+ needs a small page-specific layer for its version, export, and security
+ scheme components.
+ ============================================================ */
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .theme-doc-version-badge {
+ padding: 0.28rem 0.55rem;
+ background: var(--ph-sidebar-active-bg);
+ border: 1px solid rgba(0, 77, 201, 0.2);
+ border-radius: 999px;
+ color: var(--ifm-color-primary);
+ font-family: var(--ifm-font-family-monospace);
+ font-size: 0.7rem;
+ font-weight: 600;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api'] .export-button {
+ padding: 0.42rem 0.8rem;
+ background: transparent;
+ border: 1px solid var(--ph-gray-300);
+ border-radius: var(--ph-radius-md);
+ color: var(--ifm-color-primary);
+ font-family: var(--ifm-font-family-monospace);
+ font-size: 0.72rem;
+ font-weight: 600;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .export-button:hover {
+ background: var(--ph-sidebar-active-bg);
+ border-color: rgba(0, 77, 201, 0.35);
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .export-button {
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi__heading {
+ margin-top: 0.75rem;
+ margin-bottom: 0.75rem !important;
+ font-size: clamp(2.5rem, 4vw, 3rem);
+ line-height: 1.08;
+ letter-spacing: -0.035em;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi__heading
+ + p {
+ max-width: 760px;
+ font-size: 1.05rem;
+ line-height: 1.65;
+ color: var(--ifm-color-emphasis-800);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__heading {
+ margin-top: 2.5rem;
+ margin-bottom: 1rem;
+ padding-top: 1.5rem;
+ border-top: 1px solid var(--ifm-toc-border-color);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container {
+ overflow: hidden;
+ background: var(--ifm-background-surface-color);
+ border: 1px solid var(--ph-gray-200);
+ border-radius: var(--ph-radius-lg);
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container {
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-tabs-container {
+ padding: 0.65rem;
+ background: var(--ph-gray-50);
+ border-bottom: 1px solid var(--ph-gray-200);
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-tabs-container {
+ background: #151b27;
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__security-schemes {
+ width: 100%;
+ gap: 0.4rem;
+ padding: 0;
+ background: transparent;
+ border: 0;
+ border-radius: 0;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__security-schemes
+ .openapi-tabs__schema-item {
+ min-height: 34px;
+ margin-right: 0;
+ padding: 0.5rem 0.75rem;
+ background: transparent;
+ border: 1px solid var(--ph-gray-200);
+ border-radius: var(--ph-radius-md);
+ color: var(--ifm-color-emphasis-700);
+ font-size: 0.74rem;
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__security-schemes
+ .openapi-tabs__schema-item {
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__security-schemes
+ .openapi-tabs__schema-item::before {
+ display: none;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__security-schemes
+ .openapi-tabs__schema-item.active {
+ background: var(--ifm-background-surface-color);
+ border-color: rgba(0, 77, 201, 0.4);
+ color: var(--ifm-color-primary);
+ box-shadow: 0 1px 2px rgba(3, 13, 29, 0.06);
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__security-schemes
+ .openapi-tabs__schema-item.active {
+ background: var(--ifm-background-color);
+ border-color: rgba(77, 139, 255, 0.5);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ > .margin-top--md {
+ margin-top: 0 !important;
+ padding: 1.25rem;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ table {
+ display: table;
+ width: 100%;
+ margin: 1rem 0 0;
+ table-layout: fixed;
+ border-color: var(--ph-gray-200);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ tbody {
+ display: table-row-group;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ tr {
+ background: transparent;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ th {
+ width: 42%;
+ background: var(--ph-gray-50);
+ color: var(--ifm-color-emphasis-800);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ th,
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ td {
+ padding: 0.8rem 1rem;
+ border-color: var(--ph-gray-200);
+ vertical-align: middle;
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ table,
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ th,
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ td {
+ border-color: var(--ifm-color-emphasis-300);
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ th {
+ background: #151b27;
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .col--12.markdown
+ > div:last-of-type {
+ margin-top: 2rem;
+ padding: 1.1rem 1.25rem;
+ background: var(--ph-gray-50);
+ border: 1px solid var(--ph-gray-200);
+ border-left: 3px solid var(--ifm-color-primary);
+ border-radius: var(--ph-radius-lg);
+}
+
+html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .col--12.markdown
+ > div:last-of-type
+ h3 {
+ margin-top: 0;
+}
+
+[data-theme='dark'][class*='docs-doc-id-api-reference/payhere-rest-api']
+ .col--12.markdown
+ > div:last-of-type {
+ background: #151b27;
+ border-color: var(--ifm-color-emphasis-300);
+ border-left-color: var(--ifm-color-primary);
+}
+
+@media (max-width: 576px) {
+ html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi__heading {
+ font-size: 2.25rem;
+ }
+
+ html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-tabs-container {
+ overflow-x: auto;
+ }
+
+ html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__security-schemes {
+ width: max-content;
+ }
+
+ html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ th,
+ html[class*='docs-doc-id-api-reference/payhere-rest-api']
+ .openapi-tabs__schema-container
+ td {
+ display: block;
+ width: 100%;
+ }
+}
diff --git a/src/pages/index.js b/src/pages/index.js
index 5ca019d..b8167f8 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -93,7 +93,7 @@ const ROUTES = [
description:
"Full control over payments, plans, subscriptions and refunds from your own backend.",
effort: "Developer",
- to: "/docs/api-auth",
+ to: "/docs/api-reference/payhere-rest-api",
},
];
@@ -135,7 +135,10 @@ function Hero() {
Get started
-
+
API reference
diff --git a/vercel.json b/vercel.json
index d46396d..e6e4deb 100644
--- a/vercel.json
+++ b/vercel.json
@@ -1,6 +1,89 @@
{
+ "$schema": "https://openapi.vercel.sh/vercel.json",
"buildCommand": "yarn build",
"outputDirectory": "build",
"installCommand": "yarn install",
- "framework": "docusaurus-2"
+ "framework": "docusaurus-2",
+ "redirects": [
+ {
+ "source": "/docs/api-auth",
+ "destination": "/docs/api-reference/payhere-rest-api#authentication",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-current-company-show",
+ "destination": "/docs/api-reference/get-current-company",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-current-company-update",
+ "destination": "/docs/api-reference/update-current-company",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-current-company-stats",
+ "destination": "/docs/api-reference/get-current-company-stats",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-customers",
+ "destination": "/docs/api-reference/list-customers",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-customer-show",
+ "destination": "/docs/api-reference/get-customer",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-payments",
+ "destination": "/docs/api-reference/list-payments",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-payment-show",
+ "destination": "/docs/api-reference/get-payment",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-plans",
+ "destination": "/docs/api-reference/list-plans",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-plans-create",
+ "destination": "/docs/api-reference/create-plan",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-plans-update",
+ "destination": "/docs/api-reference/update-plan",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-refunds",
+ "destination": "/docs/api-reference/create-refund",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-subscriptions",
+ "destination": "/docs/api-reference/list-subscriptions",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-subscription-show",
+ "destination": "/docs/api-reference/get-subscription",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-subscription-destroy",
+ "destination": "/docs/api-reference/cancel-subscription",
+ "statusCode": 301
+ },
+ {
+ "source": "/docs/api-user",
+ "destination": "/docs/api-reference/get-current-user",
+ "statusCode": 301
+ }
+ ]
}
diff --git a/yarn.lock b/yarn.lock
index 7dbafe4..3837c36 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -183,6 +183,14 @@
dependencies:
"@algolia/client-common" "5.56.0"
+"@apidevtools/json-schema-ref-parser@^15.3.3":
+ version "15.5.2"
+ resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-15.5.2.tgz#ecdf9aca202fa583dc18da07f7f47f7ea28bd677"
+ integrity sha512-B+C9Ok0DF/rjANIUHgwcV5/d4C72MB7f2IbKFL8jDGcGq2qn3yr893s8vAn2kbhmyaelAin0JK8EKF9P1+y7aQ==
+ dependencies:
+ js-yaml "^5.2.2"
+ undici "^6.28.0"
+
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.29.7":
version "7.29.7"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7"
@@ -1051,7 +1059,7 @@
"@babel/plugin-transform-modules-commonjs" "^7.29.7"
"@babel/plugin-transform-typescript" "^7.29.7"
-"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9":
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.25.9":
version "7.29.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.7.tgz#12022450c45a4da6d8d8287b18a4ff2ddb23f768"
integrity sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==
@@ -1980,6 +1988,16 @@
utility-types "^3.10.0"
webpack "^5.88.1"
+"@exodus/schemasafe@^1.0.0-rc.2":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f"
+ integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==
+
+"@faker-js/faker@5.5.3":
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-5.5.3.tgz#18e3af6b8eae7984072bbeb0c0858474d7c4cefe"
+ integrity sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==
+
"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
version "9.3.0"
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
@@ -1992,6 +2010,11 @@
dependencies:
"@hapi/hoek" "^9.0.0"
+"@hookform/error-message@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@hookform/error-message/-/error-message-2.0.1.tgz#6a37419106e13664ad6a29c9dae699ae6cd276b8"
+ integrity sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg==
+
"@jest/schemas@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
@@ -2011,7 +2034,7 @@
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
-"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
+"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
version "0.3.13"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
@@ -2283,6 +2306,89 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@parcel/watcher-android-arm64@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz#99aaa3223d43807c9340af439cad7e9b6d26ada6"
+ integrity sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==
+
+"@parcel/watcher-darwin-arm64@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz#024496e586b4744f09ce532bbe89fe38ef02a64e"
+ integrity sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==
+
+"@parcel/watcher-darwin-x64@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz#a4621df1359a93d39a332d9bab5ff09016a0608f"
+ integrity sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==
+
+"@parcel/watcher-freebsd-x64@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz#7f565ed1a5b3a5e604e6a4799121518265d62a3d"
+ integrity sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==
+
+"@parcel/watcher-linux-arm-glibc@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz#ad7d3825e67b81999165da42593022045abc0889"
+ integrity sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==
+
+"@parcel/watcher-linux-arm-musl@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz#fe7d1cccb2c483215c090e938cf5cf404d2f9a8c"
+ integrity sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==
+
+"@parcel/watcher-linux-arm64-glibc@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz#7e239dcb4646c4c79f006a7131a48238249530da"
+ integrity sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==
+
+"@parcel/watcher-linux-arm64-musl@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz#c58b8d9c6d8d81594be00dd83aab741c1aaf7e0e"
+ integrity sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==
+
+"@parcel/watcher-linux-x64-glibc@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz#5184fa9a770478d86e56875f4ee163a0abdc8791"
+ integrity sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==
+
+"@parcel/watcher-linux-x64-musl@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz#2d1c55aa7246cbc7670e2612058a8a542c9cf246"
+ integrity sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==
+
+"@parcel/watcher-win32-arm64@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz#15e09432040fee9e2213aa9c10ed589012526def"
+ integrity sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==
+
+"@parcel/watcher-win32-x64@2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz#9bee199a2a4accd557b451ac2c1c793f305ae012"
+ integrity sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==
+
+"@parcel/watcher@^2.4.1":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.6.0.tgz#99661f6220070b76a766aba6b7e313a087a1be4f"
+ integrity sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==
+ dependencies:
+ detect-libc "^2.0.3"
+ is-glob "^4.0.3"
+ node-addon-api "^7.0.0"
+ picomatch "^4.0.4"
+ optionalDependencies:
+ "@parcel/watcher-android-arm64" "2.6.0"
+ "@parcel/watcher-darwin-arm64" "2.6.0"
+ "@parcel/watcher-darwin-x64" "2.6.0"
+ "@parcel/watcher-freebsd-x64" "2.6.0"
+ "@parcel/watcher-linux-arm-glibc" "2.6.0"
+ "@parcel/watcher-linux-arm-musl" "2.6.0"
+ "@parcel/watcher-linux-arm64-glibc" "2.6.0"
+ "@parcel/watcher-linux-arm64-musl" "2.6.0"
+ "@parcel/watcher-linux-x64-glibc" "2.6.0"
+ "@parcel/watcher-linux-x64-musl" "2.6.0"
+ "@parcel/watcher-win32-arm64" "2.6.0"
+ "@parcel/watcher-win32-x64" "2.6.0"
+
"@peculiar/asn1-cms@^2.6.0", "@peculiar/asn1-cms@^2.9.0":
version "2.9.0"
resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.9.0.tgz#3b7f6c02bc0d05bb742afe1c921b4cb62f87c9d0"
@@ -2439,6 +2545,57 @@
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1"
integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==
+"@redocly/ajv@^8.18.3":
+ version "8.18.3"
+ resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.18.3.tgz#a925753d9a33375219f1b2ba91aef320f9929577"
+ integrity sha512-l42u0of3hY98sN2A+M4qTX1O/KrpgGH32Hu9kP2GtHyD5Dfqq86PKFLe5dwaD8DEnNmlOlll2BAmeEtf0DaySg==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ fast-uri "^3.0.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+
+"@redocly/cli@2.51.0":
+ version "2.51.0"
+ resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-2.51.0.tgz#b68ca981bb9dbd78b06d6012f7f77a9d187123ef"
+ integrity sha512-X4zaTTFA7V3T1s7CVdeqU2pcFVxZtQ5FKQDoW0eUurb6ntD+5XWqPr57gr55XaLYA1zrUCKvnZpN4Tr2VUBkBg==
+
+"@redocly/config@^0.55.0":
+ version "0.55.0"
+ resolved "https://registry.yarnpkg.com/@redocly/config/-/config-0.55.0.tgz#25e95cb71c8ebbc1a792076975dec1a03f4bea4b"
+ integrity sha512-PlaCpehzQoe6R9YksDI5gW4mfTA2UfnpCGldXXs7/axeyPdAK/T2UpfsSD9sOedKaq6VF9jtE9qXmnH71CAclg==
+ dependencies:
+ json-schema-to-ts "2.7.2"
+
+"@redocly/openapi-core@^2.25.2":
+ version "2.51.0"
+ resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-2.51.0.tgz#3b1c0881e176a99516f62ab5764c730aeacd3ef8"
+ integrity sha512-jriOoa3jbQSnP4jQ+nSpcttvH2A3YG5uDl1i9K57mfVEQdGn1QSf8o/076qAD2rCYMJ4S419H+zXE7RCS6bhtA==
+ dependencies:
+ "@redocly/ajv" "^8.18.3"
+ "@redocly/config" "^0.55.0"
+ ajv "npm:@redocly/ajv@^8.18.3"
+ ajv-formats "^3.0.1"
+ colorette "^1.2.0"
+ graphql "^16.14.1"
+ js-levenshtein "^1.1.6"
+ js-yaml "^5.2.2"
+ picomatch "^4.0.4"
+ pluralize "^8.0.0"
+ yaml-ast-parser "0.0.43"
+
+"@reduxjs/toolkit@^2.8.2":
+ version "2.12.0"
+ resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.12.0.tgz#e62787503a38561e04bb8f39e29ca8db689590f9"
+ integrity sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==
+ dependencies:
+ "@standard-schema/spec" "^1.0.0"
+ "@standard-schema/utils" "^0.3.0"
+ immer "^11.0.0"
+ redux "^5.0.1"
+ redux-thunk "^3.1.0"
+ reselect "^5.1.0"
+
"@sideway/address@^4.1.5":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
@@ -2480,6 +2637,16 @@
micromark-util-character "^1.1.0"
micromark-util-symbol "^1.0.1"
+"@standard-schema/spec@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8"
+ integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==
+
+"@standard-schema/utils@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/utils/-/utils-0.3.0.tgz#3d5e608f16c2390c10528e98e59aef6bf73cae7b"
+ integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==
+
"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
version "8.0.0"
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
@@ -2889,6 +3056,11 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4"
integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
+"@types/use-sync-external-store@^0.0.6":
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc"
+ integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==
+
"@types/ws@^8.5.10":
version "8.18.1"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9"
@@ -3082,13 +3254,25 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^4.0.0"
-ajv-formats@^2.1.1:
+ajv-draft-04@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8"
+ integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==
+
+ajv-formats@2.1.1, ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
dependencies:
ajv "^8.0.0"
+ajv-formats@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578"
+ integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==
+ dependencies:
+ ajv "^8.0.0"
+
ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
@@ -3111,7 +3295,7 @@ ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^8.0.0, ajv@^8.9.0:
+ajv@^8.0.0, ajv@^8.11.0, ajv@^8.9.0:
version "8.20.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9"
integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==
@@ -3121,6 +3305,16 @@ ajv@^8.0.0, ajv@^8.9.0:
json-schema-traverse "^1.0.0"
require-from-string "^2.0.2"
+"ajv@npm:@redocly/ajv@^8.18.3":
+ version "8.18.3"
+ resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.18.3.tgz#a925753d9a33375219f1b2ba91aef320f9929577"
+ integrity sha512-l42u0of3hY98sN2A+M4qTX1O/KrpgGH32Hu9kP2GtHyD5Dfqq86PKFLe5dwaD8DEnNmlOlll2BAmeEtf0DaySg==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ fast-uri "^3.0.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+
algoliasearch-helper@^3.26.0:
version "3.29.3"
resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.29.3.tgz#dc21f119320acbdd5890a21021846b5730d11e03"
@@ -3148,6 +3342,13 @@ algoliasearch@^5.37.0:
"@algolia/requester-fetch" "5.56.0"
"@algolia/requester-node-http" "5.56.0"
+allof-merge@^0.6.6:
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/allof-merge/-/allof-merge-0.6.8.tgz#5813a23c860407d279f85053ef541c8f946c5021"
+ integrity sha512-RJrHVDqITsU1kjE2L7s1hy4AYZSTlO1m9jTleYhVCEOfOpbbygRGfcEgrp+bW3oX/PcMUwVkt6MSJyXoyI6lRA==
+ dependencies:
+ json-crawl "^0.5.3"
+
ansi-align@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
@@ -3170,7 +3371,7 @@ ansi-regex@^6.2.2:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.3.0.tgz#247c8e7b70a1a43b10ce14c0226fcbf58e8815d5"
integrity sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==
-ansi-styles@^4.1.0:
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
@@ -3187,6 +3388,11 @@ ansis@^3.2.0:
resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7"
integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -3229,6 +3435,11 @@ astring@^1.8.0:
resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef"
integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==
+async@3.2.6, async@^3.2.2:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
+ integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
+
autoprefixer@^10.4.19, autoprefixer@^10.4.23:
version "10.5.4"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.5.4.tgz#3b7dd848b4155514a95ad1f6ce598844bea09697"
@@ -3297,6 +3508,11 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
baseline-browser-mapping@^2.11.12:
version "2.11.14"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.14.tgz#d51bb92285608b0e6356841a2eea76842a771d52"
@@ -3407,6 +3623,14 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
bundle-name@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889"
@@ -3473,6 +3697,11 @@ call-bound@^1.0.2, call-bound@^1.0.3:
call-bind-apply-helpers "^1.0.2"
get-intrinsic "^1.3.0"
+call-me-maybe@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa"
+ integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==
+
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -3524,7 +3753,7 @@ chalk@^4.0.0, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^5.0.1, chalk@^5.2.0:
+chalk@^5.0.1, chalk@^5.2.0, chalk@^5.6.2:
version "5.6.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea"
integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==
@@ -3554,6 +3783,11 @@ character-reference-invalid@^2.0.0:
resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9"
integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==
+charset@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd"
+ integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==
+
cheerio-select@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
@@ -3594,6 +3828,13 @@ chokidar@^3.5.3, chokidar@^3.6.0:
optionalDependencies:
fsevents "~2.3.2"
+chokidar@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-5.0.0.tgz#949c126a9238a80792be9a0265934f098af369a5"
+ integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==
+ dependencies:
+ readdirp "^5.0.0"
+
chrome-trace-event@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b"
@@ -3630,6 +3871,15 @@ cli-table3@^0.6.3:
optionalDependencies:
"@colors/colors" "1.5.0"
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
clone-deep@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
@@ -3639,7 +3889,7 @@ clone-deep@^4.0.1:
kind-of "^6.0.2"
shallow-clone "^3.0.0"
-clsx@^2.0.0:
+clsx@^2.0.0, clsx@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
@@ -3666,6 +3916,11 @@ colord@^2.9.3:
resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
+colorette@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
+ integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
+
colorette@^2.0.10:
version "2.0.20"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
@@ -3681,15 +3936,20 @@ comma-separated-tokens@^2.0.0:
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
+commander@2.20.3, commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
commander@^10.0.0:
version "10.0.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
-commander@^2.20.0:
- version "2.20.3"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
commander@^5.1.0:
version "5.1.0"
@@ -3731,6 +3991,25 @@ compression@^1.8.1:
safe-buffer "5.2.1"
vary "~1.1.2"
+compute-gcd@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f"
+ integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==
+ dependencies:
+ validate.io-array "^1.0.3"
+ validate.io-function "^1.0.2"
+ validate.io-integer-array "^1.0.0"
+
+compute-lcm@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23"
+ integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==
+ dependencies:
+ compute-gcd "^1.2.1"
+ validate.io-array "^1.0.3"
+ validate.io-function "^1.0.2"
+ validate.io-integer-array "^1.0.0"
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -3850,6 +4129,11 @@ cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+crypto-js@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631"
+ integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==
+
crypto-random-string@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2"
@@ -4145,11 +4429,23 @@ destroy@1.2.0, destroy@~1.2.0:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+detect-libc@^2.0.3:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad"
+ integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==
+
detect-node@^2.0.4:
version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+detect-package-manager@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-3.0.2.tgz#ca34261ab84198072580e93ae86582c575428da9"
+ integrity sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==
+ dependencies:
+ execa "^5.1.1"
+
detect-port@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-2.1.0.tgz#03d72644891fa451ca5609b83107a8a0ebd03f91"
@@ -4178,6 +4474,68 @@ dns-packet@^5.2.2:
dependencies:
"@leichtgewicht/ip-codec" "^2.0.1"
+docusaurus-plugin-openapi-docs@5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/docusaurus-plugin-openapi-docs/-/docusaurus-plugin-openapi-docs-5.2.0.tgz#8318ec90cd21fed023be57696211af7d72fd81db"
+ integrity sha512-MjrfRAMB64uvdxRVz6L9AXWe4QFjCdoBAzYs306yyI3nnXHsFj2lv2FnLA90JV9CAUZaGiYMvvkzBo2Nrkq/9w==
+ dependencies:
+ "@apidevtools/json-schema-ref-parser" "^15.3.3"
+ "@redocly/openapi-core" "^2.25.2"
+ allof-merge "^0.6.6"
+ chalk "^5.6.2"
+ clsx "^2.1.1"
+ fs-extra "^11.3.0"
+ json-pointer "^0.6.2"
+ json5 "^2.2.3"
+ lodash "^4.17.21"
+ mustache "^4.2.0"
+ openapi-to-postmanv2 "^6.0.0"
+ postman-collection "^5.0.2"
+ slugify "^1.6.6"
+ swagger2openapi "^7.0.8"
+ xml-formatter "^3.6.6"
+
+docusaurus-plugin-sass@0.2.6:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.6.tgz#b4930a1fe1cc7bcead639bb1bee38bce0ffd073d"
+ integrity sha512-2hKQQDkrufMong9upKoG/kSHJhuwd+FA3iAe/qzS/BmWpbIpe7XKmq5wlz4J5CJaOPu4x+iDJbgAxZqcoQf0kg==
+ dependencies:
+ sass-loader "^16.0.2"
+
+docusaurus-theme-openapi-docs@5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/docusaurus-theme-openapi-docs/-/docusaurus-theme-openapi-docs-5.2.0.tgz#6d93a74e2e3cf0ae77d24e1c4144bd2e74a52115"
+ integrity sha512-L0b80LzaMUfr76a9EQXRPCf8nxkEz8Xo6Aknnke1UeE2oXsgoiVki6U+RTE7GmJRjO8zSNKXyckGmGmqqWuHeA==
+ dependencies:
+ "@hookform/error-message" "^2.0.1"
+ "@reduxjs/toolkit" "^2.8.2"
+ allof-merge "^0.6.6"
+ buffer "^6.0.3"
+ clsx "^2.1.1"
+ copy-text-to-clipboard "^3.2.0"
+ crypto-js "^4.2.0"
+ file-saver "^2.0.5"
+ lodash "^4.17.21"
+ pako "^3.0.1"
+ path-browserify "^1.0.1"
+ postman-code-generators "^2.0.0"
+ postman-collection "^5.0.2"
+ prism-react-renderer "^2.4.1"
+ process "^0.11.10"
+ react-hook-form "^7.59.0"
+ react-live "^4.1.8"
+ react-magic-dropzone "^1.0.1"
+ react-markdown "^10.1.0"
+ react-modal "^3.16.3"
+ react-redux "^9.2.0"
+ rehype-raw "^7.0.0"
+ remark-gfm "4.0.1"
+ sass "^1.89.2"
+ sass-loader "^17.0.0"
+ unist-util-visit "^5.0.0"
+ url "^0.11.4"
+ xml-formatter "^3.6.6"
+
dom-converter@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
@@ -4366,6 +4724,11 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
dependencies:
es-errors "^1.3.0"
+es6-promise@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+ integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==
+
esast-util-from-estree@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad"
@@ -4545,6 +4908,11 @@ execa@^5.1.1:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
+exenv@^1.2.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
+ integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==
+
express@^4.22.1:
version "4.22.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.22.2.tgz#c17ae0981e5efc24b22272f0e041c4662503b700"
@@ -4615,6 +4983,11 @@ fast-json-stable-stringify@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+fast-safe-stringify@^2.0.7:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
+ integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
+
fast-uri@^3.0.1:
version "3.1.5"
resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.5.tgz#610f37419a030270430cecd68d74e3d4d96725d0"
@@ -4641,6 +5014,11 @@ faye-websocket@^0.11.3:
dependencies:
websocket-driver ">=0.5.1"
+fdir@^6.5.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
+ integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
+
feed@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e"
@@ -4656,6 +5034,16 @@ file-loader@^6.2.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
+file-saver@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38"
+ integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
+
+file-type@3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+ integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==
+
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
@@ -4702,6 +5090,11 @@ follow-redirects@^1.0.0:
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc"
integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==
+foreach@^2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e"
+ integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==
+
form-data-encoder@^2.1.2:
version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
@@ -4727,7 +5120,7 @@ fresh@~0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
-fs-extra@^11.1.1, fs-extra@^11.2.0:
+fs-extra@^11.1.1, fs-extra@^11.2.0, fs-extra@^11.3.0:
version "11.4.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.4.0.tgz#f88ed6d180ac9e14b61b08e679468f0b1b6b4730"
integrity sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==
@@ -4736,6 +5129,11 @@ fs-extra@^11.1.1, fs-extra@^11.2.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
@@ -4751,6 +5149,11 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
@@ -4809,6 +5212,18 @@ glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1:
resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413"
integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==
+glob@^7.0.0:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
global-dirs@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485"
@@ -4871,6 +5286,18 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11,
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+graphlib@2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da"
+ integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==
+ dependencies:
+ lodash "^4.17.15"
+
+graphql@^16.14.1:
+ version "16.14.2"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.14.2.tgz#83faf25869e3df727cc855161db5da85b0e5b2c0"
+ integrity sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==
+
gzip-size@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
@@ -5096,6 +5523,11 @@ html-tags@^3.3.1:
resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
+html-url-attributes@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87"
+ integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==
+
html-void-elements@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7"
@@ -5189,6 +5621,16 @@ http-proxy@^1.18.1:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
+http-reasons@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/http-reasons/-/http-reasons-0.1.0.tgz#a953ca670078669dde142ce899401b9d6e85d3b4"
+ integrity sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==
+
+http2-client@^1.2.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181"
+ integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==
+
http2-wrapper@^2.1.10:
version "2.2.1"
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a"
@@ -5207,6 +5649,13 @@ hyperdyperid@^1.2.0:
resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b"
integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==
+iconv-lite@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
iconv-lite@~0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -5219,6 +5668,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0:
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore@^5.2.0, ignore@^5.2.4:
version "5.3.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
@@ -5229,6 +5683,16 @@ image-size@^2.0.2:
resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc"
integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==
+immer@^11.0.0:
+ version "11.1.18"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-11.1.18.tgz#87d9bced1e25157dc23bced66811de89460ec8f3"
+ integrity sha512-EQyQtLiYW029lyoczMl/Hh4Xu7cDecSc58JRYpHyL4tIAu3eqd1yJzQX04d2BZHDkzFFvm6qJEJWOtfDSWAXbQ==
+
+immutable@^5.1.5:
+ version "5.1.9"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.9.tgz#ac23c3a01992ab665e14ac9ffff298f28cd74a0c"
+ integrity sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==
+
import-fresh@^3.3.0:
version "3.3.1"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
@@ -5257,7 +5721,15 @@ infima@0.2.0-alpha.45:
resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466"
integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==
-inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4:
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -5277,6 +5749,11 @@ inline-style-parser@0.2.7:
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz#b1fc68bfc0313b8685745e4464e37f9376b9c909"
integrity sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==
+interpret@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
@@ -5538,11 +6015,23 @@ joi@^17.9.2:
"@sideway/formula" "^3.0.1"
"@sideway/pinpoint" "^2.0.0"
+js-levenshtein@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
+ integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+js-yaml@4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.0.tgz#d1900572a7f7cf0b5f540c83673e60bad3436592"
+ integrity sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==
+ dependencies:
+ argparse "^2.0.1"
+
js-yaml@^4.1.0:
version "4.3.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.1.tgz#01216c001d67f48e2cd560d708c7af21090a3848"
@@ -5550,6 +6039,13 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
+js-yaml@^5.2.2:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-5.4.1.tgz#4629d91d4b4551f300435f0e4127899710f816fb"
+ integrity sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==
+ dependencies:
+ argparse "^2.0.1"
+
jsesc@^3.0.2, jsesc@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
@@ -5560,11 +6056,48 @@ json-buffer@3.0.1:
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+json-crawl@^0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/json-crawl/-/json-crawl-0.5.3.tgz#3a2e1d308d4fc5a444902f1f94f4a9e03d584c6b"
+ integrity sha512-BEjjCw8c7SxzNK4orhlWD5cXQh8vCk2LqDr4WgQq4CV+5dvopeYwt1Tskg67SuSLKvoFH5g0yuYtg7rcfKV6YA==
+
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+json-pointer@0.6.2, json-pointer@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd"
+ integrity sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==
+ dependencies:
+ foreach "^2.0.4"
+
+json-schema-compare@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56"
+ integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==
+ dependencies:
+ lodash "^4.17.4"
+
+json-schema-merge-allof@0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz#ed2828cdd958616ff74f932830a26291789eaaf2"
+ integrity sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==
+ dependencies:
+ compute-lcm "^1.1.2"
+ json-schema-compare "^0.2.2"
+ lodash "^4.17.20"
+
+json-schema-to-ts@2.7.2:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/json-schema-to-ts/-/json-schema-to-ts-2.7.2.tgz#e8df41d7153e5517f0e68dbe57be12bb3609d6d5"
+ integrity sha512-R1JfqKqbBR4qE8UyBR56Ms30LL62/nlhoz+1UkfI/VE7p54Awu919FZ6ZUPG8zIa3XB65usPJgr1ONVncUGSaQ==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ "@types/json-schema" "^7.0.9"
+ ts-algebra "^1.2.0"
+
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@@ -5636,6 +6169,11 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+liquid-json@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/liquid-json/-/liquid-json-0.3.1.tgz#9155a18136d8a6b2615e5f16f9a2448ab6b50eea"
+ integrity sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==
+
loader-utils@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
@@ -5667,7 +6205,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
-lodash@^4.17.20, lodash@^4.17.21:
+lodash@4.18.1, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
version "4.18.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c"
integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==
@@ -6430,6 +6968,13 @@ mime-db@~1.33.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
+mime-format@2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/mime-format/-/mime-format-2.0.2.tgz#77fa304b9aedb21439c4db010305146edbd8a912"
+ integrity sha512-Y5ERWVcyh3sby9Fx2U5F1yatiTFjNsqF5NltihTWI9QgNtr5o3dbCZdcKa1l2wyfhnwwoP9HGNxga7LqZLA6gw==
+ dependencies:
+ charset "^1.0.0"
+
mime-types@2.1.18:
version "2.1.18"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
@@ -6456,6 +7001,11 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+mime@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
+ integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
+
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -6484,7 +7034,7 @@ minimalistic-assert@^1.0.0:
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-minimatch@3.1.5:
+minimatch@3.1.5, minimatch@^3.1.1:
version "3.1.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e"
integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
@@ -6529,6 +7079,20 @@ multicast-dns@^7.2.5:
dns-packet "^5.2.2"
thunky "^1.0.2"
+mustache@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
+ integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
nanoid@^3.3.17:
version "3.3.18"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.18.tgz#f66a2de1199ffde0fcf21c8a5f13106b1c081913"
@@ -6549,6 +7113,11 @@ neo-async@^2.6.2:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+neotraverse@0.6.15:
+ version "0.6.15"
+ resolved "https://registry.yarnpkg.com/neotraverse/-/neotraverse-0.6.15.tgz#dc4abb64700c52440f13bc53635b559862420360"
+ integrity sha512-HZpdkco+JeXq0G+WWpMJ4NsX3pqb5O7eR9uGz3FfoFt+LYzU8iRWp49nJtud6hsDoywM8tIrDo3gjgmOqJA8LA==
+
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -6557,6 +7126,11 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
+node-addon-api@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558"
+ integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
+
node-emoji@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0"
@@ -6567,6 +7141,27 @@ node-emoji@^2.1.0:
emojilib "^2.4.0"
skin-tone "^2.0.0"
+node-fetch-h2@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac"
+ integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==
+ dependencies:
+ http2-client "^1.2.5"
+
+node-fetch@^2.6.1:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+ integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+ dependencies:
+ whatwg-url "^5.0.0"
+
+node-readfiles@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d"
+ integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==
+ dependencies:
+ es6-promise "^3.2.1"
+
node-releases@^2.0.53:
version "2.0.53"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.53.tgz#0fe5ad8a7935e075172f574e56f0c20f07fa41af"
@@ -6609,11 +7204,74 @@ null-loader@^4.0.1:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
-object-assign@^4.1.1:
+oas-kit-common@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535"
+ integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==
+ dependencies:
+ fast-safe-stringify "^2.0.7"
+
+oas-linter@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e"
+ integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==
+ dependencies:
+ "@exodus/schemasafe" "^1.0.0-rc.2"
+ should "^13.2.1"
+ yaml "^1.10.0"
+
+oas-resolver-browser@2.5.6:
+ version "2.5.6"
+ resolved "https://registry.yarnpkg.com/oas-resolver-browser/-/oas-resolver-browser-2.5.6.tgz#1974db66d594fa8c67d3aa866b46b9e2156a8b55"
+ integrity sha512-Jw5elT/kwUJrnGaVuRWe1D7hmnYWB8rfDDjBnpQ+RYY/dzAewGXeTexXzt4fGEo6PUE4eqKqPWF79MZxxvMppA==
+ dependencies:
+ node-fetch-h2 "^2.3.0"
+ oas-kit-common "^1.0.8"
+ path-browserify "^1.0.1"
+ reftools "^1.1.9"
+ yaml "^1.10.0"
+ yargs "^17.0.1"
+
+oas-resolver@^2.5.6:
+ version "2.5.6"
+ resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b"
+ integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==
+ dependencies:
+ node-fetch-h2 "^2.3.0"
+ oas-kit-common "^1.0.8"
+ reftools "^1.1.9"
+ yaml "^1.10.0"
+ yargs "^17.0.1"
+
+oas-schema-walker@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22"
+ integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==
+
+oas-validator@^5.0.8:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28"
+ integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ oas-kit-common "^1.0.8"
+ oas-linter "^3.2.2"
+ oas-resolver "^2.5.6"
+ oas-schema-walker "^1.1.5"
+ reftools "^1.1.9"
+ should "^13.2.1"
+ yaml "^1.10.0"
+
+object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+object-hash@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+ integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
object-inspect@^1.13.3, object-inspect@^1.13.4:
version "1.13.4"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
@@ -6653,6 +7311,13 @@ on-headers@~1.1.0:
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65"
integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
@@ -6679,6 +7344,35 @@ open@^8.4.0:
is-docker "^2.1.1"
is-wsl "^2.2.0"
+openapi-to-postmanv2@^6.0.0:
+ version "6.3.3"
+ resolved "https://registry.yarnpkg.com/openapi-to-postmanv2/-/openapi-to-postmanv2-6.3.3.tgz#b249c923a3093f316bc0e191d92abf49bb3736b9"
+ integrity sha512-o0u6qqMMRLt7eAyFBpL/lCresQ1VqQFGe6/iPMBvNkWDXrpgGo5jo+YnP1e0MwF3tdUKLfkHssufGWMdojpPLg==
+ dependencies:
+ ajv "^8.11.0"
+ ajv-draft-04 "1.0.0"
+ ajv-formats "2.1.1"
+ async "3.2.6"
+ commander "2.20.3"
+ graphlib "2.1.8"
+ js-yaml "4.3.0"
+ json-pointer "0.6.2"
+ json-schema-merge-allof "0.8.1"
+ lodash "4.18.1"
+ neotraverse "0.6.15"
+ oas-resolver-browser "2.5.6"
+ object-hash "3.0.0"
+ openapi-types "^12.1.3"
+ path-browserify "1.0.1"
+ postman-collection "^5.0.0"
+ swagger2openapi "7.0.8"
+ yaml "1.10.2"
+
+openapi-types@^12.1.3:
+ version "12.1.3"
+ resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3"
+ integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==
+
opener@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
@@ -6749,6 +7443,11 @@ package-json@^8.1.0:
registry-url "^6.0.0"
semver "^7.3.7"
+pako@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-3.0.1.tgz#3156f8fa86e3cc2ae5a36369475b14d4f05696ce"
+ integrity sha512-GupotUUI0mlhugKjUs4bjOwLt3nrehy9Ys2dxC0GtgVef5cnKggkDMmf2bq2poCCuVXopWPmqsc9VDT2iJUy+w==
+
param-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
@@ -6820,11 +7519,21 @@ pascal-case@^3.1.2:
no-case "^3.0.4"
tslib "^2.0.3"
+path-browserify@1.0.1, path-browserify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
+ integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
+
path-exists@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7"
integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
path-is-inside@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
@@ -6872,6 +7581,16 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601"
integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==
+picomatch@^4.0.4:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f"
+ integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==
+
+pirates@^4.0.1:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22"
+ integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==
+
pkg-dir@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11"
@@ -6891,6 +7610,11 @@ pkijs@^3.3.3:
pvutils "^1.1.3"
tslib "^2.8.1"
+pluralize@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
+ integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==
+
postcss-attribute-case-insensitive@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3"
@@ -7455,6 +8179,41 @@ postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.5.4:
picocolors "^1.1.1"
source-map-js "^1.2.1"
+postman-code-generators@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postman-code-generators/-/postman-code-generators-2.1.1.tgz#37d1d612b103d96997a7d0698737d4b006d53e97"
+ integrity sha512-+egQK1Jf9a92QP23vRTKcDLOthIQmI7WI4czEsZq/wgguLMnVHJ26KlT8AVtpAdVw28hqUbHwicerYxRWCfjoA==
+ dependencies:
+ async "^3.2.2"
+ detect-package-manager "^3.0.2"
+ lodash "^4.17.21"
+ postman-collection "^5.0.0"
+ shelljs "^0.8.5"
+
+postman-collection@^5.0.0, postman-collection@^5.0.2:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/postman-collection/-/postman-collection-5.3.1.tgz#0848518f763b88377404c95e67662ba3cd0eef4e"
+ integrity sha512-+ixY4KEGerw3I5dE6obXgXx31na8URU5ODNIA6Rjkbt3/BUpNRk03pxUAZFHr5dDXwCikJSa7pt5o0x1QXT77w==
+ dependencies:
+ "@faker-js/faker" "5.5.3"
+ file-type "3.9.0"
+ http-reasons "0.1.0"
+ iconv-lite "0.6.3"
+ liquid-json "0.3.1"
+ lodash "4.18.1"
+ mime "3.0.0"
+ mime-format "2.0.2"
+ postman-url-encoder "3.0.8"
+ semver "7.7.1"
+ uuid "8.3.2"
+
+postman-url-encoder@3.0.8:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/postman-url-encoder/-/postman-url-encoder-3.0.8.tgz#f4f40c1858301fadc466f0a7825f9bb638857367"
+ integrity sha512-EOgUMBazo7JNP4TDrd64TsooCiWzzo4143Ws8E8WYGEpn2PKpq+S4XRTDhuRTYHm3VKOpUZs7ZYZq7zSDuesqA==
+ dependencies:
+ punycode "^2.3.1"
+
pretty-error@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
@@ -7468,7 +8227,7 @@ pretty-time@^1.1.0:
resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
-prism-react-renderer@^2.3.0:
+prism-react-renderer@^2.3.0, prism-react-renderer@^2.4.0, prism-react-renderer@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f"
integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==
@@ -7486,6 +8245,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
prompts@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@@ -7521,7 +8285,12 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
-punycode@^2.1.0:
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
+
+punycode@^2.1.0, punycode@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
@@ -7545,6 +8314,14 @@ pvutils@^1.1.3, pvutils@^1.1.5:
resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.2.0.tgz#4b5487a9cccd52d275b0538775790a3ca982bc22"
integrity sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==
+qs@^6.12.3:
+ version "6.16.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.16.0.tgz#c22c723a28a920f3aacdce8289fabd43eccb79fd"
+ integrity sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==
+ dependencies:
+ es-define-property "^1.0.1"
+ side-channel "^1.1.1"
+
qs@~6.15.1:
version "6.15.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.3.tgz#76852132a58ed5c7c0ef67e4441b9bb5d6061b3b"
@@ -7628,6 +8405,11 @@ react-fast-compare@^3.2.0:
react-fast-compare "^3.2.0"
shallowequal "^1.1.0"
+react-hook-form@^7.59.0:
+ version "7.87.0"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.87.0.tgz#a9dde90aa71f1e303842d2b8de942160de618b61"
+ integrity sha512-zhFzWvLxNHH+8839OnZcUxgMZw88ah2jZWDWvKWgF3Tpbnd0vKL+dlcuU3nZVWESZQjd81EW8K+wU+cYfYAc0w==
+
react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@@ -7638,6 +8420,20 @@ react-json-view-lite@^2.3.0:
resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz#c7ff011c7cc80e9900abc7aa4916c6a5c6d6c1c6"
integrity sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==
+react-lifecycles-compat@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-live@^4.1.8:
+ version "4.1.8"
+ resolved "https://registry.yarnpkg.com/react-live/-/react-live-4.1.8.tgz#287fb6c5127c2d89a6fe39380278d95cc8e661b6"
+ integrity sha512-B2SgNqwPuS2ekqj4lcxi5TibEcjWkdVyYykBEUBshPAPDQ527x2zPEZg560n8egNtAjUpwXFQm7pcXV65aAYmg==
+ dependencies:
+ prism-react-renderer "^2.4.0"
+ sucrase "^3.35.0"
+ use-editable "^2.3.3"
+
react-loadable-ssr-addon-v5-slorber@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz#bb3791bf481222c63a5bc6b96ee23f68cb5614b9"
@@ -7652,6 +8448,46 @@ react-loadable-ssr-addon-v5-slorber@^1.0.3:
dependencies:
"@types/react" "*"
+react-magic-dropzone@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/react-magic-dropzone/-/react-magic-dropzone-1.0.1.tgz#bfd25b77b57e7a04aaef0a28910563b707ee54df"
+ integrity sha512-0BIROPARmXHpk4AS3eWBOsewxoM5ndk2psYP/JmbCq8tz3uR2LIV1XiroZ9PKrmDRMctpW+TvsBCtWasuS8vFA==
+
+react-markdown@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-10.1.0.tgz#e22bc20faddbc07605c15284255653c0f3bad5ca"
+ integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ "@types/mdast" "^4.0.0"
+ devlop "^1.0.0"
+ hast-util-to-jsx-runtime "^2.0.0"
+ html-url-attributes "^3.0.0"
+ mdast-util-to-hast "^13.0.0"
+ remark-parse "^11.0.0"
+ remark-rehype "^11.0.0"
+ unified "^11.0.0"
+ unist-util-visit "^5.0.0"
+ vfile "^6.0.0"
+
+react-modal@^3.16.3:
+ version "3.16.3"
+ resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.16.3.tgz#c412d41915782e3c261253435d01468e2439b11b"
+ integrity sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==
+ dependencies:
+ exenv "^1.2.0"
+ prop-types "^15.7.2"
+ react-lifecycles-compat "^3.0.0"
+ warning "^4.0.3"
+
+react-redux@^9.2.0:
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.3.0.tgz#a30113bb6d95c0a715d54dda4308d450fca6ce09"
+ integrity sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==
+ dependencies:
+ "@types/use-sync-external-store" "^0.0.6"
+ use-sync-external-store "^1.4.0"
+
react-router-config@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988"
@@ -7714,6 +8550,11 @@ readable-stream@^3.0.6:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readdirp@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-5.1.1.tgz#520bca06f9d1ae1b96cc0800dbe84b983d19422c"
+ integrity sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==
+
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
@@ -7721,6 +8562,13 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
+ dependencies:
+ resolve "^1.1.6"
+
recma-build-jsx@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz#c02f29e047e103d2fab2054954e1761b8ea253c4"
@@ -7761,11 +8609,26 @@ recma-stringify@^1.0.0:
unified "^11.0.0"
vfile "^6.0.0"
+redux-thunk@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3"
+ integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==
+
+redux@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b"
+ integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==
+
reflect-metadata@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b"
integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==
+reftools@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e"
+ integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==
+
regenerate-unicode-properties@^10.2.2:
version "10.2.2"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66"
@@ -7870,7 +8733,7 @@ remark-frontmatter@^5.0.0:
micromark-extension-frontmatter "^2.0.0"
unified "^11.0.0"
-remark-gfm@^4.0.0:
+remark-gfm@4.0.1, remark-gfm@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b"
integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==
@@ -7931,6 +8794,11 @@ renderkid@^3.0.0:
lodash "^4.17.21"
strip-ansi "^6.0.1"
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
require-from-string@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
@@ -7946,6 +8814,11 @@ requires-port@^1.0.0:
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+reselect@^5.1.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.3.0.tgz#0a3e3ed4436bdf2ab7c5e0f392dab2c062595d61"
+ integrity sha512-XGoLeRAVzUTcJ1qkxPQhDJyIZ5d6zzZD9nT7AEZOaaU9UbWclhycElmhO+VD5bFeLuzhPBaOV2oXC8uG35ZSpg==
+
resolve-alpn@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
@@ -7961,7 +8834,7 @@ resolve-pathname@^3.0.0:
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
-resolve@^1.22.11:
+resolve@^1.1.6, resolve@^1.22.11:
version "1.22.12"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f"
integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==
@@ -8020,11 +8893,34 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-"safer-buffer@>= 2.1.2 < 3":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+sass-loader@^16.0.2:
+ version "16.0.8"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.8.tgz#b7eef3b7947b32e2988dd760a2f7f0d547838e6b"
+ integrity sha512-hcov4ZwZJIGbEuyNr9EmiTmZueyrxSToE6GOzoZnq5JM7ecRO7ttyvilPn+VmRsqiP16+VYZzVnGZj/hzZgKBA==
+ dependencies:
+ neo-async "^2.6.2"
+
+sass-loader@^17.0.0:
+ version "17.0.1"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-17.0.1.tgz#4e89d8028b313d713584ac90f6f25fc1256449f7"
+ integrity sha512-pgJMwCuLjVTSIWsv/2luVRXKlCeaViUGcgSe8dx95zMG4hUwqIMFmjbhq29ypFLflJU0GyiJZeLM9iI1n3KYAA==
+
+sass@^1.89.2:
+ version "1.103.1"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.103.1.tgz#13b70f5ff69288db956dc27d27c8fb79f3a27c61"
+ integrity sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw==
+ dependencies:
+ chokidar "^5.0.0"
+ immutable "^5.1.5"
+ source-map-js ">=0.6.2 <2.0.0"
+ optionalDependencies:
+ "@parcel/watcher" "^2.4.1"
+
sax@^1.2.4, sax@^1.5.0:
version "1.6.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.1.tgz#4c23cf608c0b693ab54b4b5888e92cfe977b9843"
@@ -8087,6 +8983,11 @@ semver-diff@^4.0.0:
dependencies:
semver "^7.3.5"
+semver@7.7.1:
+ version "7.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
+ integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
+
semver@^6.3.1:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
@@ -8205,6 +9106,59 @@ shell-quote@^1.8.4:
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.10.0.tgz#482033e192e4f5c07151521ffa03400ec71b1b0f"
integrity sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==
+shelljs@^0.8.5:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
+ integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+should-equal@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3"
+ integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==
+ dependencies:
+ should-type "^1.4.0"
+
+should-format@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1"
+ integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==
+ dependencies:
+ should-type "^1.3.0"
+ should-type-adaptors "^1.0.1"
+
+should-type-adaptors@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a"
+ integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==
+ dependencies:
+ should-type "^1.3.0"
+ should-util "^1.0.0"
+
+should-type@^1.3.0, should-type@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3"
+ integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==
+
+should-util@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28"
+ integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==
+
+should@^13.2.1:
+ version "13.2.3"
+ resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10"
+ integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==
+ dependencies:
+ should-equal "^2.0.0"
+ should-format "^3.0.3"
+ should-type "^1.4.0"
+ should-type-adaptors "^1.0.1"
+ should-util "^1.0.0"
+
side-channel-list@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127"
@@ -8291,6 +9245,11 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+slugify@^1.6.6:
+ version "1.6.9"
+ resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.9.tgz#610957dea21e56b65e3a153215ef7b265715c8e8"
+ integrity sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==
+
snake-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
@@ -8313,7 +9272,7 @@ sort-css-media-queries@2.2.0:
resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c"
integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==
-source-map-js@^1.0.1, source-map-js@^1.2.1:
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -8384,7 +9343,7 @@ std-env@^3.7.0:
resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b"
integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==
-string-width@^4.1.0, string-width@^4.2.0:
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -8433,7 +9392,7 @@ stringify-object@^3.3.0:
is-obj "^1.0.1"
is-regexp "^1.0.0"
-strip-ansi@^6.0.1:
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -8489,6 +9448,19 @@ stylehacks@^6.1.1:
browserslist "^4.23.0"
postcss-selector-parser "^6.0.16"
+sucrase@^3.35.0:
+ version "3.35.1"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.1.tgz#4619ea50393fe8bd0ae5071c26abd9b2e346bfe1"
+ integrity sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.2"
+ commander "^4.0.0"
+ lines-and-columns "^1.1.6"
+ mz "^2.7.0"
+ pirates "^4.0.1"
+ tinyglobby "^0.2.11"
+ ts-interface-checker "^0.1.9"
+
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -8526,6 +9498,23 @@ svgo@^3.0.2, svgo@^3.2.0:
picocolors "^1.0.0"
sax "^1.5.0"
+swagger2openapi@7.0.8, swagger2openapi@^7.0.8:
+ version "7.0.8"
+ resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59"
+ integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ node-fetch "^2.6.1"
+ node-fetch-h2 "^2.3.0"
+ node-readfiles "^0.2.0"
+ oas-kit-common "^1.0.8"
+ oas-resolver "^2.5.6"
+ oas-schema-walker "^1.1.5"
+ oas-validator "^5.0.8"
+ reftools "^1.1.9"
+ yaml "^1.10.0"
+ yargs "^17.0.1"
+
tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0, tapable@^2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160"
@@ -8551,6 +9540,20 @@ terser@^5.10.0, terser@^5.15.1, terser@^5.31.1:
commander "^2.20.0"
source-map-support "~0.5.20"
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
thingies@^2.5.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.6.1.tgz#4eb28e2585a75288f1765a0b08f1dfa020357a6f"
@@ -8571,6 +9574,14 @@ tiny-warning@^1.0.0:
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+tinyglobby@^0.2.11:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631"
+ integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==
+ dependencies:
+ fdir "^6.5.0"
+ picomatch "^4.0.4"
+
tinypool@^1.0.2:
version "1.1.1"
resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591"
@@ -8593,6 +9604,11 @@ totalist@^3.0.0:
resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
tree-dump@^1.0.3, tree-dump@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4"
@@ -8608,6 +9624,16 @@ trough@^2.0.0:
resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f"
integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
+ts-algebra@^1.2.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/ts-algebra/-/ts-algebra-1.2.2.tgz#b75d301c28cd4126cd344760a47b43e48e2872e0"
+ integrity sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA==
+
+ts-interface-checker@^0.1.9:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@@ -8655,6 +9681,11 @@ undici-types@~8.3.0:
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-8.3.0.tgz#44e9fc9f3244648cdea35e4f9bb2d681e9410809"
integrity sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==
+undici@^6.28.0:
+ version "6.28.0"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-6.28.0.tgz#9f0e385744fef5021d6596c5bccd783f61193c1c"
+ integrity sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==
+
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2"
@@ -8802,6 +9833,24 @@ url-loader@^4.1.1:
mime-types "^2.1.27"
schema-utils "^3.0.0"
+url@^0.11.4:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c"
+ integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==
+ dependencies:
+ punycode "^1.4.1"
+ qs "^6.12.3"
+
+use-editable@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/use-editable/-/use-editable-2.3.3.tgz#a292fe9ba4c291cd28d1cc2728c75a5fc8d9a33f"
+ integrity sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA==
+
+use-sync-external-store@^1.4.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d"
+ integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==
+
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -8822,11 +9871,41 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
-uuid@^8.3.2:
+uuid@8.3.2, uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+validate.io-array@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d"
+ integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==
+
+validate.io-function@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7"
+ integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==
+
+validate.io-integer-array@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089"
+ integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==
+ dependencies:
+ validate.io-array "^1.0.3"
+ validate.io-integer "^1.0.4"
+
+validate.io-integer@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068"
+ integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==
+ dependencies:
+ validate.io-number "^1.0.3"
+
+validate.io-number@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8"
+ integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==
+
value-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
@@ -8861,6 +9940,13 @@ vfile@^6.0.0, vfile@^6.0.1:
"@types/unist" "^3.0.0"
vfile-message "^4.0.0"
+warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
watchpack@^2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.2.tgz#e12e82d84674266fc1c6dbfe38891b92ff0522ec"
@@ -8880,6 +9966,11 @@ web-namespaces@^2.0.0:
resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
webpack-bundle-analyzer@^4.10.2:
version "4.10.2"
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd"
@@ -9017,6 +10108,14 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -9036,6 +10135,15 @@ wildcard@^2.0.0, wildcard@^2.0.1:
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
@@ -9045,6 +10153,11 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
string-width "^5.0.1"
strip-ansi "^7.0.1"
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
write-file-atomic@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
@@ -9077,6 +10190,13 @@ xdg-basedir@^5.0.1, xdg-basedir@^5.1.0:
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9"
integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==
+xml-formatter@^3.6.6:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/xml-formatter/-/xml-formatter-3.7.0.tgz#ac6f8c02e2388759652e9d0c8a4b5b3dfc0694e5"
+ integrity sha512-+8qTc3zv2UcJ1v9IsSIce37Dl4MQG14Cp7tWrwmy202UaI1wqRukw5QMX1JHsV+DX64yw77EgGsj2s5wGvuMbQ==
+ dependencies:
+ xml-parser-xo "^4.1.5"
+
xml-js@^1.6.11:
version "1.6.11"
resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
@@ -9084,11 +10204,59 @@ xml-js@^1.6.11:
dependencies:
sax "^1.2.4"
+xml-parser-xo@^4.1.5:
+ version "4.1.6"
+ resolved "https://registry.yarnpkg.com/xml-parser-xo/-/xml-parser-xo-4.1.6.tgz#22bb2d0e1f651f92de04c7b79433a9df6f1490f2"
+ integrity sha512-mXbSNSM+rIwndoxSwmFa83bOdeP8G/cOGr7XvxA67X7ebCzoAuVez9JYDCDub3zRDNBZxIbfjuXLSsamr7NfwQ==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+yaml-ast-parser@0.0.43:
+ version "0.0.43"
+ resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb"
+ integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==
+
+yaml@1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yaml@2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.9.0.tgz#78274afd93598a1dfdd6130df6a566defcbf9aa4"
+ integrity sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==
+
+yaml@^1.10.0:
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3"
+ integrity sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==
+
+yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@^17.0.1:
+ version "17.7.3"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.3.tgz#779dffe6bcafec596a7172e983289a588647faaa"
+ integrity sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
yocto-queue@^1.0.0:
version "1.2.2"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.2.tgz#3e09c95d3f1aa89a58c114c99223edf639152c00"