AskNicely · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the AskNicely API

8 actions 8 updates update extends openapi/asknicely-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for AskNicely's API. It is a proposal applied on top of the contract, not a document AskNicely publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-warningx-agentic-accessx-apievangelist-artifactsx-apievangelist-spec-originx-apievangelist-provider-publishes-openapix-apievangelist-idempotencyx-apievangelist-rate-limitx-apievangelist-async

Targets 7

$.info
$.paths['/contact/trigger'].post
$.paths['/contacts/add'].post
$.paths['/responses/{sortDirection}/{pagesize}/{pagenumber}/{sinceTime}/{format}'].get
$.paths['/contacts/deactivateall'].post
$.paths['/privacy/remove'].post
$.components.securitySchemes.apiKeyAuth

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the AskNicely API
  version: 1.0.0
extends: openapi/asknicely-openapi.yml
x-generated: '2026-08-06'
x-method: generated
x-source: >-
  The AskNicely OpenAPI in this repo was itself assembled by API Evangelist from AskNicely's HTML API
  reference. This overlay records the API Evangelist annotations layered on top of the transcription —
  provenance, cross-links to the sibling artifacts in this repo, and the runtime-semantics warnings that
  the endpoint pages state in prose but that no OpenAPI field carries.
actions:
- target: $.info
  update:
    x-apievangelist-artifacts:
      conventions: conventions/asknicely-conventions.yml
      errors: errors/asknicely-problem-types.yml
      rate_limits: rate-limits/asknicely-rate-limits.yml
      authentication: authentication/asknicely-authentication.yml
      lifecycle: lifecycle/asknicely-lifecycle.yml
      changelog: changelog/asknicely-changelog.yml
      data_model: data-model/asknicely-data-model.yml
      webhooks: asyncapi/asknicely-webhooks.yml
      mcp: mcp/asknicely-mcp.yml
      examples: examples/asknicely-examples.yml
    x-apievangelist-spec-origin: transcribed-from-html-docs
    x-apievangelist-provider-publishes-openapi: false
- target: $.info
  update:
    x-apievangelist-idempotency:
      supported: false
      note: >-
        AskNicely documents no idempotency key. Contact writes upsert on email, but a repeated
        triggerSurvey can send a second survey. Retries on write operations are not safe by default.
- target: $.paths['/contact/trigger'].post
  update:
    x-apievangelist-warning: >-
      Two failure conditions (contact-rule suppression and unsubscribed contact) are returned as HTTP 200
      with success: true. Clients MUST inspect result[].survey_sent, not the status code.
    x-apievangelist-rate-limit:
      requests_per_10s: 100
      requests_per_60s: 500
      note: Lower than the account-wide limit. Batch into /contacts/add rather than retrying.
- target: $.paths['/contacts/add'].post
  update:
    x-apievangelist-async:
      since: '2021-07-01'
      note: >-
        Returns 201 immediately and processes afterwards. No job id, status endpoint or completion
        callback — verify by polling /contact/get. A retry after a timeout can double-process the batch.
- target: $.paths['/responses/{sortDirection}/{pagesize}/{pagenumber}/{sinceTime}/{format}'].get
  update:
    x-apievangelist-warning: >-
      Result sets above the redirect threshold (999 responses as of 2022-12-03, and AskNicely warns the
      number may change) are redirected to a temporary S3 file. A client that does not follow redirects
      silently gets nothing.
    x-apievangelist-filter-footgun: >-
      filters[] and values[] are paired BY POSITION. A count or order mismatch returns an empty result
      set rather than an error.
- target: $.paths['/contacts/deactivateall'].post
  update:
    x-apievangelist-warning: >-
      Destructive and account-wide — deactivates every contact. Returns 307 repeatedly until complete;
      the client must follow redirects. Contacts can be reactivated, but all scheduled sends stop.
    x-agentic-access:
      action-class: acting
      consequence: write
      human-in-the-loop: recommended
- target: $.paths['/privacy/remove'].post
  update:
    x-apievangelist-warning: >-
      Irreversible. Personal data is erased and the contact is added to the blocklist, so they can never
      be re-added or surveyed again. Never retry blindly and never expose to an agent unsupervised.
    x-agentic-access:
      action-class: acting
      consequence: safety-critical
      human-in-the-loop: required
- target: $.components.securitySchemes.apiKeyAuth
  update:
    x-apievangelist-note: >-
      AskNicely's help centre shows the key passed as a query-string parameter on /contact/trigger.
      Prefer the X-apikey header — a key in a URL leaks into logs, proxies and referrer headers. There is
      one key per user and it is account-wide in effect; there is no scoping or read-only key type.