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

# Get Offering

> Retrieve the full configuration of a single offering by its ID.

#### Rate Limit

The rate limit is 150 requests per minute, 500 requests per hour, and 1000 requests per day.


## OpenAPI

````yaml /api/offerings/offerings.yaml get /v5/offers/{offer_id}
openapi: 3.0.0
info:
  title: Offer Decisioning Public API - v5
  version: 5.0.0
  description: >
    The Offerings API lets you create, update, and list offerings for Offer
    Decisioning, and

    list the personalization templates available for offering content. For
    lifecycle, rate limits,

    idempotency, and error details, see the [Offerings
    Overview](/api/offerings/offerings-overview).
servers:
  - url: https://api-{dc}.moengage.com
    variables:
      dc:
        default: '01'
        description: >
          MoEngage data center identifier. Replace with your assigned DC number.
          Full example: https://api-01.moengage.com
security: []
paths:
  /v5/offers/{offer_id}:
    get:
      tags:
        - Public Offerings
      summary: Get Offering
      description: Retrieve the full configuration of a single offering by its ID.
      operationId: getPublicOffering
      parameters:
        - name: offer_id
          in: path
          required: true
          schema:
            type: string
          description: >
            Must include the `offer_` prefix (e.g.
            `offer_6a4f69ee490f66322f968b87`). You can retrieve the prefixed ID
            from the `data[].id` field in the [List Offerings
            API](/api/public-offerings/list-offerings) response.
      responses:
        '200':
          description: ''
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
              description: Maximum requests allowed in the current window.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: >-
                Requests remaining in the current window before rate limiting
                applies.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: UTC epoch second when the current rate-limit window resets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicOfferGetResponse'
        '401':
          $ref: '#/components/responses/GatewayAuthError'
        '404':
          description: >-
            The `offer_id` does not exist or does not belong to the
            authenticated workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: >
            The rate limit for this endpoint has been exceeded. Retry after the
            window

            indicated in the `Retry-After` response header (in seconds).
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait before retrying.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - basicAuth: []
components:
  schemas:
    PublicOfferGetResponse:
      type: object
      properties:
        response_id:
          type: string
        type:
          type: string
          example: offer
        data:
          type: object
          properties:
            id:
              type: string
              description: Offering ID assigned by the server.
            status:
              type: string
              description: Lifecycle status of the offering.
              example: scheduled
            created_at:
              type: string
              format: date-time
              description: ISO 8601 UTC timestamp.
              example: '2026-08-07T23:42:21.556936210Z'
            updated_at:
              type: string
              format: date-time
              description: ISO 8601 UTC timestamp of the update.
              example: '2026-08-07T23:42:21.556979662Z'
            updated_by:
              type: string
              format: email
              description: Email address of the team member making this update.
              example: marketing.team@example.com
            created_by:
              type: string
              format: email
              description: Email address of the user creating this offering.
              example: marketing.team@example.com
            name:
              type: string
              description: |
                Unique display name for this offering within the workspace.
              example: personalized_offer
            description:
              type: string
              description: |
                Optional free-text description of the offering's purpose.
              example: Configured using personalization template
            priority:
              type: integer
              description: >
                Static priority score for offer ranking. Lower number means
                lower priority (1 is lowest priority, 100 is highest).
              example: 90
            tags:
              type: array
              items:
                type: string
              description: |
                Tags that provide context about the Offering's nature or theme.
            scheduling:
              allOf:
                - $ref: '#/components/schemas/OfferSchedulingResponse'
              description: >-
                Scheduling window that determines when an offering is eligible
                for delivery.
            segment_info:
              allOf:
                - $ref: '#/components/schemas/OfferSegmentInfoResponse'
              description: >-
                Segment targeting configuration that controls which users are
                eligible to receive this offering.
            offer_content:
              allOf:
                - $ref: '#/components/schemas/OfferContentResponse'
              description: The core content payload delivered to the end-user.
            variation_meta:
              allOf:
                - $ref: '#/components/schemas/OfferVariationMetaResponse'
              description: Configuration for A/B testing content variations.
            capping_rules:
              allOf:
                - $ref: '#/components/schemas/OfferCappingRulesResponse'
              description: >-
                Frequency capping configuration that limits how often this
                offering is delivered.
            is_global_control_enabled:
              type: boolean
              description: |
                Whether the global control group is enabled.
              example: true
            imp_track_hours:
              type: integer
              description: |
                The attribution window in hours.
            offering_attribute_configuration:
              type: array
              description: |
                Custom attributes assigned to this offering.
              items:
                $ref: '#/components/schemas/OfferAttributeConfigurationResponse'
            conversion:
              allOf:
                - $ref: '#/components/schemas/ConversionDtoResponse'
              description: List of conversion goals to track.
      example:
        type: offer
        data:
          status: scheduled
          created_at: '2026-08-07T23:42:21.556936210Z'
          updated_at: '2026-08-07T23:42:21.556979662Z'
          updated_by: marketing.team@example.com
          created_by: marketing.team@example.com
          name: personalized_offer
          description: Configured using personalization template
          priority: 90
          scheduling:
            start_datetime: '2026-08-08T00:23:00Z'
            expiry_datetime: '2027-08-07T23:23:00Z'
            timezone: Asia/Kolkata
          segment_info:
            filters:
              included_filters:
                filter_operator: and
                filters:
                  - action_name: MOE_PAGE_VIEWED
                    executed: true
                    filter_type: actions
                    execution:
                      count: 1
                      type: atleast
                    primary_time_range:
                      type: inTheLast
                      value: 2
                      value_type: relative_past
                      period_unit: weeks
                    attributes:
                      filter_operator: and
                      filters: []
          variation_meta:
            type: SMV
            control_group:
              is_enabled: false
              percentage: 0
            smv_distribution:
              split:
                '1': 100
          capping_rules:
            overall:
              enabled: false
              limit_value: 1
              limit_schedule: DAILY
            user_level:
              enabled: false
              limit_value: 1
              limit_schedule: DAILY
          is_global_control_enabled: true
    ErrorResponse:
      type: object
      required:
        - response_id
      properties:
        error:
          type: object
          required:
            - code
            - message
            - doc_url
          properties:
            code:
              type: string
              description: Machine-readable ALL_CAPS_SNAKE_CASE error code.
              example: VALIDATION_FAILED
            message:
              type: string
              description: >-
                Human-readable explanation. Specific enough for AI agents to act
                on.
            target:
              type: string
              description: >-
                The field or resource that caused the error (e.g.
                "scheduling.expiry_datetime").
            details:
              type: array
              description: >
                Per-field error entries for VALIDATION_FAILED responses. All
                field violations are collected and returned in a single response
                — never truncated.
              items:
                type: object
                properties:
                  code:
                    type: string
                    description: Field-level error code.
                  target:
                    type: string
                    description: Dot-notation path to the failing field.
                  message:
                    type: string
                    description: Human-readable description of the field-level violation.
            doc_url:
              type: string
              description: Link to documentation for this error code.
              example: https://www.moengage.com/docs/api/offerings/offerings-overview
        response_id:
          type: string
          description: >
            Trace identifier — same format as success responses ("resp_" +
            X-MOE-Request-Id). Always present even on error responses for log
            correlation.
    OfferSchedulingResponse:
      type: object
      properties:
        start_datetime:
          type: string
          format: date-time
          description: >
            ISO 8601 UTC datetime when the offering becomes eligible for
            delivery.
        expiry_datetime:
          type: string
          format: date-time
          description: >
            ISO 8601 UTC datetime when the offering expires and stops being
            served.
        timezone:
          type: string
          description: |
            IANA timezone name.
          example: Asia/Kolkata
    OfferSegmentInfoResponse:
      description: >
        `included_filters`: criteria a user MUST match to be eligible.

        `excluded_filters`: criteria that DISQUALIFY a user even if they match
        the

        included filters.
      type: object
      properties:
        filters:
          type: object
          description: |
            Container for inclusion and exclusion filter blocks.
          properties:
            included_filters:
              type: object
              description: |
                The filtering criteria used for including users.
              properties:
                filters:
                  type: array
                  description: >
                    Array of individual filter criteria. Each item is a filter
                    object whose structure varies by filter_type. Common
                    filter_type values: `actions`, `user_attributes`,
                    `custom_segments`.
                  items:
                    type: object
                    description: >-
                      A single filter criterion. Structure varies by
                      filter_type.
                filter_operator:
                  type: string
                  description: |
                    The logical operator to combine filters.
                  enum:
                    - and
                    - or
            excluded_filters:
              type: object
              description: |
                The filtering criteria used for excluding users.
              properties:
                filters:
                  type: array
                  items:
                    type: object
                filter_operator:
                  type: string
                  enum:
                    - and
                    - or
    OfferContentResponse:
      type: object
      properties:
        content_1:
          $ref: '#/components/schemas/ContentBlockResponse'
          description: |
            Primary content block for single variation offerings.
        locales:
          type: object
          additionalProperties:
            type: object
            description: Content container for a single locale.
            properties:
              variations:
                type: object
                additionalProperties:
                  type: object
                  properties:
                    content_1:
                      $ref: '#/components/schemas/ContentBlockResponse'
    OfferVariationMetaResponse:
      type: object
      properties:
        type:
          type: string
          description: >
            Variation strategy type. `SMV` — fixed percentage split. `DMV` -
            adaptive traffic allocation.
          enum:
            - SMV
            - DMV
        smv_distribution:
          type: object
          description: |
            Variation percentage allocation.
          properties:
            split:
              type: object
              description: |
                Map of variations to integer percentage allocation.
              additionalProperties:
                type: integer
        control_group:
          type: object
          description: >
            A percentage of eligible users that are held out as a pure control
            and do not receive the offering.
          properties:
            is_enabled:
              type: boolean
              description: Whether the offering-level control group holdout is active.
              example: false
            percentage:
              type: integer
              description: |
                Percentage of eligible users to hold out.
    OfferCappingRulesResponse:
      type: object
      properties:
        overall:
          $ref: '#/components/schemas/OfferCappingRuleResponse'
          description: Total delivery cap across all users within the target segment.
        user_level:
          $ref: '#/components/schemas/OfferCappingRuleResponse'
          description: Per-user delivery cap for individual users.
    OfferAttributeConfigurationResponse:
      description: >
        Assignment of a custom offering attribute and its value(s) to this
        offering.
      type: object
      properties:
        offering_attribute_id:
          type: string
          description: |
            ID of the Offering Attribute.
        offering_attribute_name:
          type: string
          description: |
            Display name of the referenced Offering Attribute.
        type:
          type: string
          description: |
            Attribute type of the referenced Offering Attribute.
          enum:
            - FIXED
            - DYNAMIC
        selected_values:
          type: array
          description: |
            Selected option value(s) for this attribute.
          items:
            type: object
            properties:
              id:
                type: string
                description: >
                  ID of the option(s) defined as part of the Offering Attribute
                  definition.
                nullable: true
              value:
                type: string
                description: |
                  Option value string.
              score:
                type: integer
                description: |
                  Priority score for this option.
                nullable: true
    ConversionDtoResponse:
      type: object
      properties:
        primary:
          $ref: '#/components/schemas/ConversionGoalResponse'
          description: |
            Primary conversion goal.
        secondary:
          type: array
          description: |
            Additional conversion goals tracked alongside the primary goal.
          items:
            $ref: '#/components/schemas/ConversionGoalResponse'
    ContentBlockResponse:
      type: object
      properties:
        type:
          type: string
          description: >
            Format of the content payload. `json` — serialised JSON string.
            `content_block` — Content Block library reference ID. `template` —
            object of template field key-value pairs.
          enum:
            - json
            - content_block
            - template
        value:
          oneOf:
            - type: string
            - type: object
              description: >-
                For `template` type — a map of template field names to their
                values.
              additionalProperties: true
        meta:
          type: object
          description: |
            Key-value metadata attached to this content block.
          additionalProperties: true
    OfferCappingRuleResponse:
      description: A single frequency capping rule (either overall or per-user).
      type: object
      properties:
        enabled:
          type: boolean
          description: Whether this capping rule is enforced.
        limit_value:
          type: integer
          description: >
            Maximum number of deliveries allowed within one limit_schedule
            period. For overall capping, this is the total across all users. For
            user_level capping, this is per individual user.
        limit_schedule:
          type: string
          description: |
            Time window for the capping counter.
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
    ConversionGoalResponse:
      description: A single conversion goal that tracks a specific user action.
      type: object
      properties:
        goal_name:
          type: string
          description: |
            Display name for this conversion goal.
        action:
          type: string
          description: |
            MoEngage event name associated with the conversion goal.
        filter_type:
          type: string
          description: >
            How the conversion event is matched. "ACTIONS" matches by event name
            and optional attribute-level filters.
        attributes:
          $ref: '#/components/schemas/ConversionAttributesResponse'
          description: >
            Optional attribute-level filters to narrow which occurrences of the
            action count as a conversion.
        is_revenue_tracking:
          type: boolean
          description: >
            When true, the conversion also records the monetary value from the
            event.
        revenue_amount:
          type: string
          description: >
            Name of the event attribute containing the transaction revenue
            value.
        revenue_currency:
          type: string
          description: |
            ISO 4217 three-letter currency code for revenue tracking.
    ConversionAttributesResponse:
      type: object
      description: |
        Attribute-level filters applied to the conversion event.
      properties:
        filters:
          type: array
          description: >
            Array of attribute filter objects. Each object targets a specific
            event attribute. Follows the same filter structure as
            `segment_info.filters.included_filters.filters`.
          items:
            type: object
            description: >-
              A single attribute filter criterion. Structure varies by
              filter_type.
          properties:
            included_filters:
              type: object
              description: >
                Inclusion criteria for the conversion attribute filter. Contains
                a "filters" array of filter objects and a "filter_operator" (AND
                or OR).
              properties:
                filters:
                  type: array
                  items:
                    type: object
                    description: >-
                      A single filter criterion. Structure varies by
                      filter_type.
                filter_operator:
                  type: string
                  enum:
                    - and
                    - or
            excluded_filters:
              type: object
              description: Exclusion criteria, same structure as included_filters.
              properties:
                filters:
                  type: array
                  items:
                    type: object
                filter_operator:
                  type: string
                  enum:
                    - and
                    - or
  responses:
    GatewayAuthError:
      description: >
        Authentication or authorisation failure from the API gateway layer.

        This response is generated by the gateway before the request reaches the
        service.

        The body is JSON-formatted but API gateway sends it with `Content-Type:
        text/plain`.

        Two gateway error codes are possible:

        - `ER001` — credentials missing or invalid (401).

        - `ER007` — credentials valid but insufficient scope for this route
        (403).
      content:
        text/plain:
          schema:
            type: string
            example: >-
              {"code":"ER001","target":"Authentication Invalid","message":"Auth
              validation failed."}
    ServiceUnavailable:
      description: >
        Gateway temporarily unable to route the request. Returned when the

        upstream service is unreachable or the HTTP request cannot be proxied
        (e.g. malformed

        headers with control characters). Treat as a transient error and retry
        with exponential back-off.
      content:
        text/html:
          schema:
            type: string
            example: >-
              <html><body><h1>503 Service Temporarily
              Unavailable</h1></body></html>
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >
        Authentication is done via Basic Auth. This requires a base64-encoded
        string of your credentials in the format `username:password`.


        - **Username**: Use your MoEngage Workspace ID (also known as the App
        ID). Find it in the MoEngage dashboard at **Settings** > **Account** >
        **API keys**.

        - **Password**: Use an API key from **Settings** > **Account** > **API
        keys**.


        Refer to [API Key
        Dashboard](/user-guide/settings/account/api-and-api-keys/api-key-dashboard)
        for details on creating and managing API keys.

````