POST /generate starts a new content generation job relative to the https://api.writerzroom.com/api base URL.
It accepts the selected template, selected style profile, generation mode, optional vertical, and structured user input required for that request. The response returns a request_id rather than a completed draft because generation runs asynchronously.
Generation Overview
Template
Defines the content structure.
Style
Controls tone, voice, and audience fit.
Input
Supplies topic, audience, and requirements.
Request ID
Tracks the job until completion.
Request
Uploaded sources
For a template parameter withtype: file_upload, upload the file first using
authenticated POST /parse-file with multipart/form-data and a file field.
Use the same authenticated account for upload and generation. The response
contains a stored source_id, a short preview_text, extraction coverage, and
context size information. Full extracted text and location offsets stay in the
server-owned record.
Pass the ID under that template parameter’s name. For example, a template with
reference_files accepts this inside user_input or dynamic_parameters:
422 response before credits
are charged. Storage failures return 503 without starting generation.
All selected sources must fit one combined 60,000-character context budget,
including labels. Oversized work needs a smaller relevant selection or separate
requests; it is not silently truncated. OCR is not performed. Scanned pages and
detected image content require a searchable text-only copy or a reviewed export.
Old payloads containing only *_extracted_text must be uploaded again.
Accepted requests return source_coverage; the generation metadata and content
passport retain that coverage and the extracted source locations. This records
ingestion, not factual verification or release approval.
Response
Core Request Fields
The template’s lengths, and which tiers can deliver each, are on Get Template by Slug.
Core Request Pattern
1
Choose a template identifier
Select the content structure that matches the output you want to create.
2
Choose a style profile identifier
Select the writing behavior that controls tone, voice, depth, and audience fit.
3
Provide required input fields
Add the required fields inside the
user_input object.4
Submit the request
Call
POST /generate and store the returned request_id.5
Poll until complete
Poll
/generate/status/{request_id} until the request returns completed or failed.Best Practice
An HTTP 422 response at submission is an admission rejection, before a workflow or draft is created and before generation credits are charged. Inspect the returned validation or admission reason and correct the indicated input before resubmitting. Structured field errors can identify the location and rule that failed. Some templates declare which of their options can be combined. For those templates a422 also covers a combination that cannot describe one artifact, such as a graduate course with nine learner hours, and an unknown value for a fixed-choice option or a missing required one. The detail lists every reason. A template option set to auto is resolved to a concrete value at admission, and the run uses that value.
Length refusals return detail as an object with a code and a readable message:
After a request is accepted, retain its
request_id and poll its execution status. A later failure is a different lifecycle event and follows the failed-generation refund path. Do not infer the actual writer model solely from the run-level default; complexity and stage authorization can select a different prose route.
Validate template and style identifiers before submitting large batches of requests. That reduces avoidable failures and makes automation more reliable.
Check Generation Status
Poll the request until content completes or fails.
Endpoints Reference
Review available API endpoints.
Saved source versions
GET /sources lists accessible versions with a next_cursor for pagination.
GET /sources/{source_id} returns the authorized extraction and location offsets;
GET /sources/{source_id}/original downloads its original bytes privately. These
routes require authentication and recheck source access for each request.
Upload a new version through POST /parse-file?supersedes_source_id={source_id}
with the original file as multipart form data. Only the owner can add a version,
and the supplied ID must be the latest version. Existing references stay pinned.
Owners manage explicit teammate access using POST /sources/{source_id}/grants
with user_id, org_id and can_use (false means read-only). Both users must be
active workspace members. Grants cover all versions. DELETE /sources/{source_id}/grants/{recipient_id} revokes a grant; POST /sources/{source_id}/revoke permanently revokes the source lineage for future use.
Generation resolves stored IDs and permissions before charging and rechecks them
at later execution boundaries. Release also rechecks source fingerprints and
access. Client-supplied extracted text cannot establish permission or coverage.