API reference

Distribute traffic for experiment

POST /experiments/{experiment}/distribute-traffic. Parameters, permissions, request and response schemas.

POST /experiments/{experiment}/distribute-traffic

Distribute traffic for experiment. Requires the REST write token ability. The bearer token selects the Team; a supplied team_id cannot switch tenants. Additional role, entity-policy and plan requirements vary by operation. A Team in blocked billing mode cannot write and receives 402. No request body. Splits the remaining traffic equally among unlocked variations while preserving locked shares. A Live experiment returns 422.

Authentication

Use a team API key as Authorization: Bearer YOUR_API_KEY. The token ability and the user’s role must both allow this operation. See authentication.

{
  "ability": "write",
  "team": "Token-bound Team",
  "authorization": "Additional role, entity-policy and plan requirements vary by operation.",
  "billing": "Blocked billing mode rejects writes with 402."
}

Parameters

NameLocationRequiredDescription
experimentpathYesThe experiment ID

experiment

{
  "type": "integer",
  "minimum": 1
}

Example request

curl --request POST 'https://api.example.test/api/experiments/1/distribute-traffic' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Accept: application/json'

Examples use fictional data. Replace resource IDs and the API host with your environment’s values.

Responses

200

ExperimentResource

Content type: application/json.

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer"
        },
        "custom_id": {
          "type": [
            "string",
            "null"
          ]
        },
        "numbering_scheme_id": {
          "type": [
            "integer",
            "null"
          ]
        },
        "custom_id_number": {
          "type": [
            "integer",
            "null"
          ]
        },
        "import_source": {
          "type": [
            "string",
            "null"
          ]
        },
        "import_source_ref": {
          "type": [
            "string",
            "null"
          ]
        },
        "import_source_id": {
          "type": [
            "string",
            "null"
          ]
        },
        "data_import_id": {
          "type": [
            "integer",
            "null"
          ]
        },
        "imported_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "project_id": {
          "type": [
            "integer",
            "null"
          ]
        },
        "type": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "ab_test",
                "multivariate_test"
              ],
              "title": "ExperimentType"
            },
            {
              "type": "null"
            }
          ]
        },
        "state_id": {
          "type": [
            "integer",
            "null"
          ]
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "hypothesis": {
          "type": [
            "string",
            "null"
          ]
        },
        "primary_metric_id": {
          "type": [
            "integer",
            "null"
          ]
        },
        "start_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "end_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "stop_reason": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "hypothesis_rejected",
                "hypothesis_iteration",
                "user_feedback",
                "data_issue",
                "implementation_issue",
                "experiment_setup_issue",
                "guardrail_metric_impact",
                "secondary_metric_impact",
                "operational_decision",
                "performance_issue",
                "testing",
                "tracking_issue",
                "other"
              ],
              "title": "ExperimentStopReason"
            },
            {
              "type": "null"
            }
          ]
        },
        "result": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "conclusive_winner",
                "conclusive_loser",
                "inconclusive",
                "error",
                "other"
              ],
              "title": "ExperimentResult"
            },
            {
              "type": "null"
            }
          ]
        },
        "decision": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "implement",
                "rollout",
                "retest",
                "iterate",
                "reject"
              ],
              "title": "ExperimentDecision"
            },
            {
              "type": "null"
            }
          ]
        },
        "learning": {
          "type": [
            "string",
            "null"
          ]
        },
        "user_id": {
          "type": [
            "integer",
            "null"
          ]
        },
        "external_id": {
          "type": [
            "string",
            "null"
          ]
        },
        "external_platform": {
          "type": [
            "string",
            "null"
          ]
        },
        "external_synced_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "external_metadata": {
          "description": "JSON object or array. Object keys depend on the provider, form question, or configuration being stored.",
          "anyOf": [
            {
              "type": "object",
              "additionalProperties": {
                "description": "An arbitrary JSON value retained by a metadata/settings field.",
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/JsonValue"
                    }
                  },
                  {
                    "type": "object",
                    "additionalProperties": {
                      "$ref": "#/components/schemas/JsonValue"
                    }
                  }
                ]
              }
            },
            {
              "type": "array",
              "items": {
                "description": "An arbitrary JSON value retained by a metadata/settings field.",
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/JsonValue"
                    }
                  },
                  {
                    "type": "object",
                    "additionalProperties": {
                      "$ref": "#/components/schemas/JsonValue"
                    }
                  }
                ]
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "created_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "updated_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "deleted_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "latest_approval": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "experiment_id": {
                  "type": "integer"
                },
                "user_id": {
                  "type": "integer"
                },
                "status": {
                  "type": "string"
                },
                "notes": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "approved_at": {
                  "type": "string"
                },
                "created_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "user": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "name": {
                      "type": "string"
                    },
                    "email": {
                      "type": "string"
                    },
                    "avatar": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "email",
                    "avatar"
                  ]
                }
              },
              "required": [
                "id",
                "experiment_id",
                "user_id",
                "status",
                "notes",
                "approved_at",
                "created_at"
              ],
              "title": "ExperimentApprovalResource"
            },
            {
              "type": "null"
            }
          ]
        },
        "approvals": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "experiment_id": {
                "type": "integer"
              },
              "user_id": {
                "type": "integer"
              },
              "status": {
                "type": "string"
              },
              "notes": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "approved_at": {
                "type": "string"
              },
              "created_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "user": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer"
                  },
                  "name": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "avatar": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "id",
                  "name",
                  "email",
                  "avatar"
                ]
              }
            },
            "required": [
              "id",
              "experiment_id",
              "user_id",
              "status",
              "notes",
              "approved_at",
              "created_at"
            ],
            "title": "ExperimentApprovalResource"
          }
        }
      },
      "required": [
        "id",
        "custom_id",
        "numbering_scheme_id",
        "custom_id_number",
        "import_source",
        "import_source_ref",
        "import_source_id",
        "data_import_id",
        "imported_at",
        "project_id",
        "type",
        "state_id",
        "name",
        "description",
        "hypothesis",
        "primary_metric_id",
        "start_date",
        "end_date",
        "stop_reason",
        "result",
        "decision",
        "learning",
        "user_id",
        "external_id",
        "external_platform",
        "external_synced_at",
        "external_metadata",
        "created_at",
        "updated_at",
        "deleted_at"
      ],
      "title": "ExperimentResource"
    }
  },
  "required": [
    "data"
  ]
}
{
  "data": {
    "id": 101,
    "custom_id": null,
    "numbering_scheme_id": null,
    "custom_id_number": null,
    "import_source": null,
    "import_source_ref": null,
    "import_source_id": null,
    "data_import_id": null,
    "imported_at": null,
    "project_id": null,
    "type": null,
    "state_id": null,
    "name": "Checkout delivery estimate",
    "description": null,
    "hypothesis": null,
    "primary_metric_id": null,
    "start_date": null,
    "end_date": null,
    "stop_reason": null,
    "result": null,
    "decision": null,
    "learning": null,
    "user_id": null,
    "external_id": null,
    "external_platform": null,
    "external_synced_at": null,
    "external_metadata": null,
    "created_at": null,
    "updated_at": null,
    "deleted_at": null
  }
}

401

Unauthenticated

Content type: application/json.

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "Error overview."
    }
  },
  "required": [
    "message"
  ]
}
{
  "message": "The request could not be completed."
}

402

The Team is in read-only billing mode.

Content type: application/json.

{
  "type": "object",
  "properties": {
    "error": {
      "type": "string",
      "const": "subscription_required"
    },
    "mode": {
      "type": "string",
      "const": "blocked"
    },
    "message": {
      "type": "string",
      "example": "Your team is in read-only mode. Update billing to make changes."
    },
    "grace_period_ends_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  },
  "required": [
    "error",
    "mode",
    "message",
    "grace_period_ends_at"
  ]
}
{
  "error": "subscription_required",
  "mode": "blocked",
  "message": "Your team is in read-only mode. Update billing to make changes.",
  "grace_period_ends_at": null
}

403

Token ability, user permission, Team membership, plan, or billing mode does not allow this operation.

Content type: application/json.

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "example": "This action is unauthorized."
    }
  },
  "required": [
    "message"
  ]
}
{
  "message": "This action is unauthorized."
}

404

Not found

Content type: application/json.

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "Error overview."
    }
  },
  "required": [
    "message"
  ]
}
{
  "message": "The request could not be completed."
}

422

Validation error

Content type: application/json.

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "Errors overview."
    },
    "errors": {
      "type": "object",
      "description": "A detailed description of each field that failed validation.",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    }
  },
  "required": [
    "message",
    "errors"
  ]
}
{
  "message": "The request could not be completed.",
  "errors": {
    "name": [
      "The name field is required."
    ]
  }
}

429

Rate limit exceeded. Honor Retry-After before retrying.

Response headers:

{
  "Retry-After": {
    "description": "Seconds before retrying.",
    "schema": {
      "type": "integer"
    }
  }
}

Content type: application/json.

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "example": "Too Many Attempts."
    }
  },
  "required": [
    "message"
  ]
}
{
  "message": "Too Many Attempts."
}

See API conventions for error handling, rate limits, pagination, and uploads.

Was this article helpful?

Need more help? Copy this article's details and paste them into a request on our feedback portal. You may need to sign in.

Open feedback portal

On this page