AB Tasty Campaigns API

Campaign assignment operations

Documentation

Specifications

Code Examples

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-campaign-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-campaign-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-flag-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-flags-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-activation-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-flag-metadata-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-campaign-response-normal-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-campaign-response-simple-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-campaign-response-full-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-batch-activation-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-batch-activation-item-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-campaign-variation-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/ab-tasty/refs/heads/main/json-schema/decision-api-single-campaign-request-schema.json

Other Resources

OpenAPI Specification

ab-tasty-campaigns-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: AB Tasty Decision Activate Campaigns API
  version: 2.0.0
  description: The AB Tasty Decision API is a server-side service that evaluates a visitors context against your active experiments, personalizations, and feature flags, then returns a deterministic decision which campaigns the user qualifies for, the selected variation, and any variables or content to render. It centralizes targeting, traffic allocation, and bucketing so you can power A/B tests, gradual rollouts, and personalized experiences from backends, mobile apps, or edge workers while keeping user exposure consistent. You pass identifiers and attributes at request time, use the response to render the experience, and pair it with event tracking for measurement...
  contact:
    name: Flagship Support
    url: https://www.flagship.io
servers:
- url: https://decision.flagship.io/v2
  description: Production server
security:
- ApiKeyAuth: []
tags:
- name: Campaigns
  description: Campaign assignment operations
paths:
  /{environmentId}/campaigns:
    post:
      tags:
      - Campaigns
      summary: AB Tasty Post Environment Campaigns
      description: 'Retrieves all the campaigns that correspond to the specified user and context attributes.

        By default, the API will send a CAMPAIGN hit to Flagship for each campaign in the response.

        '
      operationId: postEnvironmentidCampaigns
      parameters:
      - $ref: '#/components/parameters/EnvironmentId'
      - $ref: '#/components/parameters/Mode'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignRequest'
            examples:
              basic:
                summary: Basic campaign request
                value:
                  visitor_id: user123
                  context:
                    device: mobile
                    platform: ios
                  visitor_consent: true
              withDecisionGroup:
                summary: Request with decision group
                value:
                  visitor_id: user456
                  context:
                    subscription: premium
                  visitor_consent: true
                  decision_group: VIP_users
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/CampaignResponseNormal'
                - $ref: '#/components/schemas/CampaignResponseSimple'
                - $ref: '#/components/schemas/CampaignResponseFull'
              examples:
                normalMode:
                  summary: Normal mode response
                  value:
                    visitorId: user123
                    campaigns:
                    - id: campaign_abc
                      variationGroupId: vg_123
                      variation:
                        id: var_456
                        modifications:
                          type: JSON
                          value:
                            button_color: blue
                            feature_enabled: true
                simpleMode:
                  summary: Simple mode response
                  value:
                    campaignsVariation:
                    - campaignId: campaign_abc
                      variationId: var_456
                    mergedModifications:
                      button_color: blue
                      feature_enabled: true
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '429':
          $ref: '#/components/responses/RateLimitError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /{environmentId}/campaigns/{campaignId}:
    post:
      tags:
      - Campaigns
      summary: AB Tasty Post Environment Campaigns
      description: 'Retrieves the assignment of your visitor ID with a specific context to the specified campaign ID.

        By default, the API will send a CAMPAIGN hit to Flagship.

        '
      operationId: postEnvironmentidCampaignsCampaignid
      parameters:
      - $ref: '#/components/parameters/EnvironmentId'
      - $ref: '#/components/parameters/CampaignId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SingleCampaignRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
              example:
                id: campaign_abc
                variationGroupId: vg_123
                variation:
                  id: var_456
                  modifications:
                    type: JSON
                    value:
                      button_color: blue
        '302':
          description: Redirect response (when default_redirect_url is specified)
          headers:
            Location:
              schema:
                type: string
              description: Redirect URL
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '429':
          $ref: '#/components/responses/RateLimitError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    CampaignResponseNormal:
      type: object
      properties:
        visitorId:
          type: string
          example: user123
        campaigns:
          type: array
          items:
            $ref: '#/components/schemas/Campaign'
    Error:
      type: object
      properties:
        message:
          type: string
          description: Error message
        code:
          type: string
          description: Error code
    SingleCampaignRequest:
      allOf:
      - $ref: '#/components/schemas/CampaignRequest'
      - type: object
        properties:
          format_response:
            type: boolean
            description: If true, response will be formatted according to modification type
            default: false
          default_redirect_url:
            type: string
            description: Default URL for 302 redirect if no modification redirection is defined
            example: https://example.com/default
    CampaignResponseFull:
      type: object
      properties:
        visitorId:
          type: string
          example: user123
        campaigns:
          type: array
          items:
            $ref: '#/components/schemas/Campaign'
        campaignsVariation:
          type: array
          items:
            $ref: '#/components/schemas/CampaignVariation'
        mergedModifications:
          type: object
          additionalProperties: true
    CampaignVariation:
      type: object
      properties:
        campaignId:
          type: string
          example: campaign_abc
        variationId:
          type: string
          example: var_456
    Campaign:
      type: object
      properties:
        id:
          type: string
          description: Campaign ID
          example: campaign_abc
        variationGroupId:
          type: string
          description: Variation group ID (corresponds to a scenario in Flagship)
          example: vg_123
        variation:
          type: object
          properties:
            id:
              type: string
              description: Variation ID
              example: var_456
            modifications:
              type: object
              properties:
                type:
                  type: string
                  enum:
                  - 'NULL'
                  - JSON
                  - TEXT
                  - IMAGE
                  - HTML
                  - FLAG
                  - REDIRECT
                  description: The modification type
                value:
                  oneOf:
                  - type: object
                  - type: string
                  description: The value of the modification (structure depends on type)
                  example:
                    button_color: blue
                    feature_enabled: true
    CampaignRequest:
      type: object
      required:
      - visitor_id
      properties:
        visitor_id:
          type: string
          description: Unique identifier for the application user or website visitor
          example: user123
        anonymous_id:
          type: string
          description: Identifier for anonymous visitors (e.g., session ID)
          example: session_xyz
        context:
          type: object
          description: JSON object of key-value pairs describing the user and device context
          additionalProperties: true
          example:
            device: mobile
            platform: ios
            subscription_level: premium
        visitor_consent:
          type: boolean
          description: Determines if visitor has consented to GDPR rules
          default: true
        trigger_hit:
          type: boolean
          description: Determines whether a CAMPAIGN hit should be automatically sent
          default: true
        decision_group:
          type: string
          nullable: true
          description: Groups visitors to receive the same variation assignment
          example: VIP_users
    CampaignResponseSimple:
      type: object
      properties:
        campaignsVariation:
          type: array
          items:
            $ref: '#/components/schemas/CampaignVariation'
        mergedModifications:
          type: object
          additionalProperties: true
          description: All remote values merged into a single object
          example:
            button_color: blue
            feature_enabled: true
            welcome_text: Hello!
  responses:
    UnauthorizedError:
      description: Authentication information is missing or invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Invalid API key
            code: UNAUTHORIZED
    RateLimitError:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Rate limit exceeded. Maximum 200 req/s with burst of 600 req/s
            code: RATE_LIMIT_EXCEEDED
  parameters:
    Mode:
      name: mode
      in: query
      required: false
      description: Specifies the format of the response body
      schema:
        type: string
        enum:
        - normal
        - simple
        - full
        default: normal
    EnvironmentId:
      name: environmentId
      in: path
      required: true
      description: Identifies your account and environment (preprod or prod)
      schema:
        type: string
      example: env_abc123
    CampaignId:
      name: campaignId
      in: path
      required: true
      description: Campaign ID or slug
      schema:
        type: string
      example: campaign_abc
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication. Can be found in Flagship Platform under Parameters / Environment & Security