now.gg Payments Server API

Server-to-server in-app purchase API for publishers using now.gg Payments. Backends verify a purchase token (verifyPurchase), mark a consumable as consumed (consumePurchase) and acknowledge a subscription purchase (acknowledgePurchase). Authorization is a Payments API Key issued in nowStudio, sent in the Authorization header with application/x-www-form-urlencoded bodies. The v1 verifyPayment endpoint on payments.now.gg is deprecated in favour of v2 verifyPurchase.

AsyncAPI Specification

bluestacks-payments-asyncapi.yml Raw ↑
x-provenance:
  generated: '2026-08-08'
  method: derived
  source: https://docs.now.gg/nowstudio/payments
  derived_from: asyncapi/bluestacks-payments-webhooks.yml
  note: >-
    now.gg publishes NO AsyncAPI. This document is an API Evangelist derivation that
    transcribes the callback contract now.gg publishes in prose at
    docs.now.gg/nowstudio/payments and docs.now.gg/nowstudio/webshop into AsyncAPI
    3.0.0. Every channel, message, field, type and example below appears verbatim in
    those pages; nothing has been invented. It is NOT a provider artifact and must not
    be presented as one. The address is the PUBLISHER'S own endpoint — now.gg is the
    sender, the publisher is the receiver — so the server URL is a placeholder the
    integrator substitutes.
asyncapi: 3.0.0
info:
  title: now.gg Payments Callbacks (derived)
  version: '1.0.0'
  description: >-
    Outbound webhook contract for now.gg Payments. now.gg POSTs subscription and
    webshop order events to an endpoint the publisher implements and registers in
    nowStudio. Derived by API Evangelist from now.gg's published prose reference.
  contact:
    name: now.gg developer support
    email: dev-support@now.gg
  externalDocs:
    url: https://docs.now.gg/nowstudio/payments
servers:
  publisherCallback:
    host: publisher.example.com
    protocol: https
    description: >-
      The publisher's own callback host, registered in nowStudio under Payment
      Settings. Substitute your own.
channels:
  subscriptionStatusCallback:
    address: /subscription-status-callback
    title: SubscriptionStatusCallback
    description: >-
      Publisher-implemented endpoint that receives subscription lifecycle events from
      now.gg.
    messages:
      subscriptionStatusEvent:
        $ref: '#/components/messages/SubscriptionStatusEvent'
  paymentsProcessingCallback:
    address: /payments-processing-callback
    title: PaymentsProcessingCallback
    description: >-
      Publisher-implemented endpoint that receives webshop order completion events
      from now.gg.
    messages:
      webshopItemPurchased:
        $ref: '#/components/messages/WebshopItemPurchased'
operations:
  receiveSubscriptionStatus:
    action: receive
    channel:
      $ref: '#/channels/subscriptionStatusCallback'
    summary: Receive a subscription lifecycle event from now.gg.
    security:
    - $ref: '#/components/securitySchemes/webhookApiKey'
    messages:
    - $ref: '#/channels/subscriptionStatusCallback/messages/subscriptionStatusEvent'
    reply:
      address:
        location: '$message.header#/'
      channel:
        $ref: '#/channels/subscriptionStatusCallback'
      messages:
      - $ref: '#/components/messages/CallbackAck'
  receivePaymentsProcessing:
    action: receive
    channel:
      $ref: '#/channels/paymentsProcessingCallback'
    summary: Receive a webshop order completion event from now.gg.
    security:
    - $ref: '#/components/securitySchemes/webhookApiKey'
    messages:
    - $ref: '#/channels/paymentsProcessingCallback/messages/webshopItemPurchased'
components:
  securitySchemes:
    webhookApiKey:
      type: httpApiKey
      name: Authorization
      in: header
      description: >-
        Webhook API Key issued by now.gg in nowStudio. now.gg presents it to the
        publisher's endpoint. There is no body signature.
  messages:
    SubscriptionStatusEvent:
      name: SubscriptionStatusEvent
      title: Subscription status update
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SubscriptionNotification'
    WebshopItemPurchased:
      name: WebshopItemPurchased
      title: Webshop item purchased
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebshopNotification'
    CallbackAck:
      name: CallbackAck
      title: Publisher acknowledgement
      contentType: application/json
      payload:
        $ref: '#/components/schemas/Ack'
  schemas:
    SubscriptionNotification:
      type: object
      required:
      - notificationType
      - data
      properties:
        notificationType:
          type: string
          description: The subscription status event.
          enum:
          - WEBSHOP_ITEM_PURCHASED
          - SUBSCRIPTION_PURCHASED
          - SUBSCRIPTION_RENEWED
          - SUBSCRIPTION_CANCELLED
          - SUBSCRIPTION_EXPIRED
        data:
          type: object
          properties:
            orderId:
              type: string
              description: Order ID associated with the purchase order.
              examples:
              - '1-202402110116343'
            packageName:
              type: string
              description: Package name of the publisher's app.
              examples:
              - gg.now.sample.app
            productId:
              type: string
              description: Product ID of the product purchased by the user.
              examples:
              - SampleProduct
            eventTime:
              type: integer
              format: int64
              description: Epoch timestamp associated with the order, in milliseconds.
              examples:
              - 1752895192000
            expiryTime:
              type: integer
              format: int64
              description: Epoch milliseconds when the subscription expires or is set to renew.
              examples:
              - 1707965194000
            amount:
              type: number
              format: float
              description: Amount associated with the order.
              examples:
              - 24.99
            isTestOrder:
              type: boolean
              description: True when the order was generated by an internal tester.
            currency:
              type: string
              description: Currency associated with the in-app purchase order.
              examples:
              - USD
            paymentId:
              type: string
              examples:
              - '1234'
            developerPayload:
              type: string
              description: Developer-specified supplemental information about an order.
              examples:
              - '{UID: abc}'
    WebshopNotification:
      type: object
      required:
      - notificationType
      - data
      properties:
        notificationType:
          type: string
          enum:
          - WEBSHOP_ITEM_PURCHASED
          description: Sent when the user's payment is completed.
        data:
          type: object
          properties:
            orderId:
              type: string
              examples:
              - '1-202402110116343'
            packageName:
              type: string
              examples:
              - gg.now.sample.app
            productId:
              type: string
              examples:
              - SampleProduct
            eventTime:
              type: integer
              format: int64
              examples:
              - 1707965194000
            paymentId:
              type: string
    Ack:
      type: object
      required:
      - success
      properties:
        success:
          type: boolean
          description: >-
            Must be true, with HTTP 200, or now.gg retries. For the webshop callback,
            the order is only marked completed once this is received.
        reason:
          type: string
          description: Optional. Required only when success is false.