openapi: 3.2.0 info: title: Ironfang Audit Notification Preferences API version: 1.0.0 summary: Website audits with findings and signed, independently timestamped evidence. description: Asynchronous website audits with signed, independently timestamped evidence. contact: name: Ironfang email: hello@ironfang.uk url: https://ironfang.com/contact termsOfService: https://ironfang.com/legal/terms license: name: Proprietary - use governed by the Ironfang terms of service url: https://ironfang.com/legal/terms servers: - url: https://api.ironfang.com/audit description: Production security: - bearerAuth: [] - apiKey: [] tags: - name: NotificationPreferences description: How the organisation is notified. paths: /v1/notification-preferences: get: operationId: getNotificationPreferences description: Returns the organisation's selected notification events, recipients and digest preference, together with the available event type catalogue. tags: - NotificationPreferences summary: Which events the organisation is emailed about, to whom, and whether as a daily… responses: '200': description: Preferences and the event type catalogue '401': $ref: '#/components/responses/Problem' description: No credential, or one that is not accepted '403': $ref: '#/components/responses/Problem' description: The key's scopes or the person's role do not allow audit.integrations, or the request names another organisation put: operationId: replaceNotificationPreferences tags: - NotificationPreferences summary: Replace the preferences description: Recipients must be current members of the organisation, checked against Warden with the caller's own token; an API key may keep the list but not change it. Emails carry counts, names and a signed-in portal link - never captured content. requestBody: required: true content: application/json: schema: type: object required: - events - digest - recipients properties: events: type: array items: type: string description: Event names the organisation is emailed about. digest: type: boolean description: Send one daily digest instead of an email per event. recipients: type: array maxItems: 25 items: type: string format: email description: Recipients can only be changed by a signed-in member; an API key may replace events and digest but must send the current recipients unchanged. responses: '200': description: Preferences '422': $ref: '#/components/responses/Problem' components: responses: Problem: description: Problem response content: application/json: schema: type: object properties: error: type: object required: - code - message properties: code: type: string description: Stable machine-readable code. Billing refusals use the codes every Ironfang product shares (BillingCode), with the same status and message whichever product answered; everything else is Ironfang Audit's own. message: type: string docs: type: string format: uri description: Where the errors are documented. example: https://ironfang.com/audit/docs#errors product: type: string description: 'Billing refusals only: the product the refused work belongs to (audit).' meter: type: string description: 'Billing refusals only: the meter that refused, audit.capture or audit.retention_extension.' reset_at: type: string format: date-time description: 'Billing refusals only: when the free allowance renews (the next month''s start, UTC).' request_id: type: string description: The X-Ironfang-Request-ID of the failed request. securitySchemes: apiKey: type: http scheme: bearer bearerFormat: if_live_ platform API key description: 'A platform API key minted in the portal (Warden). Its scopes are its permissions - `audit:read`, `audit:run`, `audit:manage`, `audit:evidence`, `audit:integrations`, or `audit:*` - and it acts only in the organisation it was minted for. Legacy Ironfang Render keys carry no Ironfang Audit scopes and are refused with 403. ' bearerAuth: type: http scheme: bearer bearerFormat: Warden JWT description: 'A Warden user token. Each route also requires a tenant permission in the acting tenant, resolved live from Warden: read routes need `audit.read`; creating sites and rules `audit.manage`; queueing an audit `audit.run`; evidence bundles and raw artifacts `audit.evidence`; webhooks, export destinations and manual exports `audit.integrations`; billing changes `billing.manage`. A missing permission is 403; a permission lookup failure is 503. ' externalDocs: description: Ironfang Audit documentation url: https://ironfang.com/audit/docs