Aura Historia Notifications API

In-app notification retrieval, bulk updates, single-notification updates, and notification cleanup workflows.

Operations 6

GET /v1/me/notifications List user notifications #
PATCH /v1/me/notifications Update selected notification seen states #
DELETE /v1/me/notifications Delete all notifications #
PATCH /v1/me/notifications/all Update all notification seen states #
PATCH /v1/me/notifications/{notificationId} Update one notification seen state #
DELETE /v1/me/notifications/{notificationId} Delete one notification #

Specifications

Schemas & Data

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/aura-historia-com:aura-historia-com-notifications-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

aura-historia-com-notifications-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Aura Historia API Reference Notifications API
  description: '## Overview


    The Aura Historia API powers the Aura Historia antiques platform and its partner-facing integrations. It exposes product discovery, listing source discovery, personalization, partner onboarding, and integration

    workflows on top of Aura Historia''s serverless AWS platform. This reference is designed for two audiences:

    - **Internal developers** building Aura Historia product-listings, operational tooling, and backoffice workflows

    - **External partners and integrators** synchronizing inventory, consuming platform data, or

    integrating with delegated access


    ## Core API domains


    - **ProductListings and listing-sources** — search, retrieve, and explore product-listings, related product-listings, product

    history, and listing source data

    - **Personalization** — manage watchlists, saved search filters, and user notifications

    - **Partner workflows** — submit partnership applications, maintain partnerships, ingest catalog data

    in batches, and receive WooCommerce webhooks

    - **Identity and access** — manage user accounts, Aura Historia access tokens, and OAuth 2.0

    clients and token flows

    - **Billing** — create Stripe checkout, billing-portal, and subscription-management sessions


    ## Authentication model


    The API uses more than one authentication scheme depending on the route:


    - **`BearerAuth`** — Cognito **access** JWT bearer tokens for authenticated user, admin, and

    partner-user workflows. Cognito ID tokens are not accepted as API credentials. - **`AccessTokenAuth`** — Aura Historia opaque bearer access tokens created via

    `/v1/me/access-tokens` or OAuth 2.0, primarily intended for partner automations and server-to-server

    ingestion scenarios. When a route lists multiple security schemes, any one of the listed schemes may be accepted. Some read endpoints can also be called without authentication, while a valid user token may enrich

    the response with personalized state such as watchlist, notification, or search-filter metadata. Aura Historia access

    tokens receive only the sections their read scopes permit; see `ProductListingUserStateData`. ## MCP interface


    The separate `https://mcp.aura-historia.com/v1` Streamable HTTP endpoint accepts opaque Aura access tokens only. Public calls may omit credentials; invalid supplied credentials receive HTTP 401, protected operations require their declared scopes, and insufficient grants receive HTTP 403 with the complete required scope set. Credential-free protected-resource metadata is served on the MCP host at `/.well-known/oauth-protected-resource` and `/.well-known/oauth-protected-resource/v1`. See the MCP contract for protocol and discovery details. ## Data and response conventions


    - **PATCH:** an omitted request member remains unchanged. A documented nullable PATCH member

    accepts `null` to clear its value; `null` for any other member returns `400 BAD_BODY_VALUE`. Use `[]`, not `null`, to replace a non-null collection with an empty collection. Empty HTTP

    bodies are invalid, `{}` is a valid object-PATCH no-op, and the partner-product PATCH `[]`

    remains a valid empty batch. Responses may omit absent optional values. - Product detail, watchlist, and saved-search match reads accept optional **`language`** and

    **`currency`** parameters. Currency defaults to `EUR`. Detail pricing contains the seller''s source

    amounts, converted display amounts, and FX valuation metadata. Active product-listings use the latest persisted

    snapshot; sold product-listings use their immutable sale snapshot. Product history preserves immutable source values and accepts optional `currency` for historical FX display projections. History text is not localized. - Request-wide REST errors are returned as **`application/problem+json`** using a consistent RFC 9457-style structure

    with `status`, `title`, `error`, optional `source`, and optional `detail`.'
  version: 1.0.0
  contact:
    name: Aura-Historia Team
    url: https://aura-historia.com/
  license:
    name: License
    url: https://github.com/aura-historia/backend/blob/develop/LICENSE
servers:
- url: https://api.stage.aura-historia.com
  description: Development environment
- url: https://api.aura-historia.com
  description: Production environment
tags:
- name: Notifications
  description: In-app notification retrieval, bulk updates, single-notification updates, and notification cleanup workflows.
paths:
  /v1/me/notifications:
    get:
      summary: List user notifications
      description: 'Delegated Aura access tokens require `notifications:read`; missing scope returns `403 FORBIDDEN`. Retrieves the authenticated user’s canonical notifications in newest-first order.

        Watchlist price-change notifications preserve each event’s immutable source currency; no FX conversion

        is applied from the user’s preferences. Product image URLs are presented according to the authenticated

        user’s `showUnassessedOrSensitiveContent` preference.'
      operationId: listNotifications
      tags:
      - Notifications
      parameters:
      - name: language
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/LanguageData'
      - name: size
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 21
      - name: searchAfter
        in: query
        required: false
        description: Opaque JSON `[created RFC3339 timestamp, Notification ID]` cursor returned by the prior page.
        schema:
          type: string
      security:
      - BearerAuth: []
      - AccessTokenAuth: []
      responses:
        '200':
          description: Notifications retrieved successfully.
          headers:
            Cache-Control:
              schema:
                type: string
              example: no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationCollectionData'
        '400':
          description: Bad request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Forbidden - required delegated scope missing
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Invalid or missing bearer credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '503':
          description: Notifications are temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
    patch:
      summary: Update selected notification seen states
      description: Delegated Aura access tokens require `notifications:write`; missing scope returns `403 FORBIDDEN`. Updates the seen state for the explicit canonical notification IDs in the request body.
      operationId: updateNotificationsSeen
      tags:
      - Notifications
      security:
      - BearerAuth: []
      - AccessTokenAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNotificationsSeenData'
      responses:
        '204':
          description: Selected notifications updated.
        '400':
          description: Bad request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Forbidden - required delegated scope missing
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Invalid or missing bearer credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '503':
          description: Notifications are temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
    delete:
      summary: Delete all notifications
      description: Delegated Aura access tokens require `notifications:write`; missing scope returns `403 FORBIDDEN`.
      operationId: deleteNotifications
      tags:
      - Notifications
      security:
      - BearerAuth: []
      - AccessTokenAuth: []
      responses:
        '204':
          description: Notifications deleted.
        '403':
          description: Forbidden - required delegated scope missing
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Invalid or missing bearer credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '503':
          description: Notifications are temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
  /v1/me/notifications/all:
    patch:
      summary: Update all notification seen states
      description: Delegated Aura access tokens require `notifications:write`; missing scope returns `403 FORBIDDEN`.
      operationId: updateAllNotificationsSeen
      tags:
      - Notifications
      security:
      - BearerAuth: []
      - AccessTokenAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNotificationSeenData'
      responses:
        '204':
          description: Notifications updated.
        '400':
          description: Bad request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Forbidden - required delegated scope missing
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Invalid or missing bearer credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '503':
          description: Notifications are temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
  /v1/me/notifications/{notificationId}:
    patch:
      summary: Update one notification seen state
      description: Delegated Aura access tokens require `notifications:write`; missing scope returns `403 FORBIDDEN`.
      operationId: updateNotificationSeen
      tags:
      - Notifications
      security:
      - BearerAuth: []
      - AccessTokenAuth: []
      parameters:
      - name: notificationId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNotificationSeenData'
      responses:
        '204':
          description: Notification updated.
        '400':
          description: Bad request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Forbidden - required delegated scope missing
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Invalid or missing bearer credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '503':
          description: Notifications are temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Notification not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
    delete:
      summary: Delete one notification
      description: Delegated Aura access tokens require `notifications:write`; missing scope returns `403 FORBIDDEN`.
      operationId: deleteNotification
      tags:
      - Notifications
      security:
      - BearerAuth: []
      - AccessTokenAuth: []
      parameters:
      - name: notificationId
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Notification deleted.
        '400':
          description: Bad request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Forbidden - required delegated scope missing
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Invalid or missing bearer credential
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '503':
          description: Notifications are temporarily unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Notification not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiError'
components:
  schemas:
    LocalizedTextData:
      type: object
      description: Text content with language information
      required:
      - text
      - language
      properties:
        text:
          type: string
          description: The text content
        language:
          $ref: '#/components/schemas/LanguageData'
    LanguageData:
      type: string
      enum:
      - de
      - en
      - fr
      - es
      - it
      - zh
      - pt
      - pl
      - tr
      - nl
      - cs
      - ja
      - ru
      - ar
      description: 'Supported language codes (ISO 639-1 canonical values):

        - de: German (includes de-DE, de-AT, de-CH, de-LU, de-LI)

        - en: English (includes en-US, en-GB, en-AU, en-CA, en-NZ, and backend-specific accepted alias en_IE)

        - fr: French (includes fr-FR, fr-CA, fr-BE, fr-CH, fr-LU)

        - es: Spanish (includes es-ES, es-MX, es-AR, es-CO, es-CL, es-PE, es-VE)

        - it: Italian (includes it-IT, it-CH)

        - zh: Chinese (Simplified) (includes zh-CN, zh-Hans)

        - pt: Portuguese (includes pt-PT, pt-BR)

        - pl: Polish (includes pl-PL)

        - tr: Turkish (includes tr-TR)

        - nl: Dutch (includes nl-NL, nl-BE)

        - cs: Czech (includes cs-CZ)

        - ja: Japanese (includes ja-JP)

        - ru: Russian (includes ru-RU)

        - ar: Arabic (includes ar-SA, ar-EG, ar-AE)


        `de`, `en`, `fr`, `es`, and `it` are fully supported localization/translation-target languages.

        `zh`, `pt`, `pl`, `tr`, `nl`, `cs`, `ja`, `ru`, and `ar` are ingestion-only languages:

        they can appear in stored/native content and are accepted anywhere `LanguageData` is used,

        but backend-generated translations and fallback localized strings are not produced in these languages.

        '
      default: en
      example: de
    WatchlistNotificationPriceChangeData:
      type: object
      required:
      - type
      - oldPrice
      - newPrice
      properties:
        type:
          type: string
          enum:
          - PRICE_CHANGE
        oldPrice:
          allOf:
          - $ref: '#/components/schemas/ProductListingPriceData'
          description: Previous asking-price assertion. Null when unavailable.
        newPrice:
          allOf:
          - $ref: '#/components/schemas/ProductListingPriceData'
          description: New asking-price assertion. Null when unavailable.
    WatchlistNotificationChangeData:
      oneOf:
      - $ref: '#/components/schemas/WatchlistNotificationPriceChangeData'
      - $ref: '#/components/schemas/WatchlistNotificationAvailabilityChangeData'
    ApiErrorSource:
      type: object
      description: Information about the source of the error
      required:
      - field
      - type
      properties:
        field:
          type: string
          description: Name of the field that caused the error
          example: listingSourceId
        type:
          type: string
          enum:
          - QUERY
          - PATH
          - HEADER
          - BODY
          description: Type of parameter that caused the error
          example: PATH
    WatchlistNotificationAvailabilityChangeData:
      type: object
      required:
      - type
      - oldAvailability
      - newAvailability
      properties:
        type:
          type: string
          enum:
          - AVAILABILITY_CHANGE
        oldAvailability:
          allOf:
          - $ref: '#/components/schemas/ListingAvailabilityData'
        newAvailability:
          allOf:
          - $ref: '#/components/schemas/ListingAvailabilityData'
    UpdateNotificationSeenData:
      type: object
      required:
      - seen
      properties:
        seen:
          type: boolean
    ApiError:
      type: object
      description: Standard error response format (RFC 9457)
      required:
      - status
      - title
      - error
      properties:
        status:
          type: integer
          description: HTTP status code
          example: 400
        title:
          type: string
          description: HTTP status code in human-readable form
          example: Bad Request
        error:
          type: string
          description: Error code identifier
          example: BAD_PARAMETER
        source:
          $ref: '#/components/schemas/ApiErrorSource'
        detail:
          type: string
          description: Human-readable error message
          example: 'Expected any of: ''true'' or ''false''. Got: ''invalid'''
    ListingAvailabilityData:
      type: string
      enum:
      - AVAILABLE
      - IN_STOCK
      - LIMITED_AVAILABILITY
      - BACK_ORDER
      - MADE_TO_ORDER
      - PRE_ORDER
      - PRE_SALE
      - UNAVAILABLE
      - RESERVED
      - OUT_OF_STOCK
      - SOLD_OUT
      description: Current reliable source assertion of listing purchase availability. Omitted or `null` means Aura has no reliable current assertion.
      example: IN_STOCK
    NotificationCollectionData:
      type: object
      required:
      - items
      - size
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/NotificationData'
        size:
          type: integer
          minimum: 0
          maximum: 100
          description: Number of items returned in the current page.
        searchAfter:
          type:
          - array
          - 'null'
          minItems: 2
          maxItems: 2
          items:
            type: string
          description: Opaque `[created RFC3339 timestamp, Notification ID]` cursor for the next page; omitted when no further page exists.
    WatchlistNotificationPayloadData:
      type: object
      required:
      - productListingId
      - listingSourceId
      - sourceListingId
      - listingSourceSlugId
      - productListingTitleSlugId
      - listingSourceName
      - title
      - image
      - url
      - viewUrl
      - change
      properties:
        productListingId:
          type: string
        listingSourceId:
          type: string
        sourceListingId:
          type: string
        listingSourceSlugId:
          type: string
        productListingTitleSlugId:
          type: string
        listingSourceName:
          type: string
        title:
          allOf:
          - $ref: '#/components/schemas/LocalizedTextData'
        image:
          allOf:
          - $ref: '#/components/schemas/ProductListingImageData'
        url:
          type: string
          format: uri
        viewUrl:
          type: string
          format: uri
        change:
          $ref: '#/components/schemas/WatchlistNotificationChangeData'
    UpdateNotificationsSeenData:
      type: object
      required:
      - notificationIds
      - seen
      properties:
        notificationIds:
          type: array
          minItems: 1
          items:
            type: string
        seen:
          type: boolean
    ProductListingPriceData:
      oneOf:
      - type: object
        required:
        - type
        - currency
        - amount
        additionalProperties: false
        properties:
          type:
            type: string
            enum:
            - MONETARY
          currency:
            $ref: '#/components/schemas/CurrencyData'
          amount:
            type: integer
            minimum: 0
      - type: object
        required:
        - type
        additionalProperties: false
        properties:
          type:
            type: string
            enum:
            - ON_REQUEST
    ProductListingImageData:
      type: object
      description: Product image after viewer-specific presentation.
      required:
      - url
      properties:
        url:
          type:
          - string
          - 'null'
          format: uri
          description: URL to the product image, or `null` when it is not shown to this viewer.
          example: https://my-listing-source.com/images/product-1.jpg
    PartnershipApplicationNotificationPayloadData:
      type: object
      required:
      - partnershipApplicationId
      - decision
      - listingSourceName
      - image
      properties:
        partnershipApplicationId:
          type: string
        decision:
          type: string
          enum:
          - APPROVED
          - REJECTED
        listingSourceName:
          type: string
        image:
          type:
          - string
          - 'null'
          format: uri
    CurrencyData:
      type: string
      enum:
      - EUR
      - GBP
      - USD
      - AUD
      - CAD
      - NZD
      - CNY
      - BRL
      - PLN
      - TRY
      - JPY
      - CZK
      - RUB
      - AED
      - SAR
      - HKD
      - SGD
      - CHF
      - ZAR
      - SEK
      - DKK
      - NOK
      - KRW
      - INR
      - TWD
      - HUF
      - RON
      - MXN
      - THB
      - ARS
      description: 'Supported currencies (ISO 4217 codes):

        - EUR: Euro

        - GBP: British Pound

        - USD: US Dollar

        - AUD: Australian Dollar

        - CAD: Canadian Dollar

        - NZD: New Zealand Dollar

        - CNY: Chinese Yuan

        - BRL: Brazilian Real

        - PLN: Polish Złoty

        - TRY: Turkish Lira

        - JPY: Japanese Yen

        - CZK: Czech Koruna

        - RUB: Russian Ruble

        - AED: UAE Dirham

        - SAR: Saudi Riyal

        - HKD: Hong Kong Dollar

        - SGD: Singapore Dollar

        - CHF: Swiss Franc

        - ZAR: South African Rand

        - SEK: Swedish Krona

        - DKK: Danish Krone

        - NOK: Norwegian Krone

        - KRW: South Korean Won

        - INR: Indian Rupee

        - TWD: New Taiwan Dollar

        - HUF: Hungarian Forint

        - RON: Romanian Leu

        - MXN: Mexican Peso

        - THB: Thai Baht

        - ARS: Argentine Peso (2 minor-unit decimal places)

        '
      default: EUR
      example: EUR
    NotificationPayloadData:
      description: Reason-specific immutable snapshot. Its shape is selected by the parent `NotificationData.kind`.
      oneOf:
      - $ref: '#/components/schemas/WatchlistNotificationPayloadData'
      - $ref: '#/components/schemas/SearchFilterNotificationPayloadData'
      - $ref: '#/components/schemas/PartnershipApplicationNotificationPayloadData'
    NotificationData:
      type: object
      required:
      - notificationId
      - kind
      - payload
      - seen
      - created
      - updated
      properties:
        notificationId:
          type: string
        kind:
          type: string
          enum:
          - WATCHLIST_PRICE_CHANGED
          - WATCHLIST_AVAILABILITY_CHANGED
          - SEARCH_FILTER_MATCH
          - PARTNERSHIP_APPLICATION_APPROVED
          - PARTNERSHIP_APPLICATION_REJECTED
        payload:
          $ref: '#/components/schemas/NotificationPayloadData'
        seen:
          type: boolean
        created:
          type: string
          format: date-time
        updated:
          type: string
          format: date-time
          description: When the notification state (such as `seen`) last changed; repeating an identical state leaves it unchanged.
    SearchFilterNotificationPayloadData:
      type: object
      required:
      - productListingId
      - userSearchFilterId
      - userSearchFilterName
      - listingSourceId
      - sourceListingId
      - listingSourceSlugId
      - productListingTitleSlugId
      - listingSourceName
      - title
      - image
      - url
      - viewUrl
      properties:
        productListingId:
          type: string
        userSearchFilterId:
          type: string
        userSearchFilterName:
          type: string
        listingSourceId:
          type: string
        sourceListingId:
          type: string
        listingSourceSlugId:
          type: string
        productListingTitleSlugId:
          type: string
        listingSourceName:
          type: string
        title:
          allOf:
          - $ref: '#/components/schemas/LocalizedTextData'
        image:
          allOf:
          - $ref: '#/components/schemas/ProductListingImageData'
        url:
          type: string
          format: uri
        viewUrl:
          type: string
          format: uri
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Cognito access JWT bearer token. Signature, issuer, client, token use and expiry

        are validated locally. Signed integer `auth_time` and `iat` claims are required;

        sessions authenticated at or before the persisted local revocation cutoff are rejected.

        This check shares the existing identity lookup and makes no live Cognito status request.

        Revocation requested only in Cognito is not observed immediately; already-issued JWTs

        can remain accepted until expiry. Use the administrator session-revocation endpoint

        for immediate local enforcement. Database authentication failures return

        `503 AUTH_TEMPORARILY_UNAVAILABLE`.

        This scheme is used for authenticated user routes and for partner routes that accept Cognito user tokens.

        '
    AccessTokenAuth:
      type: http
      scheme: bearer
      bearerFormat: opaque
      description: 'Aura Historia bearer access token created through `/v1/me/access-tokens`.

        Tokens are sent as standard bearer authorization headers.

        Selected partner routes accept this scheme instead of the removed partner API-key flow.

        '
x-tagGroups:
- name: Operations
  tags:
  - Operations
- name: Discovery
  tags:
  - ProductListings
  - ListingSources
  - Auctions
- name: User Experience
  tags:
  - Search Filters
  - Watchlist
  - Notifications
  - User Account
  - Billing
  - Newsletter
- name: Partner & Platform Integrations
  tags:
  - Partnerships
  - PartnershipApplications
  - OAuth