drafts.update
Partial update: an omitted field is left as is, null clears it.
Prerequisites
- A Curviate API key, passed as
apiKeywhen you construct the client. Quickstart shows how to create one.
Signature
update(id: string, body: DraftUpdateBody): Promise<DraftUpdateResult>Example
import { Curviate } from "@curviate/sdk";
const curviate = new Curviate({
apiKey: "cvt_live_...",
baseUrl: "https://api.curviate.com",
});
await curviate.drafts.update(id, { scheduled_at: null }); // unscheduleParameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Draft id (drf_...). |
account_id | string | No | The account (acc_...) this Draft will publish as, or null for none yet. A Draft belongs to at most one account. |
scheduled_at | string | No | When Curviate publishes this Draft: an ISO 8601 date-time with an offset, at least 5 minutes and at most 365 days ahead, stored in UTC truncated to the minute. Scheduling needs an account and text. Curviate publishes it up to 20 seconds after this time, and keeps scheduled posts on one account at least 5 minutes apart. null unschedules. |
text | string | No | Post body text, up to 3000 characters. May be empty while drafting; publishing needs at least one character. |
quoted_post_id | string | No | A post to quote or repost when published, the same as on create post. Checked at publish time. |
can_read | string | No | Who can read the post once published. |
can_comment | string | No | Who may comment once published. |
post_as | string | No | Company page id to post as; the account must administer it. Checked at publish time. |
attachments | array | No | Replaces the whole list. Each item is {id} to keep an existing attachment, or a new base64 object. Attachments left out are deleted. |
Returns
Resolves to DraftUpdateResult. Top-level fields: object, id, account_id, status, text, attachments, quoted_post_id, can_read, can_comment, post_as, scheduled_at, failure, created_at, updated_at, safety_warning.
Error codes
| Code | What it means, and what to do |
|---|---|
UNAUTHORIZED | The API key is missing, malformed, or revoked. Check the key you passed to the client. |
INVALID_REQUEST | A parameter failed validation. The message names the offending field; fix the request rather than retrying it. |
RATE_LIMIT_ACCOUNT | This account's own quota is exhausted. Wait for the window in the Retry-After header, then retry. |
RATE_LIMIT_TENANT | The tenant-wide quota is exhausted across all accounts. Slow the whole workload, not just this call. |
PLATFORM_RATE_LIMIT | LinkedIn is throttling this account. Back off well beyond the hinted delay; sustained pressure risks the account. |
PLATFORM_ERROR | An upstream failure, usually transient: retry once with backoff before treating it as a real error. Check the response first, though. When it carries retry_likely_to_succeed: false and retry_hint: {kind: "never"}, retrying cannot help and backing off only delays the real answer. |
ACCOUNT_NOT_FOUND | No connected account with that id belongs to this tenant. List your accounts to get a current id. |
ACCOUNT_REQUIRED | Publishing or scheduling needs an account on the Draft (and account_id: null on a scheduled Draft is refused). Set account_id first, or unschedule before clearing it. |
DRAFT_LIMIT_REACHED | The bucket (one account, or Drafts with no account) already holds 50 Drafts. Delete one, or use another account; retrying unchanged will not help. |
DRAFT_NOT_PUBLISHABLE | The Draft has a content gap, such as empty text; the message names the field. Fix it, then publish or schedule again. |
DRAFT_PUBLISHING | A publish of this Draft is in flight, or its outcome is still being settled. Read the Draft again in a few seconds; if the message says to check the account's posts first, do that before retrying. |
MEDIA_QUOTA_EXCEEDED | The file would take the bucket past its media quota and nothing was stored. Delete media from other Drafts first. |
NO_ACTIVE_SEAT | The targeted account is not on an active seat. Buy or attach a seat in Billing, then retry. |
PAYLOAD_TOO_LARGE | A file is over its limit: 5 MiB per image or per file sent inline, 50 MiB for a video or PDF sent with uploadAttachment. Send a smaller file, or move a large one to uploadAttachment. |
RESOURCE_NOT_FOUND | The id in the path does not exist, or is not visible to this account. Re-read it from the list endpoint that produced it. |
SCHEDULE_CONFLICT | Another scheduled Draft on the same account is within 5 minutes of this scheduled_at; the message names it. Pick a time at least 5 minutes away. |
Every code above is a stable CurviateError.code you can branch on. The full list, the response envelope, and retry semantics are in the Error codes reference.
Next steps
drafts.list: List Drafts, cursor-paginated.drafts.get: Return one Draft, with a fresh signed link (valid 1 hour) per attachment.drafts.create: Store a Draft.- SDK Quick Start: installation, the client, account scoping, and pagination.