---
title: "Propose a sequence and tailor its campaign"
method: POST
path: "/sequences/proposals/"
tags: ["sequences", "mcp-searchable-tool"]
---

# Propose a sequence and tailor its campaign

`POST /sequences/proposals/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/sequences/proposals/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

The first half of making a sequence the way New sequence does: choose the table (or a saved view of it, or chosen rows) and who sends it, and the library campaign that fits those people is chosen, its steps' instructions rewritten for the company and its goal chosen, in the background, about a minute, BEFORE anything is made. Pass the person's own words about what it is for as `intent`, or a `campaign_key` to run a particular campaign. Poll the proposal until `in_flight` is false, then create the sequence with POST /sequences/ and `proposal_id` (and `goal`, to change it). Free, up to a daily number of tailorings per workspace; a proposal over it, or with no business context to tailor from, answers at once with the reason and still makes a sequence on the standard campaign.

## Request body

- SequenceProposalCreateSchema: What New sequence asks before anything is made: who to write to, who sends, what for.
  - `campaign_key` string, nullable: A campaign from the library to run, by key (see the outbound presets' campaigns). Omitted, tailoring chooses the one that fits the audience best.
  - `intent` string: What the campaign is for, in the person's own words: an event, a launch, an offer, who to reach. The one part of a campaign an email may state as fact.
  - `record_ids` string[], nullable: Chosen rows, when the audience is those rows only.
  - `sender_profile_ids` string[]: The senders it sends from; each email is written as its sender.
  - `table_id` string, uuid, required: The audience's table.
  - `view_id` string, uuid, nullable: A saved view narrowing the audience; null is the whole table.

## Response `201`

Successful Response

- SequenceProposalReadSchema: A sequence not made yet, and how its tailoring stands.
  - `campaign` SequenceProposalCampaignSchema, required: The campaign tailoring chose for a proposal, why, its goal, and its rewritten steps.
    - `campaign_key` string, required
    - `campaign_name` string, required
    - `chosen_by_person` boolean, required: The person chose this campaign themselves.
    - `goal` string, nullable, required: The goal tailoring chose, one of the goal presets.
    - `reason` string, required: Why tailoring chose it, in one line; empty when the person chose it.
    - `steps` SequenceProposalStepSchema[], required
      - `arm` string, nullable: The answer to the campaign's connection request this step waits for: `connected` or `not_accepted`. Null before the request, and on a step that goes on whatever the answer, which the sequence lays out once on each branch.
      - `kind` string, required: `email`, `linkedin_connection` or `linkedin_withdraw`.
      - `note` string: Always empty: tailoring writes no per-step notes any more. Read `prompt`.
      - `prompt` string, required: The instruction the step's message is written from, as tailoring rewrote it for the company; empty on a step that carries no words.
      - `title` string, required
      - `wait_days` integer, required: Days after the step before; 0 on the first.
      - `window_days` integer, nullable: On a connection request: days it waits for an answer. Null on other steps.
    - `summary` string, required
  - `id` string, uuid, required
  - `in_flight` boolean, required: Tailoring is still working; poll until false.
  - `intent` string, required
  - `reason` string, nullable, required: Why it was skipped or failed, as a code.
  - `record_count` integer, nullable, required: How many chosen rows, when rows were chosen.
  - `sender_profile_ids` string[], required
  - `sequence_id` string, uuid, nullable, required: The sequence made from it, once made.
  - `stage` string, nullable, required: While in flight: starting, choosing (the campaign) or writing (its steps for the company).
  - `status` string, nullable, required: The tailoring's outcome once settled: ready_for_review (a campaign is ready), skipped or failed.
  - `table_id` string, uuid, required
  - `table_name` string, required
  - `view_id` string, uuid, nullable, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found.
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/4a6bd71e3f02?raw)
