---
title: "Create an A/B template"
method: POST
path: "/ab-templates"
tags: ["A/B Templates"]
---

# Create an A/B template

`POST /ab-templates`

## Request

- Base URL: `https://gajo.io/api/v1`
- URL: `https://gajo.io/api/v1/ab-templates`
- Auth: API key in header `x-api-key`

**Requires a Pro plan.** Creates a reusable split test. Variant names must be unique and `splitPercentage` values (each at least 1) must sum to 100. Each click is assigned to a variant at random according to the percentages. A/B templates are abstract: variant names and traffic percentages only, no URLs. Concrete destinations are set per link with `POST /urls/{code}/binding`.

## Request body

- AbTemplateRequest
  - `name` string, required: 2-100 characters: letters, digits, hyphens and underscores. Unique per account.
  - `description` string, nullable: Optional note. Omitting it on update clears it.
  - `variants` object[], required: Variants with unique names; `splitPercentage` values must sum to 100.
    - `variantName` string, required
    - `splitPercentage` integer, required

## Response `200`

The new template.

- AbTemplateResult: Envelope shared by every response.
  - `success` true, required: `true` when the request succeeded.
  - `message` string, nullable: Human-readable status or error message. Often `null` on reads.
  - `data` object, required: An abstract A/B split template: variant names and percentages only, no URLs.
    - `name` string, required
    - `description` string, nullable, required
    - `active` boolean, required
    - `createdDate` string, date-time, required
    - `updatedDate` string, date-time, nullable, required
    - `variants` object[], required
      - `variantName` string, required
      - `splitPercentage` integer, required
      - `priority` integer, required: Position in the template (0-based, request order).

## Other responses

- `400`: Invalid request. `message` explains what to fix.
- `401`: The `x-api-key` header is missing, or the key is unknown or revoked.
- `403`: Your plan is not Pro (the message names the Pro feature).
- `429`: Per-minute rate limit exceeded. Wait `Retry-After` seconds.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/gajo/apis/gajo-api.md) · [All operations](https://skmtc.dev/gajo/apis/gajo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gajo/apis/gajo-api/revisions/de6fe920cc26?raw)
