{"openapi":"3.1.0","info":{"title":"FormaPortal API","version":"1.1.0","summary":"Read and write a portal's data, and subscribe to events, across every portal a connection covers.","description":"The FormaPortal API lets an authorised application work with the portals a user\nconnected, and receive a webhook the moment a form is submitted or a contact is\nadded.\n\n**One connection can cover several portals.** The user ticks them on the consent\nscreen, and every `v1.1` call names which one it is for in the path. Call\n`GET /api/v1.1/portals` to see the list — a call naming any other portal is\nrefused.\n\n**`v1.1` is the whole dashboard API.** Beyond the endpoints listed here by name,\n`/api/v1.1/portals/{portalId}/...` reaches the same endpoints the FormaPortal\ndashboard itself uses, with the same permissions: the connecting user's role on\nthat portal still decides what a call may do. Every one is listed under\n**Dashboard API** below.\n\n**`v1` is deprecated.** It still works, but it serves one portal per connection and\nis frozen at four endpoints. Its responses carry a `Deprecation` header. New\nintegrations should use `v1.1`.\n\nAll requests use `Authorization: Bearer <access_token>` over HTTPS.","contact":{"name":"FormaPortal Support","url":"https://formaportal.com"}},"servers":[{"url":"https://app.formaportal.com","description":"FormaPortal"}],"externalDocs":{"description":"Human-readable version of this document","url":"https://app.formaportal.com/developers"},"tags":[{"name":"Connection","description":"What this connection is and which portals it covers."},{"name":"Webhooks","description":"Subscribe to events. FormaPortal POSTs the event payload to your URL as it happens."},{"name":"Dashboard API","description":"Every endpoint the dashboard itself uses, reachable per portal through v1.1. The connecting user's role on the portal decides what each call may do.","x-compact":true},{"name":"OAuth","description":"Token exchange, refresh, revocation, client registration and discovery. Shared by every API version."},{"name":"Account (v1, deprecated)","description":"Who the token belongs to."},{"name":"Form submissions (v1, deprecated)","description":"Forms completed in the portal."},{"name":"Contacts (v1, deprecated)","description":"People registered with the portal."},{"name":"Webhooks (v1, deprecated)","description":"Single-portal webhook subscriptions."}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth 2.1 authorization code flow. **PKCE (S256) is required** — an\nauthorization request without `code_challenge`, or a token exchange without a\nmatching `code_verifier`, is rejected.\n\nConfidential clients must also send `client_id` and `client_secret` on both\nthe token exchange **and** the refresh request. Access tokens last one hour;\nrefresh tokens rotate on every use.\n\nServer metadata: `https://app.formaportal.com/.well-known/oauth-authorization-server`","flows":{"authorizationCode":{"authorizationUrl":"https://app.formaportal.com/oauth/authorize","tokenUrl":"https://app.formaportal.com/api/oauth/token","refreshUrl":"https://app.formaportal.com/api/oauth/token","scopes":{"portal:read":"Read your portal's name and settings","submissions:read":"Read form submissions","contacts:read":"Read contacts","webhooks:write":"Create and remove webhook subscriptions","events:read":"Read your portals, form submissions and contacts","api:read":"Read everything you can see in the dashboard","api:write":"Create, change and delete on your behalf"}}}}},"schemas":{"FormSubmission":{"type":"object","description":"A completed form. `answers` is keyed by the field's visible label for easy mapping; `answersDetailed` carries the same values with stable field ids and types.","properties":{"id":{"type":"string","example":"abc123def0"},"submittedAt":{"type":"string","format":"date-time"},"portalId":{"type":"string","example":"portal1234"},"formId":{"type":"string","example":"form123456"},"formName":{"type":"string","example":"Contact us"},"formVersion":{"type":"integer","example":3},"source":{"type":"string","enum":["gate","embed","onboarding"],"description":"Where the form was submitted from."},"status":{"type":"string","enum":["pending","approved","rejected"]},"contact":{"type":"object","properties":{"id":{"type":"string","example":"cont123456"},"email":{"type":"string","format":"email","example":"alice@example.com"},"firstName":{"type":"string","example":"Alice"},"lastName":{"type":"string","example":"Smith"}},"required":["id","email","firstName","lastName"],"nullable":true},"accountId":{"type":"string","nullable":true},"answers":{"type":"object","additionalProperties":{"type":"string"},"example":{"Full name":"Alice Smith","Message":"Please get in touch."}},"answersDetailed":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"},"value":{}},"required":["fieldId","label","type","value"]}}},"required":["id","submittedAt","portalId","formId","formName","answers"]},"Contact":{"type":"object","description":"A contact of the portal.","properties":{"id":{"type":"string","example":"cont123456"},"portalId":{"type":"string","example":"portal1234"},"email":{"type":"string","format":"email"},"firstName":{"type":"string"},"lastName":{"type":"string"},"active":{"type":"boolean"},"emailVerified":{"type":"boolean","description":"Self-registrations are published before the contact confirms their email, so this may be false on a freshly created contact."},"createdAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["self_registration","invitation","staff"],"description":"How the contact came to exist."}},"required":["id","portalId","email","createdAt","source"]},"Error":{"type":"object","properties":{"error":{"type":"string"},"error_description":{"type":"string"}}},"WebhookSubscription":{"type":"object","properties":{"id":{"type":"string","example":"g1qzf3mp1m"},"portalId":{"type":"string","example":"portal1234","description":"The portal this subscription listens to. Absent on v1, which had only one."},"event":{"type":"string","enum":["form_submission","contact_registered"]},"targetUrl":{"type":"string","format":"uri"}},"required":["id","event","targetUrl"]}},"responses":{"Unauthorized":{"description":"Missing, invalid, expired or revoked token. The `WWW-Authenticate` header points at the protected-resource metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The token is valid but lacks a required scope. `WWW-Authenticate` names the scopes needed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"security":[{"oauth2":["portal:read","submissions:read","contacts:read","webhooks:write","events:read","api:read","api:write"]}],"paths":{"/api/v1.1/portals/{portalId}":{"get":{"tags":["Dashboard API"],"summary":"GET /","description":"The portal's `portal` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /","description":"The portal's `portal` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"timezone":{"type":"string"},"logo":{"maxItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"extension":{"type":"string"},"fileType":{"type":"string"}},"required":["id","fileName","extension","fileType"]}},"icon":{"maxItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"extension":{"type":"string"},"fileType":{"type":"string"}},"required":["id","fileName","extension","fileType"]}}},"required":["name"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts":{"get":{"tags":["Dashboard API"],"summary":"GET /accounts","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_accounts","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /accounts","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_accounts","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"planId":{"type":"string"},"ownerContactId":{"type":"string","minLength":1}},"required":["name","ownerContactId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}":{"get":{"tags":["Dashboard API"],"summary":"GET /accounts/[accountId]","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_accounts_accountId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /accounts/[accountId]","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_accounts_accountId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"planId":{"type":["string","null"]}},"required":["name","planId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /accounts/[accountId]","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_accounts_accountId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}/approval":{"post":{"tags":["Dashboard API"],"summary":"POST /accounts/[accountId]/approval","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_accounts_accountId_approval","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"decision":{"type":"string","enum":["approve","reject","unapprove"]},"internalReason":{"type":"string","maxLength":2000},"externalReason":{"type":"string","maxLength":2000}},"required":["decision"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}/audit-logs":{"get":{"tags":["Dashboard API"],"summary":"GET /accounts/[accountId]/audit-logs","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_accounts_accountId_audit_logs","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}/billing":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /accounts/[accountId]/billing","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_accounts_accountId_billing","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"billingName":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"billingEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","const":""},{"type":"null"}]},"vatNumber":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"addressLine1":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"addressLine2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"city":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"county":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"postcode":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"country":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]}},"required":["billingName","billingEmail","vatNumber","addressLine1","addressLine2","city","county","postcode","country"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}/members":{"get":{"tags":["Dashboard API"],"summary":"GET /accounts/[accountId]/members","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_accounts_accountId_members","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /accounts/[accountId]/members","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_accounts_accountId_members","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"contactId":{"type":"string","minLength":1}},"required":["contactId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}/members/{memberId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /accounts/[accountId]/members/[memberId]","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_accounts_accountId_members_memberId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"description":"The memberId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"role":{"type":"string","enum":["owner","member"]}},"required":["role"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /accounts/[accountId]/members/[memberId]","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_accounts_accountId_members_memberId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"description":"The memberId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}/onboarding":{"get":{"tags":["Dashboard API"],"summary":"GET /accounts/[accountId]/onboarding","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_accounts_accountId_onboarding","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /accounts/[accountId]/onboarding","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_accounts_accountId_onboarding","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"decision":{"type":"string","enum":["approve","reject"]},"internalReason":{"type":"string","maxLength":2000},"externalReason":{"type":"string","maxLength":2000},"attemptId":{"type":"string","minLength":1}},"required":["decision","attemptId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/accounts/{accountId}/onboarding/reset":{"post":{"tags":["Dashboard API"],"summary":"POST /accounts/[accountId]/onboarding/reset","description":"The portal's `accounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_accounts_accountId_onboarding_reset","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"path","required":true,"description":"The accountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"internalReason":{"type":"string","maxLength":2000}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/affiliate":{"get":{"tags":["Dashboard API"],"summary":"GET /affiliate","description":"The portal's `affiliate` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_affiliate","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/affiliate/promo-codes":{"post":{"tags":["Dashboard API"],"summary":"POST /affiliate/promo-codes","description":"The portal's `affiliate` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_affiliate_promo_codes","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z0-9-]{4,20}$"},"discountBasisPoints":{"type":"integer","minimum":0,"maximum":2500},"discountMonths":{"type":"integer","minimum":0,"maximum":24},"packageIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}},"active":{"type":"boolean"}},"required":["code","discountBasisPoints","discountMonths","packageIds","active"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/affiliate/promo-codes/{codeId}":{"put":{"tags":["Dashboard API"],"summary":"PUT /affiliate/promo-codes/[codeId]","description":"The portal's `affiliate` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_affiliate_promo_codes_codeId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"codeId","in":"path","required":true,"description":"The codeId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z0-9-]{4,20}$"},"discountBasisPoints":{"type":"integer","minimum":0,"maximum":2500},"discountMonths":{"type":"integer","minimum":0,"maximum":24},"packageIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}},"active":{"type":"boolean"}},"required":["code","discountBasisPoints","discountMonths","packageIds","active"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /affiliate/promo-codes/[codeId]","description":"The portal's `affiliate` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_affiliate_promo_codes_codeId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"codeId","in":"path","required":true,"description":"The codeId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/announcements":{"get":{"tags":["Dashboard API"],"summary":"GET /announcements","description":"The portal's `announcements` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_announcements","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /announcements","description":"The portal's `announcements` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_announcements","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"body":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"isPublished":{"type":"boolean"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["title","body"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/announcements/{announcementId}":{"get":{"tags":["Dashboard API"],"summary":"GET /announcements/[announcementId]","description":"The portal's `announcements` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_announcements_announcementId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"announcementId","in":"path","required":true,"description":"The announcementId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /announcements/[announcementId]","description":"The portal's `announcements` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_announcements_announcementId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"announcementId","in":"path","required":true,"description":"The announcementId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"body":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"isPublished":{"type":"boolean"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /announcements/[announcementId]","description":"The portal's `announcements` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_announcements_announcementId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"announcementId","in":"path","required":true,"description":"The announcementId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/announcements/{announcementId}/access":{"get":{"tags":["Dashboard API"],"summary":"GET /announcements/[announcementId]/access","description":"The portal's `announcements` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_announcements_announcementId_access","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"announcementId","in":"path","required":true,"description":"The announcementId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /announcements/[announcementId]/access","description":"The portal's `announcements` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_announcements_announcementId_access","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"announcementId","in":"path","required":true,"description":"The announcementId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"accessor":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"level":{"type":"string","enum":["hidden","protected","allowed"]}},"required":["accessor","level"]}}},"required":["rows"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/asset-settings":{"get":{"tags":["Dashboard API"],"summary":"GET /asset-settings","description":"The portal's `asset-settings` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_asset_settings","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /asset-settings","description":"The portal's `asset-settings` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_asset_settings","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/audit-logs":{"get":{"tags":["Dashboard API"],"summary":"GET /audit-logs","description":"The portal's `audit-logs` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_audit_logs","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"action","in":"query","required":false,"description":"The action.","schema":{"type":"string"}},{"name":"entityType","in":"query","required":false,"description":"The entityType.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/auth":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /auth","description":"The portal's `auth` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_patch_auth","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requiresLogin":{"type":"boolean"},"loginMethods":{"minItems":1,"type":"array","items":{"type":"string","enum":["password","otp_email","magic_link"]}},"allowRegistration":{"type":"boolean"},"allowProfileEditing":{"type":"boolean"},"allowPlanSwitching":{"type":"boolean"},"maxOrgAccountsPerContact":{"type":"integer","minimum":0,"maximum":9007199254740991},"defaultPlanId":{"type":["string","null"]}},"required":["requiresLogin","loginMethods","allowRegistration","allowProfileEditing","allowPlanSwitching","maxOrgAccountsPerContact","defaultPlanId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/billing":{"get":{"tags":["Dashboard API"],"summary":"GET /billing","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_billing","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /billing","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_put_billing","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"companyName":{"type":"string","minLength":1,"maxLength":200},"addressLine1":{"type":"string","minLength":1,"maxLength":200},"addressLine2":{"type":"string","maxLength":200},"city":{"type":"string","minLength":1,"maxLength":100},"state":{"type":"string","maxLength":100},"postalCode":{"type":"string","minLength":1,"maxLength":20},"country":{"type":"string"},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["companyName","addressLine1","city","postalCode","country"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/billing/package":{"put":{"tags":["Dashboard API"],"summary":"PUT /billing/package","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_put_billing_package","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"packageId":{"type":"string","minLength":1}},"required":["packageId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/billing/package/overage":{"get":{"tags":["Dashboard API"],"summary":"GET /billing/package/overage","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_get_billing_package_overage","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"packageId","in":"query","required":false,"description":"The packageId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/billing/package/pending":{"delete":{"tags":["Dashboard API"],"summary":"DELETE /billing/package/pending","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_delete_billing_package_pending","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/billing/status":{"get":{"tags":["Dashboard API"],"summary":"GET /billing/status","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_billing_status","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/branding-settings":{"get":{"tags":["Dashboard API"],"summary":"GET /branding-settings","description":"The portal's `branding-settings` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_branding_settings","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /branding-settings","description":"The portal's `branding-settings` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_branding_settings","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"welcomeEmailMessage":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]},"pendingApprovalEmailMessage":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]},"approvedEmailMessage":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]}},"required":["welcomeEmailMessage","pendingApprovalEmailMessage","approvedEmailMessage"],"$defs":{"__schema0":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"paragraph"},"content":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"bold"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"italic"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"underline"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["#ef4444","#f97316","#f59e0b","#16a34a","#14b8a6","#3b82f6","#6366f1","#a855f7","#ec4899","#6b7280"]},{"type":"null"}]},"fontSize":{"anyOf":[{"type":"string","enum":["small","large"]},{"type":"null"}]}}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"link"},"attrs":{"type":"object","properties":{"href":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"pageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}}}},"required":["type","attrs"]}]}}},"required":["type","text"]},{"type":"object","properties":{"type":{"type":"string","const":"hardBreak"}},"required":["type"]}]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"bulletList"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000},{"type":"null"}]}}},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]}]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/checkout-suggestions":{"get":{"tags":["Dashboard API"],"summary":"GET /checkout-suggestions","description":"The portal's `checkout-suggestions` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_checkout_suggestions","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /checkout-suggestions","description":"The portal's `checkout-suggestions` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_checkout_suggestions","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["product","category"]},"id":{"type":"string","minLength":1,"maxLength":64}},"required":["kind","id"]}}},"required":["items"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/contacts":{"get":{"tags":["Dashboard API"],"summary":"GET /contacts","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_contacts","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /contacts","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_contacts","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"firstName":{"type":"string","minLength":1,"maxLength":100},"lastName":{"type":"string","minLength":1,"maxLength":100},"active":{"type":"boolean"},"account":{"default":{"mode":"individual"},"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"individual"}},"required":["mode"]},{"type":"object","properties":{"mode":{"type":"string","const":"organisation"},"orgName":{"type":"string","minLength":1,"maxLength":200}},"required":["mode","orgName"]},{"type":"object","properties":{"mode":{"type":"string","const":"join"},"accountId":{"type":"string","minLength":1},"role":{"type":"string","enum":["owner","member"]}},"required":["mode","accountId","role"]}]}},"required":["email","firstName","lastName","active"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/contacts/{contactId}":{"get":{"tags":["Dashboard API"],"summary":"GET /contacts/[contactId]","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_contacts_contactId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"description":"The contactId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /contacts/[contactId]","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_contacts_contactId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"description":"The contactId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"firstName":{"type":"string","minLength":1,"maxLength":100},"lastName":{"type":"string","minLength":1,"maxLength":100},"active":{"type":"boolean"}},"required":["email","firstName","lastName","active"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/contacts/{contactId}/accounts":{"get":{"tags":["Dashboard API"],"summary":"GET /contacts/[contactId]/accounts","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_contacts_contactId_accounts","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"description":"The contactId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/contacts/{contactId}/audit-logs":{"get":{"tags":["Dashboard API"],"summary":"GET /contacts/[contactId]/audit-logs","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_contacts_contactId_audit_logs","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"description":"The contactId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/contacts/{contactId}/notes":{"get":{"tags":["Dashboard API"],"summary":"GET /contacts/[contactId]/notes","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_contacts_contactId_notes","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"description":"The contactId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /contacts/[contactId]/notes","description":"The portal's `contacts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_post_contacts_contactId_notes","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"description":"The contactId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"content":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}}},"required":["content"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/dashboard-shortcuts":{"get":{"tags":["Dashboard API"],"summary":"GET /dashboard-shortcuts","description":"The portal's `dashboard` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_dashboard_shortcuts","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /dashboard-shortcuts","description":"The portal's `dashboard` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_dashboard_shortcuts","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"shortcuts":{"maxItems":24,"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"catalogue"},"key":{"type":"string","enum":["asset-list","asset-add","add:account","add:contact","add:page","add:event","add:form","add:announcement","add:faq-question","screen:accounts","screen:contacts","screen:onboarding","screen:assets","screen:pages","screen:faq","screen:announcements","screen:files","screen:events","screen:events/items","screen:events/tickets","screen:purchases","screen:products","screen:product-categories","screen:discounts","screen:checkout-products","screen:forms","screen:polls","screen:submissions","screen:reminders","settings:portal","settings:policies","settings:domains","settings:branding","settings:onboarding","settings:navigation","settings:assets","settings:authentication","settings:plans","settings:team","settings:billing","settings:ecommerce","settings:integrations","settings:data-export","settings:audit-logs"],"description":"Which screen or action. `screen:*` and `settings:*` open a screen, `add:*` opens its add form, and `asset-list` / `asset-add` open one asset's list or add form — those two also need `resourceTypeId`."},"resourceTypeId":{"description":"`asset-list` / `asset-add` only: an asset type id from GET /resource-types.","type":"string","minLength":1}},"required":["kind","key"]},{"type":"object","properties":{"kind":{"type":"string","const":"link"},"label":{"type":"string","minLength":1,"maxLength":60,"description":"The button's text."},"url":{"type":"string","minLength":1,"maxLength":2048,"description":"A dashboard path relative to the portal, starting with / (e.g. /submissions), or an http(s) address, which opens in a new tab."}},"required":["kind","label","url"]}]}}},"required":["shortcuts"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/discounts":{"get":{"tags":["Dashboard API"],"summary":"GET /discounts","description":"The portal's `discounts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_discounts","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /discounts","description":"The portal's `discounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_discounts","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"kind":{"type":"string","enum":["percentage","amount"]},"value":{"type":"integer","minimum":1,"maximum":9007199254740991},"currency":{"anyOf":[{"type":"string","enum":["GBP","USD","EUR"]},{"type":"null"}]},"isExtra":{"type":"boolean"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"maxUses":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000000},{"type":"null"}]},"maxUsesPerAccount":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000000},{"type":"null"}]},"isActive":{"type":"boolean"},"productIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"categoryIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"planIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}}},"required":["name","description","kind","value","currency","isExtra","startsAt","endsAt","maxUses","maxUsesPerAccount","isActive","productIds","categoryIds","planIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/discounts/{discountId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /discounts/[discountId]","description":"The portal's `discounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_discounts_discountId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"discountId","in":"path","required":true,"description":"The discountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"kind":{"type":"string","enum":["percentage","amount"]},"value":{"type":"integer","minimum":1,"maximum":9007199254740991},"currency":{"anyOf":[{"type":"string","enum":["GBP","USD","EUR"]},{"type":"null"}]},"isExtra":{"type":"boolean"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"maxUses":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000000},{"type":"null"}]},"maxUsesPerAccount":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000000},{"type":"null"}]},"isActive":{"type":"boolean"},"productIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"categoryIds":{"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"planIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}}},"required":["name","description","kind","value","currency","isExtra","startsAt","endsAt","maxUses","maxUsesPerAccount","isActive","productIds","categoryIds","planIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /discounts/[discountId]","description":"The portal's `discounts` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_discounts_discountId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"discountId","in":"path","required":true,"description":"The discountId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/domains":{"post":{"tags":["Dashboard API"],"summary":"POST /domains","description":"The portal's `domains` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_domains","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253}},"required":["domain"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/domains/primary":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /domains/primary","description":"The portal's `domains` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_patch_domains_primary","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"primaryDomain":{"type":"string","minLength":1,"maxLength":253}},"required":["primaryDomain"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/domains/{domain}":{"delete":{"tags":["Dashboard API"],"summary":"DELETE /domains/[domain]","description":"The portal's `domains` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_delete_domains_domain","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"domain","in":"path","required":true,"description":"The domain.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/ecommerce-settings":{"get":{"tags":["Dashboard API"],"summary":"GET /ecommerce-settings","description":"The portal's `ecommerce-settings` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_ecommerce_settings","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /ecommerce-settings","description":"The portal's `ecommerce-settings` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_ecommerce_settings","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean"},"defaultCurrency":{"type":"string","enum":["GBP","USD","EUR"]},"defaultVatClassificationId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"shipping":{"type":"object","properties":{"currency":{"type":"string","enum":["GBP","USD","EUR"]},"defaultCents":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000000},{"type":"null"}]},"rates":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"minOrderCents":{"type":"integer","minimum":0,"maximum":100000000},"shippingCents":{"type":"integer","minimum":0,"maximum":100000000}},"required":["planId","minOrderCents","shippingCents"]}}},"required":["currency","defaultCents","rates"]},"orders":{"type":"object","properties":{"autoApprove":{"type":"boolean"},"manualPaymentEnabled":{"type":"boolean"},"manualPaymentInstructions":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"notifyUserIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}}},"required":["autoApprove","manualPaymentEnabled","manualPaymentInstructions","notifyUserIds"]},"emails":{"type":"object","properties":{"received":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]},"approved":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]},"delivered":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]},"cancelled":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]}},"required":["received","approved","delivered","cancelled"]}},"$defs":{"__schema0":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"paragraph"},"content":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"bold"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"italic"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"underline"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["#ef4444","#f97316","#f59e0b","#16a34a","#14b8a6","#3b82f6","#6366f1","#a855f7","#ec4899","#6b7280"]},{"type":"null"}]},"fontSize":{"anyOf":[{"type":"string","enum":["small","large"]},{"type":"null"}]}}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"link"},"attrs":{"type":"object","properties":{"href":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"pageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}}}},"required":["type","attrs"]}]}}},"required":["type","text"]},{"type":"object","properties":{"type":{"type":"string","const":"hardBreak"}},"required":["type"]}]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"bulletList"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000},{"type":"null"}]}}},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]}]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/email-domain":{"get":{"tags":["Dashboard API"],"summary":"GET /email-domain","description":"The portal's `email-domain` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_email_domain","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /email-domain","description":"The portal's `email-domain` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_email_domain","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253}},"required":["domain"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /email-domain","description":"The portal's `email-domain` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_delete_email_domain","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/email-domain/verification":{"post":{"tags":["Dashboard API"],"summary":"POST /email-domain/verification","description":"The portal's `email-domain` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_email_domain_verification","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/groups":{"get":{"tags":["Dashboard API"],"summary":"GET /events/groups","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_groups","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /events/groups","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_events_groups","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"status":{"type":"string","enum":["draft","published"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["slug","title"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/groups/{groupId}":{"get":{"tags":["Dashboard API"],"summary":"GET /events/groups/[groupId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_groups_groupId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /events/groups/[groupId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_events_groups_groupId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":200},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"status":{"type":"string","enum":["draft","published","archived"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /events/groups/[groupId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_events_groups_groupId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/groups/{groupId}/access":{"get":{"tags":["Dashboard API"],"summary":"GET /events/groups/[groupId]/access","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_groups_groupId_access","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /events/groups/[groupId]/access","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_events_groups_groupId_access","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"accessor":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"level":{"type":"string","enum":["hidden","protected","allowed"]}},"required":["accessor","level"]}}},"required":["rows"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/groups/{groupId}/items":{"get":{"tags":["Dashboard API"],"summary":"GET /events/groups/[groupId]/items","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_groups_groupId_items","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /events/groups/[groupId]/items","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_events_groups_groupId_items","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":300},"summary":{"type":"string","maxLength":500},"description":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"location":{"type":"string","maxLength":500},"status":{"type":"string","enum":["draft","published","archived"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"inheritGroupAccess":{"type":"boolean"},"tickets":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["available","sold_out","hidden"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"availableFrom":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"availableUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["name","status","count"]}}},"required":["slug","title","description","startAt","endAt"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/groups/{groupId}/items/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /events/groups/[groupId]/items/reorder","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_events_groups_groupId_items_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/groups/{groupId}/items/{itemId}":{"get":{"tags":["Dashboard API"],"summary":"GET /events/groups/[groupId]/items/[itemId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_groups_groupId_items_itemId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /events/groups/[groupId]/items/[itemId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_events_groups_groupId_items_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":300},"summary":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"description":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"location":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"status":{"type":"string","enum":["draft","published","archived"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"groupId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"inheritGroupAccess":{"type":"boolean"},"tickets":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["available","sold_out","hidden"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"availableFrom":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"availableUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["name","status","count"]}}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /events/groups/[groupId]/items/[itemId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_events_groups_groupId_items_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/items":{"get":{"tags":["Dashboard API"],"summary":"GET /events/items","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_items","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"query","required":false,"description":"The groupId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /events/items","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_events_items","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"query","required":false,"description":"The groupId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":300},"summary":{"type":"string","maxLength":500},"description":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"location":{"type":"string","maxLength":500},"status":{"type":"string","enum":["draft","published","archived"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"inheritGroupAccess":{"type":"boolean"},"tickets":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["available","sold_out","hidden"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"availableFrom":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"availableUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["name","status","count"]}}},"required":["slug","title","description","startAt","endAt"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/items/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /events/items/reorder","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_events_items_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"query","required":false,"description":"The groupId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/items/{itemId}":{"get":{"tags":["Dashboard API"],"summary":"GET /events/items/[itemId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_items_itemId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /events/items/[itemId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_events_items_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":300},"summary":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"description":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"location":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"status":{"type":"string","enum":["draft","published","archived"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"groupId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"inheritGroupAccess":{"type":"boolean"},"tickets":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["available","sold_out","hidden"]},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"availableFrom":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"availableUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["name","status","count"]}}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /events/items/[itemId]","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_events_items_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/items/{itemId}/access":{"get":{"tags":["Dashboard API"],"summary":"GET /events/items/[itemId]/access","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_items_itemId_access","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /events/items/[itemId]/access","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_events_items_itemId_access","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"accessor":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"level":{"type":"string","enum":["hidden","protected","allowed"]}},"required":["accessor","level"]}},"inheritGroupAccess":{"type":"boolean"}},"required":["rows"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/purchases":{"get":{"tags":["Dashboard API"],"summary":"GET /events/purchases","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_purchases","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/ticket-types":{"get":{"tags":["Dashboard API"],"summary":"GET /events/ticket-types","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_ticket_types","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/events/tickets":{"get":{"tags":["Dashboard API"],"summary":"GET /events/tickets","description":"The portal's `events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_events_tickets","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/exports":{"get":{"tags":["Dashboard API"],"summary":"GET /exports","description":"The portal's `exports` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_exports","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/faq/categories":{"get":{"tags":["Dashboard API"],"summary":"GET /faq/categories","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_faq_categories","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /faq/categories","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_faq_categories","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"status":{"type":"string","enum":["draft","published"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["slug","title"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/faq/categories/{categoryId}":{"get":{"tags":["Dashboard API"],"summary":"GET /faq/categories/[categoryId]","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_faq_categories_categoryId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /faq/categories/[categoryId]","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_faq_categories_categoryId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":200},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"status":{"type":"string","enum":["draft","published","archived"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /faq/categories/[categoryId]","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_faq_categories_categoryId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/faq/categories/{categoryId}/access":{"get":{"tags":["Dashboard API"],"summary":"GET /faq/categories/[categoryId]/access","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_faq_categories_categoryId_access","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /faq/categories/[categoryId]/access","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_faq_categories_categoryId_access","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"accessor":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"level":{"type":"string","enum":["hidden","protected","allowed"]}},"required":["accessor","level"]}}},"required":["rows"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/faq/categories/{categoryId}/items":{"get":{"tags":["Dashboard API"],"summary":"GET /faq/categories/[categoryId]/items","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_faq_categories_categoryId_items","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /faq/categories/[categoryId]/items","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_faq_categories_categoryId_items","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"question":{"type":"string","minLength":1,"maxLength":300},"answer":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"isPublished":{"type":"boolean"},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["question","answer"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/faq/categories/{categoryId}/items/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /faq/categories/[categoryId]/items/reorder","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_faq_categories_categoryId_items_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/faq/categories/{categoryId}/items/{itemId}":{"get":{"tags":["Dashboard API"],"summary":"GET /faq/categories/[categoryId]/items/[itemId]","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_faq_categories_categoryId_items_itemId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /faq/categories/[categoryId]/items/[itemId]","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_faq_categories_categoryId_items_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"question":{"type":"string","minLength":1,"maxLength":300},"answer":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"isPublished":{"type":"boolean"},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"categoryId":{"type":"string","minLength":1}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /faq/categories/[categoryId]/items/[itemId]","description":"The portal's `faq` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_faq_categories_categoryId_items_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/files":{"get":{"tags":["Dashboard API"],"summary":"GET /files","description":"The portal's `files` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_files","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"id","in":"query","required":false,"description":"The id.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /files","description":"The portal's `files` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_files","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"id","in":"query","required":false,"description":"The id.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/files/{fileId}/usages":{"get":{"tags":["Dashboard API"],"summary":"GET /files/[fileId]/usages","description":"The portal's `files` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_files_fileId_usages","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"fileId","in":"path","required":true,"description":"The fileId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/forms":{"get":{"tags":["Dashboard API"],"summary":"GET /forms","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_forms","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /forms","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_forms","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":1000},"fields":{"default":[],"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"number"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200},"min":{"type":"number"},"max":{"type":"number"}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"date"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"checkbox"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"file"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"fileKind":{"default":"any","type":"string","enum":["any","image","pdf","office"]},"multiple":{"default":false,"type":"boolean"},"maxFiles":{"type":"integer","minimum":1,"maximum":10}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"select"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200},"options":{"minItems":1,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["type","label","options"]},{"type":"object","properties":{"type":{"type":"string","const":"multiselect"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200},"options":{"minItems":1,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["type","label","options"]},{"type":"object","properties":{"type":{"type":"string","const":"radio"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"options":{"minItems":1,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["type","label","options"]},{"type":"object","properties":{"type":{"type":"string","const":"title"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"subtitle"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"paragraph"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":2000}},"required":["type","label"]}]}}},"required":["name"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/forms/{formId}":{"get":{"tags":["Dashboard API"],"summary":"GET /forms/[formId]","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_forms_formId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"description":"The formId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /forms/[formId]","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_forms_formId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"description":"The formId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"notifyUserIds":{"type":"array","items":{"type":"string","minLength":1}},"isPublic":{"type":"boolean"}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /forms/[formId]","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_forms_formId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"description":"The formId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/forms/{formId}/duplicate":{"post":{"tags":["Dashboard API"],"summary":"POST /forms/[formId]/duplicate","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_forms_formId_duplicate","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"description":"The formId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/forms/{formId}/fields":{"put":{"tags":["Dashboard API"],"summary":"PUT /forms/[formId]/fields","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_forms_formId_fields","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"description":"The formId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fields":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"number"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200},"min":{"type":"number"},"max":{"type":"number"}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"date"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"checkbox"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"file"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"fileKind":{"default":"any","type":"string","enum":["any","image","pdf","office"]},"multiple":{"default":false,"type":"boolean"},"maxFiles":{"type":"integer","minimum":1,"maximum":10}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"select"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200},"options":{"minItems":1,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["type","label","options"]},{"type":"object","properties":{"type":{"type":"string","const":"multiselect"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"placeholder":{"type":"string","maxLength":200},"options":{"minItems":1,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["type","label","options"]},{"type":"object","properties":{"type":{"type":"string","const":"radio"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"required":{"default":false,"type":"boolean"},"options":{"minItems":1,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["type","label","options"]},{"type":"object","properties":{"type":{"type":"string","const":"title"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"subtitle"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["type","label"]},{"type":"object","properties":{"type":{"type":"string","const":"paragraph"},"id":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":2000}},"required":["type","label"]}]}}},"required":["fields"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/forms/{formId}/fields/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /forms/[formId]/fields/reorder","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_forms_formId_fields_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"description":"The formId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/forms/{formId}/version":{"post":{"tags":["Dashboard API"],"summary":"POST /forms/[formId]/version","description":"The portal's `forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_forms_formId_version","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"description":"The formId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/gate-forms":{"get":{"tags":["Dashboard API"],"summary":"GET /gate-forms","description":"The portal's `gate-forms` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_gate_forms","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /gate-forms","description":"The portal's `gate-forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_gate_forms","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"formId":{"type":"string","minLength":1},"scope":{"type":"string","enum":["contact","individual_account","organisation_account"]}},"required":["formId","scope"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/gate-forms/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /gate-forms/reorder","description":"The portal's `gate-forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_gate_forms_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/gate-forms/{gateFormId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /gate-forms/[gateFormId]","description":"The portal's `gate-forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_gate_forms_gateFormId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"gateFormId","in":"path","required":true,"description":"The gateFormId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"scope":{"type":"string","enum":["contact","individual_account","organisation_account"]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /gate-forms/[gateFormId]","description":"The portal's `gate-forms` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_gate_forms_gateFormId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"gateFormId","in":"path","required":true,"description":"The gateFormId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/home-rules":{"get":{"tags":["Dashboard API"],"summary":"GET /home-rules","description":"The portal's `home-rules` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_home_rules","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /home-rules","description":"The portal's `home-rules` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_home_rules","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audience":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"type":"string","minLength":1},"type":{"type":"string","enum":["page","faq_category","event_group","event","all_events","external","policy","form","resource","polls","all_products","all_product_categories","product_category"]},"pageId":{"type":"string","minLength":1},"faqCategoryId":{"type":"string","minLength":1},"eventGroupId":{"type":"string","minLength":1},"eventId":{"type":"string","minLength":1},"formId":{"type":"string","minLength":1},"externalUrl":{"type":"string","maxLength":2048,"format":"uri"},"policySlug":{"type":"string","enum":["index","terms-and-conditions","privacy-policy","platform-terms-and-conditions","platform-privacy-policy"]},"resourceTypeId":{"type":"string","minLength":1},"productCategoryId":{"type":"string","minLength":1},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["audience","type"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/home-rules/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /home-rules/reorder","description":"The portal's `home-rules` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_home_rules_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/home-rules/{ruleId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /home-rules/[ruleId]","description":"The portal's `home-rules` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_home_rules_ruleId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"The ruleId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audience":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"type":{"type":"string","enum":["page","faq_category","event_group","event","all_events","external","policy","form","resource","polls","all_products","all_product_categories","product_category"]},"pageId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"faqCategoryId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"eventGroupId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"eventId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"formId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"externalUrl":{"anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"policySlug":{"anyOf":[{"type":"string","enum":["index","terms-and-conditions","privacy-policy","platform-terms-and-conditions","platform-privacy-policy"]},{"type":"null"}]},"resourceTypeId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"productCategoryId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /home-rules/[ruleId]","description":"The portal's `home-rules` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_home_rules_ruleId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"The ruleId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/integrations":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /integrations","description":"The portal's `integrations` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_integrations","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"googleTagManagerId":{"type":"string"}},"required":["googleTagManagerId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/nav":{"get":{"tags":["Dashboard API"],"summary":"GET /nav","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_nav","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"placement","in":"query","required":false,"description":"The placement.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /nav","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_nav","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"placement","in":"query","required":false,"description":"The placement.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"placement":{"type":"string","enum":["header","footer"]},"label":{"type":"string","maxLength":100},"type":{"type":"string","enum":["page","faq_category","event_group","event","all_events","external","policy","form","resource","polls","product_category","product","all_products","all_product_categories"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"groupId":{"type":"string","minLength":1},"pageId":{"type":"string","minLength":1},"faqCategoryId":{"type":"string","minLength":1},"eventGroupId":{"type":"string","minLength":1},"eventId":{"type":"string","minLength":1},"formId":{"type":"string","minLength":1},"externalUrl":{"type":"string","maxLength":2048},"policySlug":{"type":"string","enum":["index","terms-and-conditions","privacy-policy","platform-terms-and-conditions","platform-privacy-policy"]},"resourceTypeId":{"type":"string","minLength":1},"productCategoryId":{"type":"string","minLength":1},"productId":{"type":"string","minLength":1}},"required":["placement","type"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/nav/groups":{"get":{"tags":["Dashboard API"],"summary":"GET /nav/groups","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_nav_groups","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /nav/groups","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_nav_groups","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":100},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["title"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/nav/groups/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /nav/groups/reorder","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_nav_groups_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/nav/groups/{groupId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /nav/groups/[groupId]","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_nav_groups_groupId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":100},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /nav/groups/[groupId]","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_nav_groups_groupId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"groupId","in":"path","required":true,"description":"The groupId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/nav/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /nav/reorder","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_nav_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"placement":{"type":"string","enum":["header","footer"]},"groupId":{"type":"string","minLength":1},"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/nav/{itemId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /nav/[itemId]","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_nav_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"placement":{"type":"string","enum":["header","footer"]},"label":{"type":"string","maxLength":100},"type":{"type":"string","enum":["page","faq_category","event_group","event","all_events","external","policy","form","resource","polls","product_category","product","all_products","all_product_categories"]},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"groupId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"pageId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"faqCategoryId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"eventGroupId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"eventId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"formId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"externalUrl":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"policySlug":{"anyOf":[{"type":"string","enum":["index","terms-and-conditions","privacy-policy","platform-terms-and-conditions","platform-privacy-policy"]},{"type":"null"}]},"resourceTypeId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"productCategoryId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"productId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /nav/[itemId]","description":"The portal's `nav` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_nav_itemId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"itemId","in":"path","required":true,"description":"The itemId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/onboarding-attempts/{attemptId}":{"get":{"tags":["Dashboard API"],"summary":"GET /onboarding-attempts/[attemptId]","description":"The portal's `onboarding-attempts` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_onboarding_attempts_attemptId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"attemptId","in":"path","required":true,"description":"The attemptId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/onboarding-reviews":{"get":{"tags":["Dashboard API"],"summary":"GET /onboarding-reviews","description":"The portal's `onboarding-reviews` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_onboarding_reviews","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/onboarding-settings":{"get":{"tags":["Dashboard API"],"summary":"GET /onboarding-settings","description":"The portal's `onboarding-settings` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_onboarding_settings","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /onboarding-settings","description":"The portal's `onboarding-settings` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_onboarding_settings","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"autoApproveAccounts":{"type":"boolean"}},"required":["autoApproveAccounts"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/onboarding-steps":{"get":{"tags":["Dashboard API"],"summary":"GET /onboarding-steps","description":"The portal's `onboarding-steps` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_onboarding_steps","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /onboarding-steps","description":"The portal's `onboarding-steps` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_onboarding_steps","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["form","approval","assign_plan"]},"formId":{"type":"string","minLength":1},"audience":{"type":"string","enum":["all","individual_accounts","organisation_accounts","plan"]},"planId":{"type":"string","minLength":1},"assignPlanId":{"type":"string","minLength":1},"requireApproval":{"type":"boolean"},"allowResubmitOnReject":{"type":"boolean"}},"required":["type","audience"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/onboarding-steps/reorder":{"post":{"tags":["Dashboard API"],"summary":"POST /onboarding-steps/reorder","description":"The portal's `onboarding-steps` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_onboarding_steps_reorder","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"orderedIds":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["orderedIds"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/onboarding-steps/{stepId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /onboarding-steps/[stepId]","description":"The portal's `onboarding-steps` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_onboarding_steps_stepId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"stepId","in":"path","required":true,"description":"The stepId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["form","approval","assign_plan"]},"formId":{"type":"string","minLength":1},"audience":{"type":"string","enum":["all","individual_accounts","organisation_accounts","plan"]},"planId":{"type":"string","minLength":1},"assignPlanId":{"type":"string","minLength":1},"requireApproval":{"type":"boolean"},"allowResubmitOnReject":{"type":"boolean"}},"required":["type","audience"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /onboarding-steps/[stepId]","description":"The portal's `onboarding-steps` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_onboarding_steps_stepId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"stepId","in":"path","required":true,"description":"The stepId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/orders":{"get":{"tags":["Dashboard API"],"summary":"GET /orders","description":"The portal's `orders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_orders","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/orders/counts":{"get":{"tags":["Dashboard API"],"summary":"GET /orders/counts","description":"The portal's `orders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_orders_counts","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/orders/{purchaseId}":{"get":{"tags":["Dashboard API"],"summary":"GET /orders/[purchaseId]","description":"The portal's `orders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_orders_purchaseId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"purchaseId","in":"path","required":true,"description":"The purchaseId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/orders/{purchaseId}/approve":{"post":{"tags":["Dashboard API"],"summary":"POST /orders/[purchaseId]/approve","description":"The portal's `orders` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_orders_purchaseId_approve","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"purchaseId","in":"path","required":true,"description":"The purchaseId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"deliver":{"type":"boolean"}},"required":["deliver"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/orders/{purchaseId}/cancel":{"post":{"tags":["Dashboard API"],"summary":"POST /orders/[purchaseId]/cancel","description":"The portal's `orders` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_orders_purchaseId_cancel","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"purchaseId","in":"path","required":true,"description":"The purchaseId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reason":{"type":"string","minLength":1,"maxLength":500},"refunded":{"type":"boolean"}},"required":["reason","refunded"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/orders/{purchaseId}/deliver":{"post":{"tags":["Dashboard API"],"summary":"POST /orders/[purchaseId]/deliver","description":"The portal's `orders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_post_orders_purchaseId_deliver","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"purchaseId","in":"path","required":true,"description":"The purchaseId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/orders/{purchaseId}/payment":{"post":{"tags":["Dashboard API"],"summary":"POST /orders/[purchaseId]/payment","description":"The portal's `orders` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_orders_purchaseId_payment","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"purchaseId","in":"path","required":true,"description":"The purchaseId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","enum":["paid","refunded"]}},"required":["status"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/pages":{"get":{"tags":["Dashboard API"],"summary":"GET /pages","description":"The portal's `pages` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_pages","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /pages","description":"The portal's `pages` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_pages","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":200},"showTitle":{"type":"boolean"},"sections":{"minItems":1,"maxItems":50,"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"rich_text"},"body":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}}},"required":["type","body"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"hero"},"settings":{"type":"object","properties":{"layout":{"type":"string","enum":["overlay","split"]},"imageId":{"type":"string","minLength":1,"maxLength":50},"headline":{"type":"string","minLength":1,"maxLength":120},"text":{"type":"string","maxLength":300},"buttonLabel":{"type":"string","maxLength":40},"buttonLink":{"anyOf":[{"type":"string","maxLength":500,"pattern":"^(\\/(?!\\/)|https?:\\/\\/)"},{"type":"string","const":""}]}},"required":["layout","imageId","headline"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"image_text"},"body":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"settings":{"type":"object","properties":{"imageId":{"type":"string","minLength":1,"maxLength":50},"imageSide":{"type":"string","enum":["left","right"]},"buttonLabel":{"type":"string","maxLength":40},"buttonLink":{"anyOf":[{"type":"string","maxLength":500,"pattern":"^(\\/(?!\\/)|https?:\\/\\/)"},{"type":"string","const":""}]}},"required":["imageId","imageSide"]}},"required":["type","body","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"highlights"},"settings":{"type":"object","properties":{"items":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"icon":{"type":"string","enum":["truck","clock","shield","star","gift","leaf","heart","tag","phone","returns"]},"title":{"type":"string","minLength":1,"maxLength":60},"text":{"type":"string","maxLength":140}},"required":["icon","title"]}}},"required":["items"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"product_row"},"settings":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":80},"source":{"type":"string","enum":["category","products","newest","on_offer"]},"categoryId":{"type":"string","minLength":1,"maxLength":50},"productIds":{"maxItems":24,"type":"array","items":{"type":"string","minLength":1,"maxLength":50}},"limit":{"type":"integer","minimum":1,"maximum":12}},"required":["title","source","limit"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"category_tiles"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"style":{"type":"string","enum":["photo","circle"]},"categoryIds":{"maxItems":24,"type":"array","items":{"type":"string","minLength":1,"maxLength":50}}},"required":["style","categoryIds"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"announcements"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000},{"type":"null"}]},"pageSize":{"anyOf":[{"type":"integer","minimum":1,"maximum":100},{"type":"null"}]}}}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"faq"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"categoryId":{"type":"string","minLength":1,"maxLength":50}},"required":["categoryId"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"event"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"eventId":{"type":"string","minLength":1,"maxLength":50}},"required":["eventId"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"event_group"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"eventGroupId":{"type":"string","minLength":1,"maxLength":50},"limit":{"type":"integer","minimum":1,"maximum":12}},"required":["eventGroupId","limit"]}},"required":["type","settings"]}]}},"status":{"type":"string","enum":["draft","published"]}},"required":["slug","title","sections"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/pages/{pageId}":{"get":{"tags":["Dashboard API"],"summary":"GET /pages/[pageId]","description":"The portal's `pages` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_pages_pageId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pageId","in":"path","required":true,"description":"The pageId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /pages/[pageId]","description":"The portal's `pages` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_pages_pageId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pageId","in":"path","required":true,"description":"The pageId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":200},"showTitle":{"type":"boolean"},"sections":{"minItems":1,"maxItems":50,"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"rich_text"},"body":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}}},"required":["type","body"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"hero"},"settings":{"type":"object","properties":{"layout":{"type":"string","enum":["overlay","split"]},"imageId":{"type":"string","minLength":1,"maxLength":50},"headline":{"type":"string","minLength":1,"maxLength":120},"text":{"type":"string","maxLength":300},"buttonLabel":{"type":"string","maxLength":40},"buttonLink":{"anyOf":[{"type":"string","maxLength":500,"pattern":"^(\\/(?!\\/)|https?:\\/\\/)"},{"type":"string","const":""}]}},"required":["layout","imageId","headline"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"image_text"},"body":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"settings":{"type":"object","properties":{"imageId":{"type":"string","minLength":1,"maxLength":50},"imageSide":{"type":"string","enum":["left","right"]},"buttonLabel":{"type":"string","maxLength":40},"buttonLink":{"anyOf":[{"type":"string","maxLength":500,"pattern":"^(\\/(?!\\/)|https?:\\/\\/)"},{"type":"string","const":""}]}},"required":["imageId","imageSide"]}},"required":["type","body","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"highlights"},"settings":{"type":"object","properties":{"items":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"icon":{"type":"string","enum":["truck","clock","shield","star","gift","leaf","heart","tag","phone","returns"]},"title":{"type":"string","minLength":1,"maxLength":60},"text":{"type":"string","maxLength":140}},"required":["icon","title"]}}},"required":["items"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"product_row"},"settings":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":80},"source":{"type":"string","enum":["category","products","newest","on_offer"]},"categoryId":{"type":"string","minLength":1,"maxLength":50},"productIds":{"maxItems":24,"type":"array","items":{"type":"string","minLength":1,"maxLength":50}},"limit":{"type":"integer","minimum":1,"maximum":12}},"required":["title","source","limit"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"category_tiles"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"style":{"type":"string","enum":["photo","circle"]},"categoryIds":{"maxItems":24,"type":"array","items":{"type":"string","minLength":1,"maxLength":50}}},"required":["style","categoryIds"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"announcements"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000},{"type":"null"}]},"pageSize":{"anyOf":[{"type":"integer","minimum":1,"maximum":100},{"type":"null"}]}}}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"faq"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"categoryId":{"type":"string","minLength":1,"maxLength":50}},"required":["categoryId"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"event"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"eventId":{"type":"string","minLength":1,"maxLength":50}},"required":["eventId"]}},"required":["type","settings"]},{"type":"object","properties":{"id":{"type":"string","maxLength":50},"type":{"type":"string","const":"event_group"},"settings":{"type":"object","properties":{"title":{"type":"string","maxLength":80},"eventGroupId":{"type":"string","minLength":1,"maxLength":50},"limit":{"type":"integer","minimum":1,"maximum":12}},"required":["eventGroupId","limit"]}},"required":["type","settings"]}]}},"status":{"type":"string","enum":["draft","published","archived"]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /pages/[pageId]","description":"The portal's `pages` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_pages_pageId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pageId","in":"path","required":true,"description":"The pageId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/pages/{pageId}/access":{"get":{"tags":["Dashboard API"],"summary":"GET /pages/[pageId]/access","description":"The portal's `pages` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_pages_pageId_access","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pageId","in":"path","required":true,"description":"The pageId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /pages/[pageId]/access","description":"The portal's `pages` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_pages_pageId_access","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pageId","in":"path","required":true,"description":"The pageId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"accessor":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"level":{"type":"string","enum":["hidden","protected","allowed"]}},"required":["accessor","level"]}}},"required":["rows"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/payment-account":{"get":{"tags":["Dashboard API"],"summary":"GET /payment-account","description":"The portal's `integrations` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_payment_account","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /payment-account","description":"The portal's `integrations` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_delete_payment_account","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/payment-methods":{"get":{"tags":["Dashboard API"],"summary":"GET /payment-methods","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_payment_methods","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/payment-methods/checkout":{"post":{"tags":["Dashboard API"],"summary":"POST /payment-methods/checkout","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_post_payment_methods_checkout","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/payment-methods/order":{"put":{"tags":["Dashboard API"],"summary":"PUT /payment-methods/order","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_put_payment_methods_order","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ids":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}}},"required":["ids"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/payment-methods/{paymentMethodId}":{"delete":{"tags":["Dashboard API"],"summary":"DELETE /payment-methods/[paymentMethodId]","description":"The portal's `billing` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_delete_payment_methods_paymentMethodId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"paymentMethodId","in":"path","required":true,"description":"The paymentMethodId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/plans":{"get":{"tags":["Dashboard API"],"summary":"GET /plans","description":"The portal's `plans` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_plans","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /plans","description":"The portal's `plans` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_plans","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"isEnabled":{"type":"boolean"},"isPublic":{"type":"boolean"}},"required":["name","isEnabled","isPublic"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/plans/{planId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /plans/[planId]","description":"The portal's `plans` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_plans_planId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"planId","in":"path","required":true,"description":"The planId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"isEnabled":{"type":"boolean"},"isPublic":{"type":"boolean"}},"required":["name","isEnabled","isPublic"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /plans/[planId]","description":"The portal's `plans` area, reached through the gateway. Requires the connecting user to be an owner of the portal.","operationId":"v11_delete_plans_planId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"planId","in":"path","required":true,"description":"The planId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/policies/{kind}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /policies/[kind]","description":"The portal's `policies` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_policies_kind","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"kind","in":"path","required":true,"description":"The kind.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"bodyType":{"type":"string","const":"rich_text"},"body":{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{}}},"required":["type"]}},"required":["bodyType","body"]},{"type":"object","properties":{"bodyType":{"type":"string","const":"external_link"},"externalUrl":{"type":"string","maxLength":2048,"format":"uri"},"externalUpdatedAt":{}},"required":["bodyType","externalUrl","externalUpdatedAt"]}]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/polls":{"get":{"tags":["Dashboard API"],"summary":"GET /polls","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_polls","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /polls","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_polls","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"isPublished":{"type":"boolean"},"closesAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["title","closesAt"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/polls/{pollId}":{"get":{"tags":["Dashboard API"],"summary":"GET /polls/[pollId]","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_polls_pollId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /polls/[pollId]","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_polls_pollId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"isPublished":{"type":"boolean"},"closesAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"closedAt":{"type":"null"}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /polls/[pollId]","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_polls_pollId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/polls/{pollId}/access":{"get":{"tags":["Dashboard API"],"summary":"GET /polls/[pollId]/access","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_polls_pollId_access","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Dashboard API"],"summary":"PUT /polls/[pollId]/access","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_polls_pollId_access","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"accessor":{"type":"string","enum":["anonymous","authenticated","plan"]},"planId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"level":{"type":"string","enum":["hidden","protected","allowed"]}},"required":["accessor","level"]}}},"required":["rows"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/polls/{pollId}/close":{"post":{"tags":["Dashboard API"],"summary":"POST /polls/[pollId]/close","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_polls_pollId_close","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/polls/{pollId}/questions":{"put":{"tags":["Dashboard API"],"summary":"PUT /polls/[pollId]/questions","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_polls_pollId_questions","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"questions":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":300},"type":{"default":"single","type":"string","enum":["single","multiple"]},"options":{"minItems":2,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["text","options"]}}},"required":["questions"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/polls/{pollId}/results":{"get":{"tags":["Dashboard API"],"summary":"GET /polls/[pollId]/results","description":"The portal's `polls` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_polls_pollId_results","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"pollId","in":"path","required":true,"description":"The pollId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/product-categories":{"get":{"tags":["Dashboard API"],"summary":"GET /product-categories","description":"The portal's `product-categories` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_product_categories","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /product-categories","description":"The portal's `product-categories` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_product_categories","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"imageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":50},{"type":"null"}]},"position":{"type":"integer","minimum":0,"maximum":9999},"isActive":{"type":"boolean"}},"required":["name","slug"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/product-categories/{categoryId}":{"get":{"tags":["Dashboard API"],"summary":"GET /product-categories/[categoryId]","description":"The portal's `product-categories` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_product_categories_categoryId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /product-categories/[categoryId]","description":"The portal's `product-categories` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_product_categories_categoryId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"imageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":50},{"type":"null"}]},"position":{"type":"integer","minimum":0,"maximum":9999},"isActive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /product-categories/[categoryId]","description":"The portal's `product-categories` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_product_categories_categoryId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"categoryId","in":"path","required":true,"description":"The categoryId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/product-fields":{"get":{"tags":["Dashboard API"],"summary":"GET /product-fields","description":"The portal's `product-fields` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_product_fields","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /product-fields","description":"The portal's `product-fields` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_product_fields","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["number","text","rich_text","boolean","enum"]},"options":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"label":{"type":"string","minLength":1,"maxLength":100}},"required":["id","label"]}},"position":{"type":"integer","minimum":0,"maximum":9999},"showOnPortal":{"type":"boolean"}},"required":["label","type"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/product-fields/{fieldId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /product-fields/[fieldId]","description":"The portal's `product-fields` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_product_fields_fieldId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"fieldId","in":"path","required":true,"description":"The fieldId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"position":{"type":"integer","minimum":0,"maximum":9999},"options":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"label":{"type":"string","minLength":1,"maxLength":100}},"required":["id","label"]}},"showOnPortal":{"type":"boolean"}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /product-fields/[fieldId]","description":"The portal's `product-fields` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_product_fields_fieldId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"fieldId","in":"path","required":true,"description":"The fieldId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/products":{"get":{"tags":["Dashboard API"],"summary":"GET /products","description":"The portal's `products` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_products","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /products","description":"The portal's `products` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_products","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"slug":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"summary":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"type":{"type":"string","enum":["physical","digital"]},"description":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"isActive":{"type":"boolean"},"position":{"type":"integer","minimum":0,"maximum":9999},"mainCategoryId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"photoIds":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"defaultPrice":{"anyOf":[{"type":"object","properties":{"amountCents":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","enum":["GBP","USD","EUR"]},"vatClassificationId":{"default":null,"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["amountCents","currency"]},{"type":"null"}]},"planPrices":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","enum":["GBP","USD","EUR"]},"vatClassificationId":{"default":null,"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"planId":{"type":"string","minLength":1}},"required":["amountCents","currency","planId"]}},"fieldValues":{"type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"number"},{"type":"boolean"},{"type":"string","maxLength":5000},{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}}]},{"type":"null"}]}}},"required":["name","slug"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/products/{productId}":{"get":{"tags":["Dashboard API"],"summary":"GET /products/[productId]","description":"The portal's `products` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_products_productId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"productId","in":"path","required":true,"description":"The productId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /products/[productId]","description":"The portal's `products` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_products_productId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"productId","in":"path","required":true,"description":"The productId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"slug":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"summary":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"type":{"type":"string","enum":["physical","digital"]},"description":{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}},"isActive":{"type":"boolean"},"position":{"type":"integer","minimum":0,"maximum":9999},"mainCategoryId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"photoIds":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"defaultPrice":{"anyOf":[{"type":"object","properties":{"amountCents":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","enum":["GBP","USD","EUR"]},"vatClassificationId":{"default":null,"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["amountCents","currency"]},{"type":"null"}]},"planPrices":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":0,"maximum":100000000},"currency":{"type":"string","enum":["GBP","USD","EUR"]},"vatClassificationId":{"default":null,"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"planId":{"type":"string","minLength":1}},"required":["amountCents","currency","planId"]}},"fieldValues":{"type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"number"},{"type":"boolean"},{"type":"string","maxLength":5000},{"$id":"https://formaportal.com/schemas/rich-text.json","description":"A Tiptap (ProseMirror) JSON document: { type: \"doc\", content: [block, …] }. Must contain some text or an embed. Nodes and marks outside this list are not rendered.","type":"object","required":["type"],"properties":{"type":{"const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}},"$defs":{"block":{"oneOf":[{"$ref":"#/$defs/paragraph"},{"$ref":"#/$defs/heading"},{"$ref":"#/$defs/bulletList"},{"$ref":"#/$defs/orderedList"},{"$ref":"#/$defs/blockquote"},{"$ref":"#/$defs/codeBlock"},{"$ref":"#/$defs/horizontalRule"},{"$ref":"#/$defs/youtube"},{"$ref":"#/$defs/iframeEmbed"},{"$ref":"#/$defs/formEmbed"},{"$ref":"#/$defs/imageEmbed"},{"$ref":"#/$defs/fileEmbed"}]},"inline":{"oneOf":[{"$ref":"#/$defs/text"},{"$ref":"#/$defs/hardBreak"}]},"text":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"$ref":"#/$defs/mark"}}}},"hardBreak":{"type":"object","required":["type"],"properties":{"type":{"const":"hardBreak"}}},"mark":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"enum":["bold","italic","strike","underline","code"]}}},{"type":"object","required":["type","attrs"],"description":"Text colour.","properties":{"type":{"const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"type":["string","null"],"description":"A CSS colour, e.g. #1d4ed8."}}}}},{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"link"},"attrs":{"type":"object","required":["href"],"properties":{"href":{"type":"string","description":"An absolute http(s) address, a mailto: address, or a tel: phone number (e.g. tel:+441234567890)."}}}}}]},"paragraph":{"type":"object","required":["type"],"properties":{"type":{"const":"paragraph"},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"heading":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"heading"},"attrs":{"type":"object","required":["level"],"properties":{"level":{"enum":[1,2,3,4,5,6],"description":"The editor offers 1 and 2."}}},"content":{"type":"array","items":{"$ref":"#/$defs/inline"}}}},"listItem":{"type":"object","required":["type","content"],"description":"Starts with a paragraph; may hold nested lists.","properties":{"type":{"const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"bulletList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"bulletList"},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"orderedList":{"type":"object","required":["type","content"],"properties":{"type":{"const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"type":"integer","minimum":1}}},"content":{"type":"array","items":{"$ref":"#/$defs/listItem"}}}},"blockquote":{"type":"object","required":["type","content"],"properties":{"type":{"const":"blockquote"},"content":{"type":"array","items":{"$ref":"#/$defs/block"}}}},"codeBlock":{"type":"object","required":["type"],"properties":{"type":{"const":"codeBlock"},"content":{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string","minLength":1}}}}}},"horizontalRule":{"type":"object","required":["type"],"properties":{"type":{"const":"horizontalRule"}}},"youtube":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"youtube"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"A YouTube video URL."}}}}},"iframeEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"iframeEmbed"},"attrs":{"type":"object","required":["src"],"properties":{"src":{"type":"string","description":"An https embed URL from an allowed provider: YouTube, Vimeo, Loom, Google Maps, Spotify, wsptm.com (subdomains included). Anything else is not rendered."}}}}},"formEmbed":{"type":"object","required":["type","attrs"],"description":"A card linking to one of the portal's forms.","properties":{"type":{"const":"formEmbed"},"attrs":{"type":"object","required":["formId","name"],"properties":{"formId":{"type":"string","description":"A form id from GET /forms."},"name":{"type":"string","description":"The card title, usually the form's name."},"description":{"type":["string","null"]},"cta":{"type":"string","description":"The card's button text. A default is used when omitted."}}}}},"imageEmbed":{"type":"object","required":["type","attrs"],"properties":{"type":{"const":"imageEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"An image's id from GET /files (or upload_file)."}}}}},"fileEmbed":{"type":"object","required":["type","attrs"],"description":"A download card for a file.","properties":{"type":{"const":"fileEmbed"},"attrs":{"type":"object","required":["fileId"],"properties":{"fileId":{"type":"string","description":"A file's id from GET /files (or upload_file)."}}}}}}}]},{"type":"null"}]}}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /products/[productId]","description":"The portal's `products` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_products_productId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"productId","in":"path","required":true,"description":"The productId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/reminder-rules":{"get":{"tags":["Dashboard API"],"summary":"GET /reminder-rules","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_reminder_rules","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/reminder-rules/{ruleId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /reminder-rules/[ruleId]","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_reminder_rules_ruleId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"The ruleId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"dateFieldId":{"type":"string","minLength":1},"intervalAmount":{"anyOf":[{"type":"integer","minimum":1,"maximum":1200},{"type":"null"}]},"intervalUnit":{"anyOf":[{"type":"string","enum":["days","months","years"]},{"type":"null"}]},"disableFieldId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"leadDays":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"integer","minimum":0,"maximum":3650}},"overdueEveryDays":{"anyOf":[{"type":"integer","minimum":1,"maximum":365},{"type":"null"}]},"overdueMaxSends":{"anyOf":[{"type":"integer","minimum":1,"maximum":52},{"type":"null"}]},"recipients":{"type":"string","enum":["owners","all_members"]},"editableFieldIds":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"richMessage":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]},"buttonLabel":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"buttonTarget":{"type":"string","enum":["asset","page","external"]},"buttonPageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"buttonUrl":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"isActive":{"type":"boolean"}},"required":["name","dateFieldId","intervalAmount","intervalUnit","disableFieldId","leadDays","overdueEveryDays","overdueMaxSends","recipients","editableFieldIds","richMessage","buttonLabel","buttonTarget","buttonPageId","buttonUrl","isActive"],"$defs":{"__schema0":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"paragraph"},"content":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"bold"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"italic"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"underline"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["#ef4444","#f97316","#f59e0b","#16a34a","#14b8a6","#3b82f6","#6366f1","#a855f7","#ec4899","#6b7280"]},{"type":"null"}]},"fontSize":{"anyOf":[{"type":"string","enum":["small","large"]},{"type":"null"}]}}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"link"},"attrs":{"type":"object","properties":{"href":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"pageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}}}},"required":["type","attrs"]}]}}},"required":["type","text"]},{"type":"object","properties":{"type":{"type":"string","const":"hardBreak"}},"required":["type"]}]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"bulletList"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000},{"type":"null"}]}}},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]}]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /reminder-rules/[ruleId]","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_reminder_rules_ruleId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"The ruleId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/reminder-rules/{ruleId}/preview":{"get":{"tags":["Dashboard API"],"summary":"GET /reminder-rules/[ruleId]/preview","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_reminder_rules_ruleId_preview","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"The ruleId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/reminders":{"get":{"tags":["Dashboard API"],"summary":"GET /reminders","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_reminders","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"ruleId","in":"query","required":false,"description":"The ruleId.","schema":{"type":"string"}},{"name":"state","in":"query","required":false,"description":"The state.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-records/{recordId}/reminders":{"get":{"tags":["Dashboard API"],"summary":"GET /resource-records/[recordId]/reminders","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_resource_records_recordId_reminders","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"description":"The recordId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-records/{recordId}/reminders/{ruleId}/preview":{"get":{"tags":["Dashboard API"],"summary":"GET /resource-records/[recordId]/reminders/[ruleId]/preview","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_resource_records_recordId_reminders_ruleId_preview","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"description":"The recordId.","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"The ruleId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-records/{recordId}/reminders/{ruleId}/send":{"post":{"tags":["Dashboard API"],"summary":"POST /resource-records/[recordId]/reminders/[ruleId]/send","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_post_resource_records_recordId_reminders_ruleId_send","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"description":"The recordId.","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"The ruleId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-types":{"get":{"tags":["Dashboard API"],"summary":"GET /resource-types","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_resource_types","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /resource-types","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_resource_types","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":60,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"properties":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["string","integer","boolean","enum","date","price","resource","file"]},"isArray":{"type":"boolean"},"isDisplay":{"type":"boolean"},"targetResourceTypeId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"options":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"label":{"type":"string","minLength":1,"maxLength":100}},"required":["id","label"]}},"currencies":{"type":"array","items":{"type":"string","enum":["GBP","USD","EUR"]}},"defaultCurrency":{"anyOf":[{"type":"string","enum":["GBP","USD","EUR"]},{"type":"null"}]},"fileKind":{"type":"string","enum":["any","image","pdf","office"]},"fallbackValue":{}},"required":["name","type","isArray","isDisplay"]}},"views":{"default":[],"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":60,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"items":{"default":[],"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","enum":["property","title","subtitle","text"]},"propertyId":{"type":"string","minLength":1},"display":{"type":"string","enum":["link","sheet","inline"]},"inlineFieldIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}},"content":{"type":"string","maxLength":200},"body":{}},"required":["kind"]}}},"required":["name","slug"]}},"contactAccess":{"default":{"canCreate":false,"createFieldIds":[],"canEdit":false,"editFieldIds":[]},"type":"object","properties":{"canCreate":{"type":"boolean"},"createFieldIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"canEdit":{"type":"boolean"},"editFieldIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1}}},"required":["canCreate","createFieldIds","canEdit","editFieldIds"]}},"required":["name","slug"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-types/{resourceTypeId}":{"get":{"tags":["Dashboard API"],"summary":"GET /resource-types/[resourceTypeId]","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_resource_types_resourceTypeId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /resource-types/[resourceTypeId]","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_resource_types_resourceTypeId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"properties":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"type":{"type":"string","enum":["string","integer","boolean","enum","date","price","resource","file"]},"isArray":{"type":"boolean"},"isDisplay":{"type":"boolean"},"targetResourceTypeId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"options":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"label":{"type":"string","minLength":1,"maxLength":100}},"required":["id","label"]}},"currencies":{"type":"array","items":{"type":"string","enum":["GBP","USD","EUR"]}},"defaultCurrency":{"anyOf":[{"type":"string","enum":["GBP","USD","EUR"]},{"type":"null"}]},"fileKind":{"type":"string","enum":["any","image","pdf","office"]},"fallbackValue":{}},"required":["name","type","isArray","isDisplay"]}},"views":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":60,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"items":{"default":[],"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","enum":["property","title","subtitle","text"]},"propertyId":{"type":"string","minLength":1},"display":{"type":"string","enum":["link","sheet","inline"]},"inlineFieldIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}},"content":{"type":"string","maxLength":200},"body":{}},"required":["kind"]}}},"required":["name","slug"]}},"contactAccess":{"type":"object","properties":{"canCreate":{"type":"boolean"},"createFieldIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1}},"canEdit":{"type":"boolean"},"editFieldIds":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1}}},"required":["canCreate","createFieldIds","canEdit","editFieldIds"]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /resource-types/[resourceTypeId]","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_resource_types_resourceTypeId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-types/{resourceTypeId}/records":{"get":{"tags":["Dashboard API"],"summary":"GET /resource-types/[resourceTypeId]/records","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_resource_types_resourceTypeId_records","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"accountId","in":"query","required":false,"description":"The accountId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /resource-types/[resourceTypeId]/records","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_post_resource_types_resourceTypeId_records","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"The search.","schema":{"type":"string"}},{"name":"accountId","in":"query","required":false,"description":"The accountId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accountId":{"type":"string","minLength":1},"values":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["accountId"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-types/{resourceTypeId}/records/{recordId}":{"get":{"tags":["Dashboard API"],"summary":"GET /resource-types/[resourceTypeId]/records/[recordId]","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_resource_types_resourceTypeId_records_recordId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"description":"The recordId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /resource-types/[resourceTypeId]/records/[recordId]","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_patch_resource_types_resourceTypeId_records_recordId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"description":"The recordId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accountId":{"type":"string","minLength":1},"values":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /resource-types/[resourceTypeId]/records/[recordId]","description":"The portal's `resources` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_delete_resource_types_resourceTypeId_records_recordId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"description":"The recordId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/resource-types/{resourceTypeId}/reminder-rules":{"get":{"tags":["Dashboard API"],"summary":"GET /resource-types/[resourceTypeId]/reminder-rules","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_resource_types_resourceTypeId_reminder_rules","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /resource-types/[resourceTypeId]/reminder-rules","description":"The portal's `reminders` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_resource_types_resourceTypeId_reminder_rules","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"resourceTypeId","in":"path","required":true,"description":"The resourceTypeId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"dateFieldId":{"type":"string","minLength":1},"intervalAmount":{"anyOf":[{"type":"integer","minimum":1,"maximum":1200},{"type":"null"}]},"intervalUnit":{"anyOf":[{"type":"string","enum":["days","months","years"]},{"type":"null"}]},"disableFieldId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"leadDays":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"integer","minimum":0,"maximum":3650}},"overdueEveryDays":{"anyOf":[{"type":"integer","minimum":1,"maximum":365},{"type":"null"}]},"overdueMaxSends":{"anyOf":[{"type":"integer","minimum":1,"maximum":52},{"type":"null"}]},"recipients":{"type":"string","enum":["owners","all_members"]},"editableFieldIds":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"richMessage":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"doc"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]},{"type":"null"}]},"buttonLabel":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"buttonTarget":{"type":"string","enum":["asset","page","external"]},"buttonPageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"buttonUrl":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"isActive":{"type":"boolean"}},"required":["name","dateFieldId","intervalAmount","intervalUnit","disableFieldId","leadDays","overdueEveryDays","overdueMaxSends","recipients","editableFieldIds","richMessage","buttonLabel","buttonTarget","buttonPageId","buttonUrl","isActive"],"$defs":{"__schema0":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"paragraph"},"content":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"text"},"text":{"type":"string","minLength":1},"marks":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"bold"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"italic"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"underline"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"textStyle"},"attrs":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["#ef4444","#f97316","#f59e0b","#16a34a","#14b8a6","#3b82f6","#6366f1","#a855f7","#ec4899","#6b7280"]},{"type":"null"}]},"fontSize":{"anyOf":[{"type":"string","enum":["small","large"]},{"type":"null"}]}}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"link"},"attrs":{"type":"object","properties":{"href":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"pageId":{"anyOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]}}}},"required":["type","attrs"]}]}}},"required":["type","text"]},{"type":"object","properties":{"type":{"type":"string","const":"hardBreak"}},"required":["type"]}]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"bulletList"},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"orderedList"},"attrs":{"type":"object","properties":{"start":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000},{"type":"null"}]}}},"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"listItem"},"content":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"required":["type"]}}},"required":["type"]}]}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/submissions":{"get":{"tags":["Dashboard API"],"summary":"GET /submissions","description":"The portal's `submissions` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_submissions","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"accountId","in":"query","required":false,"description":"The accountId.","schema":{"type":"string"}},{"name":"contactId","in":"query","required":false,"description":"The contactId.","schema":{"type":"string"}},{"name":"formId","in":"query","required":false,"description":"The formId.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"The page.","schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"description":"The pageSize.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"The sortBy.","schema":{"type":"string"}},{"name":"sortDir","in":"query","required":false,"description":"The sortDir.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"The status.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/submissions/{submissionId}":{"get":{"tags":["Dashboard API"],"summary":"GET /submissions/[submissionId]","description":"The portal's `submissions` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_submissions_submissionId","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"submissionId","in":"path","required":true,"description":"The submissionId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /submissions/[submissionId]","description":"The portal's `submissions` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_submissions_submissionId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"submissionId","in":"path","required":true,"description":"The submissionId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"answers":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","minLength":1},"value":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"extension":{"type":"string"},"fileType":{"type":"string"}},"required":["id","fileName","extension","fileType"]}}]}},"required":["fieldId","value"]}}}}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/submissions/{submissionId}/audit":{"get":{"tags":["Dashboard API"],"summary":"GET /submissions/[submissionId]/audit","description":"The portal's `submissions` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_submissions_submissionId_audit","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"submissionId","in":"path","required":true,"description":"The submissionId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/team":{"get":{"tags":["Dashboard API"],"summary":"GET /team","description":"The portal's `team` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_team","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /team","description":"The portal's `team` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_team","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"role":{"type":"string","enum":["owner","admin","staff"]}},"required":["email","role"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/team/invitations":{"get":{"tags":["Dashboard API"],"summary":"GET /team/invitations","description":"The portal's `team` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_team_invitations","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/team/invitations/{invitationId}":{"post":{"tags":["Dashboard API"],"summary":"POST /team/invitations/[invitationId]","description":"The portal's `team` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_team_invitations_invitationId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"invitationId","in":"path","required":true,"description":"The invitationId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /team/invitations/[invitationId]","description":"The portal's `team` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_team_invitations_invitationId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"invitationId","in":"path","required":true,"description":"The invitationId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/team/{memberId}":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /team/[memberId]","description":"The portal's `team` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_team_memberId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"description":"The memberId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"role":{"type":"string","enum":["owner","admin","staff"]}},"required":["role"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /team/[memberId]","description":"The portal's `team` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_team_memberId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"description":"The memberId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/theme":{"patch":{"tags":["Dashboard API"],"summary":"PATCH /theme","description":"The portal's `theme` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_theme","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"primaryColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"secondaryColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"additionalColors":{"maxItems":12,"type":"array","items":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"font":{"type":"string","enum":["Inter","Roboto","Open Sans","Lato","Poppins","Nunito","DM Sans","Raleway","Montserrat","Merriweather","Playfair Display"]}},"required":["primaryColor","secondaryColor","additionalColors","font"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/usage":{"get":{"tags":["Dashboard API"],"summary":"GET /usage","description":"The portal's `usage` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_usage","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/usage/monthly":{"get":{"tags":["Dashboard API"],"summary":"GET /usage/monthly","description":"The portal's `usage` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_usage_monthly","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"month","in":"query","required":false,"description":"The month.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/vat-classifications":{"get":{"tags":["Dashboard API"],"summary":"GET /vat-classifications","description":"The portal's `vat-classifications` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_vat_classifications","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Dashboard API"],"summary":"POST /vat-classifications","description":"The portal's `vat-classifications` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_post_vat_classifications","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"rateBasisPoints":{"type":"integer","minimum":0,"maximum":10000},"position":{"type":"integer","minimum":0,"maximum":9999}},"required":["name","rateBasisPoints"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/vat-classifications/{vatClassificationId}":{"put":{"tags":["Dashboard API"],"summary":"PUT /vat-classifications/[vatClassificationId]","description":"The portal's `vat-classifications` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_put_vat_classifications_vatClassificationId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"vatClassificationId","in":"path","required":true,"description":"The vatClassificationId.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"rateBasisPoints":{"type":"integer","minimum":0,"maximum":10000},"position":{"type":"integer","minimum":0,"maximum":9999}},"required":["name","rateBasisPoints"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Dashboard API"],"summary":"DELETE /vat-classifications/[vatClassificationId]","description":"The portal's `vat-classifications` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_vat_classifications_vatClassificationId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"vatClassificationId","in":"path","required":true,"description":"The vatClassificationId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/webhook-events":{"get":{"tags":["Dashboard API"],"summary":"GET /webhook-events","description":"The portal's `webhook-events` area, reached through the gateway. Requires the connecting user to be staff, admin or owner of the portal.","operationId":"v11_get_webhook_events","security":[{"oauth2":["events:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"event","in":"query","required":true,"description":"Which event to sample: `form_submission` or `contact_registered`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Recent events, newest first, in exactly the shape the webhook pushes — so what you map here is what arrives later.","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/FormSubmission"},{"$ref":"#/components/schemas/Contact"}]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/zapier":{"get":{"tags":["Dashboard API"],"summary":"GET /zapier","description":"The portal's `zapier` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_get_zapier","security":[{"oauth2":["api:read"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Dashboard API"],"summary":"PATCH /zapier","description":"The portal's `zapier` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_patch_zapier","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"formSubmissionEnabled":{"type":"boolean"},"contactRegisteredEnabled":{"type":"boolean"}},"required":["formSubmissionEnabled","contactRegisteredEnabled"]}}}},"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/portals/{portalId}/zapier/connections/{connectionId}":{"delete":{"tags":["Dashboard API"],"summary":"DELETE /zapier/connections/[connectionId]","description":"The portal's `zapier` area, reached through the gateway. Requires the connecting user to be an admin or owner of the portal.","operationId":"v11_delete_zapier_connections_connectionId","security":[{"oauth2":["api:write"]}],"parameters":[{"name":"portalId","in":"path","required":true,"description":"A portal this connection covers. Get the list from GET /api/v1.1/portals.","schema":{"type":"string"}},{"name":"connectionId","in":"path","required":true,"description":"The connectionId.","schema":{"type":"string"}}],"responses":{"200":{"description":"The dashboard endpoint's own response."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks the scope, the connection does not cover this portal, or the connecting user lacks the role this endpoint needs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/me":{"get":{"tags":["Connection"],"summary":"Identify the connection","description":"What this connection is, who authorised it, and every portal it covers. `label` is a single display string (`Acme Portal +2` where a connection spans several) for labelling the connection in your UI. Doubles as a connection test.","operationId":"getMeV11","security":[{"oauth2":["events:read"]}],"responses":{"200":{"description":"The connection.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Connection id."},"label":{"type":"string","example":"Acme Portal +2"},"email":{"type":"string","nullable":true},"connectedBy":{"type":"string","nullable":true},"portals":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","label","portals"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/v1.1/portals":{"get":{"tags":["Connection"],"summary":"List the portals this connection covers","description":"Every portal the user ticked when authorising. Each id here is one a `/api/v1.1/portals/{portalId}/...` call may name; any other is refused. Use this to populate a portal picker, and as a connection test.","operationId":"listConnectionPortals","security":[{"oauth2":["events:read"]}],"responses":{"200":{"description":"The portals, by name.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"portal1234"},"name":{"type":"string","example":"Acme Portal"}},"required":["id","name"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/v1.1/webhooks":{"get":{"tags":["Webhooks"],"summary":"List your subscriptions","description":"Every subscription this connection holds, across all the portals it covers.","operationId":"listSubscriptionsV11","security":[{"oauth2":["webhooks:write"]}],"responses":{"200":{"description":"Subscriptions, newest first.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSubscription"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}},"post":{"tags":["Webhooks"],"summary":"Subscribe to an event","description":"Start receiving an event for one portal. `portalId` is required — a\nconnection covers several portals, so a subscription has to say which.\n\nRe-subscribing the same URL for the same portal and event is idempotent, so a\nretried call does not double-deliver. The same URL for a **different** portal\nis a separate subscription, which is how one integration listens to several\nportals.\n\n`targetUrl` must be a public HTTPS URL. Anything resolving to a loopback,\nprivate, link-local or CGNAT address is refused, here and again at delivery.","operationId":"subscribeV11","security":[{"oauth2":["webhooks:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"portalId":{"type":"string","description":"A portal from GET /api/v1.1/portals.","example":"portal1234"},"event":{"type":"string","enum":["form_submission","contact_registered"]},"targetUrl":{"type":"string","format":"uri","description":"Where to POST the event. `hookUrl` and `target_url` are accepted as aliases."}},"required":["portalId","event","targetUrl"]}}}},"responses":{"201":{"description":"The subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscription"}}}},"400":{"description":"Missing field, unknown event, or an unusable targetUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The token lacks `webhooks:write`, or this connection does not cover that portal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1.1/webhooks/{id}":{"delete":{"tags":["Webhooks"],"summary":"Unsubscribe","description":"Stop delivering. Scoped to this connection, so an id belonging to another connection deletes nothing. Removing an already-gone subscription succeeds with `deleted: 0` — retrying an unsubscribe must not fail.","operationId":"unsubscribeV11","security":[{"oauth2":["webhooks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The subscription id returned when you subscribed.","schema":{"type":"string"}}],"responses":{"200":{"description":"How many subscriptions were removed — 1, or 0 if it was already gone.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"integer","example":1}},"required":["deleted"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/v1/me":{"get":{"tags":["Account (v1, deprecated)"],"deprecated":true,"summary":"Identify the connection","description":"Returns the portal this token is bound to and who authorised it. Useful as a connection test and for labelling the connection in your UI.","operationId":"getMe","security":[{"oauth2":["portal:read"]}],"responses":{"200":{"description":"The connection.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Connection id."},"portalId":{"type":"string"},"portalName":{"type":"string","example":"Acme Portal"},"email":{"type":"string","nullable":true},"connectedBy":{"type":"string","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/v1/form-submissions":{"get":{"tags":["Form submissions (v1, deprecated)"],"deprecated":true,"summary":"List recent form submissions","description":"The 25 most recent submissions for the token's portal, newest first. Intended for sample data and backfill; use a webhook for live events.","operationId":"listFormSubmissions","security":[{"oauth2":["submissions:read"]}],"responses":{"200":{"description":"Submissions, newest first.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormSubmission"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/v1/contacts":{"get":{"tags":["Contacts (v1, deprecated)"],"deprecated":true,"summary":"List recent contacts","description":"The 25 most recent contacts for the token's portal, newest first. `source` is reported as `staff` here because a stored contact does not record how it was created; the webhook payload carries the real value.","operationId":"listContacts","security":[{"oauth2":["contacts:read"]}],"responses":{"200":{"description":"Contacts, newest first.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/v1/webhooks":{"get":{"tags":["Webhooks (v1, deprecated)"],"deprecated":true,"summary":"List your subscriptions","description":"Every subscription belonging to the calling connection.","operationId":"listWebhooks","security":[{"oauth2":["webhooks:write"]}],"responses":{"200":{"description":"Subscriptions.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSubscription"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}},"post":{"tags":["Webhooks (v1, deprecated)"],"deprecated":true,"summary":"Subscribe to an event","description":"Registers a URL to receive an event. Re-subscribing the same URL for the same\nevent is idempotent and returns the existing subscription.\n\nThe target must be a public HTTPS URL. Anything resolving to a loopback,\nprivate, link-local or carrier-NAT address is rejected, credentials in the URL\nare rejected, and redirects are never followed.","operationId":"subscribeWebhook","security":[{"oauth2":["webhooks:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"event":{"type":"string","enum":["form_submission","contact_registered"]},"hookUrl":{"type":"string","format":"uri","description":"Where to POST the event. `target_url` and `targetUrl` are accepted as aliases."}},"required":["event","hookUrl"]},"example":{"event":"form_submission","hookUrl":"https://hooks.example.com/abc123"}}}},"responses":{"201":{"description":"Subscribed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscription"}}}},"400":{"description":"Unknown event, or a target URL that is not a public HTTPS address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/v1/webhooks/{id}":{"delete":{"tags":["Webhooks (v1, deprecated)"],"deprecated":true,"summary":"Unsubscribe","description":"Removes a subscription belonging to the calling connection. Deleting one that is already gone succeeds, so retries are safe.","operationId":"unsubscribeWebhook","security":[{"oauth2":["webhooks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Subscription id returned when subscribing."}],"responses":{"200":{"description":"Removed (or already absent).","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"integer","example":1}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/api/oauth/token":{"post":{"tags":["OAuth"],"summary":"Exchange or refresh tokens","description":"Form-encoded (`application/x-www-form-urlencoded`); JSON is also accepted.\nClient credentials may be sent in the body or via HTTP Basic.\n\n`grant_type=authorization_code` requires `code`, `code_verifier` and\n`redirect_uri`. `grant_type=refresh_token` requires `refresh_token` — and, for\nconfidential clients, the client credentials as well.","operationId":"token","security":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"grant_type":{"type":"string","enum":["authorization_code","refresh_token"]},"code":{"type":"string"},"code_verifier":{"type":"string"},"redirect_uri":{"type":"string","format":"uri"},"refresh_token":{"type":"string"},"client_id":{"type":"string"},"client_secret":{"type":"string"}},"required":["grant_type"]}}}},"responses":{"200":{"description":"Tokens.","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","example":"Bearer"},"expires_in":{"type":"integer","example":3600},"refresh_token":{"type":"string"},"scope":{"type":"string"}}}}}},"400":{"description":"`invalid_request`, `invalid_grant` (bad, expired or replayed code, or failed PKCE) or `unsupported_grant_type`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`invalid_client` — client authentication failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/oauth/revoke":{"post":{"tags":["OAuth"],"summary":"Revoke a token","description":"RFC 7009. Accepts an access or refresh token and always returns 200, including for a token that was never issued.","operationId":"revoke","security":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"Revoked, or nothing to do."}}}},"/api/oauth/register":{"post":{"tags":["OAuth"],"summary":"Register a client","description":"RFC 7591 Dynamic Client Registration. Unauthenticated — that is what\n\"dynamic\" means. Every registration is issued a public client scoped to\n`mcp:read`, regardless of what the request asks for.","operationId":"registerClient","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"client_name":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["redirect_uris"]}}}},"responses":{"201":{"description":"The registered client.","content":{"application/json":{"schema":{"type":"object","properties":{"client_id":{"type":"string"},"client_name":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string"}},"grant_types":{"type":"array","items":{"type":"string"}},"response_types":{"type":"array","items":{"type":"string"}},"token_endpoint_auth_method":{"type":"string","example":"none"},"scope":{"type":"string","example":"mcp:read"}}}}}},"400":{"description":"`invalid_client_metadata` or `invalid_redirect_uri`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["OAuth"],"summary":"Authorization server metadata","description":"RFC 8414 discovery document.","operationId":"authorizationServerMetadata","security":[],"responses":{"200":{"description":"Metadata."}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["OAuth"],"summary":"Protected resource metadata","description":"RFC 9728 discovery document.","operationId":"protectedResourceMetadata","security":[],"responses":{"200":{"description":"Metadata."}}}}},"x-webhooks":{"form_submission":{"summary":"A form was submitted","description":"POSTed to every URL subscribed to `form_submission`, unless the portal has switched that event off in Settings → Integrations.","payload":{"$ref":"#/components/schemas/FormSubmission"}},"contact_registered":{"summary":"A contact was added","description":"POSTed to every URL subscribed to `contact_registered`. Fires for self-registrations, invitations and staff-created contacts alike — filter on `source` if you only want one.","payload":{"$ref":"#/components/schemas/Contact"}}}}