> ## Documentation Index
> Fetch the complete documentation index at: https://docs.galinum.com/llms.txt
> Use this file to discover all available pages before exploring further.

# dispatchPushCampaign



## OpenAPI

````yaml /openapi.json post /api/v1/campaigns/{id}/push/dispatch
openapi: 3.1.0
info:
  title: Galinum API
  version: '2026-08-22'
  description: >-
    Galinum's HTTP API. SDK endpoints power the browser SDK. Management
    endpoints use a project secret. The scoped hosted-agent credential writes
    only through lease-fenced evaluation and GitHub source endpoints.
    Managed-only operations return 501 on the self-host server.
servers:
  - url: https://galinum.com
    description: Production
security:
  - publishableKey: []
paths:
  /api/v1/campaigns/{id}/push/dispatch:
    post:
      tags:
        - Push
      summary: dispatchPushCampaign
      operationId: dispatchPushCampaign
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 128
      responses:
        '200':
          description: Successful operation. Acceptance is distinct from device receipt.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PushInspection'
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '404':
          description: Not found
        '409':
          description: Conflict
        '413':
          description: Body too large
        '429':
          description: Rate limit
        '503':
          description: Configuration or capacity unavailable
      security:
        - secretKey: []
components:
  schemas:
    PushInspection:
      type: object
      properties:
        targets:
          type: array
          items:
            $ref: '#/components/schemas/PushTargetView'
          maxItems: 100
        attempts:
          type: array
          items:
            $ref: '#/components/schemas/PushAttempt'
          maxItems: 100
        outcomes:
          type: array
          items:
            $ref: '#/components/schemas/PushOutcome'
          maxItems: 100
        observations:
          type: array
          items:
            $ref: '#/components/schemas/PushObservationView'
          maxItems: 100
        conversions:
          type: array
          items:
            $ref: '#/components/schemas/PushConversion'
          maxItems: 100
        users:
          type: object
          properties:
            targeted:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            accepted:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            engaged:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            converted:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - targeted
            - accepted
            - engaged
            - converted
          additionalProperties: false
        devices:
          type: object
          properties:
            targeted:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            attempts:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            accepted:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            receiptObserved:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            receiptUnknown:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            confirmedSubmissions:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            possibleSubmissions:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            preSendBlocks:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            pendingOutcomes:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            waiting:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - targeted
            - attempts
            - accepted
            - receiptObserved
            - receiptUnknown
            - confirmedSubmissions
            - possibleSubmissions
            - preSendBlocks
            - pendingOutcomes
            - waiting
          additionalProperties: false
        testTargets:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        page:
          type: integer
          minimum: 1
        perPage:
          type: integer
          minimum: 1
          maximum: 100
        evaluatedAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        records:
          type: object
          additionalProperties: false
          properties:
            targets:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            attempts:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            outcomes:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            observations:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            conversions:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            recipients:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            slots:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - targets
            - attempts
            - outcomes
            - observations
            - conversions
            - recipients
            - slots
        pageCounts:
          type: object
          additionalProperties: false
          properties:
            targets:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            attempts:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            outcomes:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            observations:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            conversions:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            recipients:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            slots:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - targets
            - attempts
            - outcomes
            - observations
            - conversions
            - recipients
            - slots
        recipients:
          type: array
          items:
            $ref: '#/components/schemas/PushRecipientView'
          maxItems: 100
        slots:
          type: array
          items:
            $ref: '#/components/schemas/PushSlotView'
          maxItems: 100
        planning:
          type: object
          properties:
            waiting:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            active:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            closed:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - waiting
            - active
            - closed
          additionalProperties: false
      required:
        - targets
        - attempts
        - outcomes
        - observations
        - conversions
        - users
        - devices
        - testTargets
        - page
        - perPage
        - evaluatedAt
        - records
        - pageCounts
        - recipients
        - slots
        - planning
      additionalProperties: false
    PushTargetView:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 256
        campaignId:
          type: string
          minLength: 1
          maxLength: 256
        deliveryId:
          type: string
          minLength: 1
          maxLength: 256
        userId:
          type: string
          minLength: 1
          maxLength: 256
        externalId:
          type: string
          minLength: 1
          maxLength: 256
        installationId:
          type: string
          minLength: 1
          maxLength: 256
        credentialId:
          type: string
          minLength: 1
          maxLength: 256
        campaignFingerprint:
          type: string
          minLength: 1
          maxLength: 256
        bindingGeneration:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        tokenRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        credentialRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        expiresAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        createdAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        createdOrder:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        content:
          $ref: '#/components/schemas/PushContent'
        replacementKey:
          type:
            - string
            - 'null'
        test:
          type: boolean
        slotId:
          type: string
          minLength: 1
          maxLength: 256
        generation:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        replacesTargetId:
          type:
            - string
            - 'null'
      required:
        - id
        - campaignId
        - deliveryId
        - userId
        - externalId
        - installationId
        - credentialId
        - campaignFingerprint
        - bindingGeneration
        - tokenRevision
        - credentialRevision
        - expiresAt
        - createdAt
        - createdOrder
        - content
        - replacementKey
        - test
        - slotId
        - generation
        - replacesTargetId
      additionalProperties: false
    PushAttempt:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        campaignId:
          type: string
          minLength: 1
          maxLength: 128
        targetId:
          type: string
          minLength: 1
          maxLength: 128
        ordinal:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        startedAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        slotId:
          type: string
          minLength: 1
          maxLength: 256
        slotRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        validUntil:
          type: integer
          minimum: 0
          maximum: 9007199254740991
      required:
        - id
        - campaignId
        - targetId
        - ordinal
        - startedAt
        - slotId
        - slotRevision
        - validUntil
      additionalProperties: false
    PushOutcome:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        campaignId:
          type: string
          minLength: 1
          maxLength: 128
        attemptId:
          type: string
          minLength: 1
          maxLength: 128
        targetId:
          type: string
          minLength: 1
          maxLength: 128
        observedAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        result:
          $ref: '#/components/schemas/PushProviderOutcome'
        slotId:
          type: string
          minLength: 1
          maxLength: 256
        submission:
          type: string
          enum:
            - none
            - confirmed
            - possible
      required:
        - id
        - campaignId
        - attemptId
        - targetId
        - observedAt
        - result
        - slotId
        - submission
      additionalProperties: false
    PushObservationView:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        campaignId:
          type: string
        installationId:
          type: string
          minLength: 1
          maxLength: 128
        userId:
          type: string
          minLength: 1
          maxLength: 128
        digest:
          type: string
          minLength: 1
          maxLength: 128
        bindingGeneration:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        sequence:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        order:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        receivedAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        command:
          $ref: '#/components/schemas/PushCommand'
        slotId:
          type:
            - string
            - 'null'
      required:
        - id
        - campaignId
        - installationId
        - userId
        - digest
        - bindingGeneration
        - sequence
        - order
        - receivedAt
        - command
        - slotId
      additionalProperties: false
    PushConversion:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        campaignId:
          type: string
          minLength: 1
          maxLength: 128
        deliveryId:
          type: string
          minLength: 1
          maxLength: 128
        userId:
          type: string
          minLength: 1
          maxLength: 128
        eventId:
          type: string
          minLength: 1
          maxLength: 128
        engagementId:
          type: string
          minLength: 1
          maxLength: 128
        order:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        convertedAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
      required:
        - id
        - campaignId
        - deliveryId
        - userId
        - eventId
        - engagementId
        - order
        - convertedAt
      additionalProperties: false
    PushRecipientView:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 256
        campaignId:
          type: string
          minLength: 1
          maxLength: 256
        userId:
          type: string
          minLength: 1
          maxLength: 256
        externalId:
          type: string
          minLength: 1
          maxLength: 256
        variantId:
          type: string
          minLength: 1
          maxLength: 256
        deliveryId:
          type:
            - string
            - 'null'
        state:
          $ref: '#/components/schemas/PushRecipientState'
        test:
          type: boolean
      required:
        - id
        - campaignId
        - userId
        - externalId
        - variantId
        - deliveryId
        - state
        - test
      additionalProperties: false
    PushSlotView:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 256
        recipientId:
          type: string
          minLength: 1
          maxLength: 256
        campaignId:
          type: string
          minLength: 1
          maxLength: 256
        userId:
          type: string
          minLength: 1
          maxLength: 256
        installationId:
          type: string
          minLength: 1
          maxLength: 256
        targetId:
          type:
            - string
            - 'null'
        generation:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        revision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        sequence:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        submissionsUsed:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        expiresAt:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        uncertain:
          type: boolean
        authRefreshRevision:
          type:
            - integer
            - 'null'
        state:
          $ref: '#/components/schemas/PushSlotState'
        test:
          type: boolean
        submissionNotBefore:
          type: number
          minimum: 0
          description: >-
            Persistent earliest notification submission time. Holds and target
            generations do not lower this retry floor; expiry remains terminal.
        repair:
          $ref: '#/components/schemas/PushSlotRepair'
      required:
        - id
        - recipientId
        - campaignId
        - userId
        - installationId
        - targetId
        - generation
        - revision
        - sequence
        - submissionsUsed
        - expiresAt
        - uncertain
        - authRefreshRevision
        - state
        - test
        - submissionNotBefore
        - repair
      additionalProperties: false
    PushContent:
      type: object
      properties:
        title:
          type: string
          minLength: 1
          maxLength: 256
        body:
          type: string
          minLength: 1
          maxLength: 2048
        destination:
          type: object
          properties:
            kind:
              type: string
              enum:
                - website
                - app
            url:
              type: string
              minLength: 1
              maxLength: 2048
          required:
            - kind
            - url
          additionalProperties: false
        data:
          type: object
          additionalProperties:
            type: string
            minLength: 1
            maxLength: 1024
          maxProperties: 32
        image:
          type: string
          minLength: 1
          maxLength: 2048
        actions:
          type: array
          maxItems: 4
          items:
            type: object
            properties:
              id:
                type: string
                minLength: 1
                maxLength: 64
                pattern: ^[a-zA-Z0-9_-]+$
              title:
                type: string
                minLength: 1
                maxLength: 64
            required:
              - id
              - title
            additionalProperties: false
        ios:
          type: object
          properties:
            subtitle:
              type: string
              minLength: 1
              maxLength: 256
            sound:
              type: string
              minLength: 1
              maxLength: 128
            badge:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            categoryId:
              type: string
              minLength: 1
              maxLength: 128
          required: []
          additionalProperties: false
        android:
          type: object
          properties:
            channelId:
              type: string
              minLength: 1
              maxLength: 128
            sound:
              type: string
              minLength: 1
              maxLength: 128
          required:
            - channelId
          additionalProperties: false
      required:
        - title
        - body
        - destination
      additionalProperties: false
    PushProviderOutcome:
      type: object
      properties:
        kind:
          type: string
          enum:
            - accepted
            - rejected
            - unknown
            - blocked
        providerId:
          type: string
          minLength: 1
          maxLength: 128
        code:
          type: string
          minLength: 1
          maxLength: 128
        retryAfterMs:
          type: integer
          minimum: 0
          maximum: 9007199254740991
      required:
        - kind
      additionalProperties: false
    PushCommand:
      oneOf:
        - $ref: '#/components/schemas/PushReceiptCommand'
        - $ref: '#/components/schemas/PushActionCommand'
        - $ref: '#/components/schemas/PushEventCommand'
    PushRecipientState:
      oneOf:
        - type: object
          properties:
            kind:
              enum:
                - active
              type: string
          required:
            - kind
          additionalProperties: false
        - type: object
          properties:
            kind:
              enum:
                - closed
              type: string
            reason:
              type: string
              minLength: 1
              maxLength: 256
          required:
            - kind
            - reason
          additionalProperties: false
        - type: object
          properties:
            kind:
              enum:
                - waiting
              type: string
            reason:
              type: string
              minLength: 1
              maxLength: 256
            checkedAt:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            recheckAt:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            delayMs:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - kind
            - reason
            - checkedAt
            - recheckAt
            - delayMs
          additionalProperties: false
    PushSlotState:
      oneOf:
        - type: object
          properties:
            kind:
              enum:
                - ready
              type: string
            at:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - kind
            - at
          additionalProperties: false
        - type: object
          properties:
            kind:
              enum:
                - waiting
              type: string
            reason:
              type: string
              minLength: 1
              maxLength: 256
            recheckAt:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - kind
            - reason
            - recheckAt
          additionalProperties: false
        - type: object
          properties:
            kind:
              enum:
                - reserved
              type: string
            attemptId:
              type: string
              minLength: 1
              maxLength: 256
            until:
              type: integer
              minimum: 0
              maximum: 9007199254740991
          required:
            - kind
            - attemptId
            - until
          additionalProperties: false
        - type: object
          properties:
            kind:
              enum:
                - accepted
              type: string
            acceptanceId:
              type: string
              minLength: 1
              maxLength: 256
          required:
            - kind
            - acceptanceId
          additionalProperties: false
        - type: object
          properties:
            kind:
              enum:
                - closed
              type: string
            reason:
              type: string
              minLength: 1
              maxLength: 256
          required:
            - kind
            - reason
          additionalProperties: false
    PushSlotRepair:
      oneOf:
        - type: 'null'
        - type: object
          properties:
            kind:
              type: string
              enum:
                - credential
            credentialRevision:
              type: integer
              minimum: 1
              maximum: 9007199254740991
          required:
            - kind
            - credentialRevision
          additionalProperties: false
        - type: object
          properties:
            kind:
              type: string
              enum:
                - payload
            credentialRevision:
              type: integer
              minimum: 1
              maximum: 9007199254740991
            campaignFingerprint:
              type: string
          required:
            - kind
            - credentialRevision
            - campaignFingerprint
          additionalProperties: false
    PushReceiptCommand:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        sequence:
          type: integer
          minimum: 1
          maximum: 9007199254740991
        kind:
          type: string
          enum:
            - receipt
            - tap
        targetId:
          type: string
          minLength: 1
          maxLength: 128
        attemptId:
          type: string
          minLength: 1
          maxLength: 128
      required:
        - id
        - sequence
        - kind
        - targetId
        - attemptId
      additionalProperties: false
    PushActionCommand:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        sequence:
          type: integer
          minimum: 1
          maximum: 9007199254740991
        kind:
          type: string
          enum:
            - action
        targetId:
          type: string
          minLength: 1
          maxLength: 128
        attemptId:
          type: string
          minLength: 1
          maxLength: 128
        actionId:
          type: string
          minLength: 1
          maxLength: 64
      required:
        - id
        - sequence
        - kind
        - targetId
        - attemptId
        - actionId
      additionalProperties: false
    PushEventCommand:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        sequence:
          type: integer
          minimum: 1
          maximum: 9007199254740991
        kind:
          type: string
          enum:
            - event
        event:
          type: string
          minLength: 1
          maxLength: 80
        eventId:
          type: string
          minLength: 1
          maxLength: 128
        props:
          $ref: '#/components/schemas/PushEventProps'
      required:
        - id
        - sequence
        - kind
        - event
        - eventId
      additionalProperties: false
    PushEventProps:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/PushJson'
      description: >-
        Full JSON properties, matching track. Maximum compact encoded size is
        4096 bytes.
    PushJson:
      oneOf:
        - type: 'null'
        - type: boolean
        - type: number
        - type: string
        - type: array
          items:
            $ref: '#/components/schemas/PushJson'
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/PushJson'
  securitySchemes:
    publishableKey:
      type: http
      scheme: bearer
      description: >-
        Your project's publishable key (`pk_pub_…`). Safe to expose in the
        browser — it identifies the project and is rate-limited, not secret.
    secretKey:
      type: http
      scheme: bearer
      description: >-
        Your project's secret key (`pk_…`, without the `pub` segment).
        Server-side only — never ship it to a browser. Get it from Settings →
        Projects in the dashboard.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.