REST API

Authenticate with Evatype and use the v1 API for projects, ideas, workflows, runs, AI visibility, and content entries.

Base URL

All customer API routes use this base URL:

https://evatype.com/api/v1

Requests and responses use JSON.

Authentication

Send a bearer token with every request:

Authorization: Bearer YOUR_TOKEN

Open API tokens in your Evatype account to create or manage an API token. Interactive clients can use OAuth 2.1 access tokens instead. Both token types use the same permission checks.

A token with read access can call GET endpoints. Write access is required for ideas, generation, workflow updates, schedules, and content entry writes. Missing or invalid authentication returns 401; insufficient permission returns 403.

Find a project ID

Start with:

curl https://evatype.com/api/v1/projects \
  -H "Authorization: Bearer $EVATYPE_API_TOKEN"

Project identifiers use the proj_... format. Use that identifier in project-scoped paths.

Endpoints

Method Path Purpose
GET /projects List projects.
GET /projects/:project_id/ideas List ideas. Use status=pending, archived, or all.
POST /projects/:project_id/ideas Add an idea.
GET /projects/:project_id/brand-context Read positioning, ICP, target topics and competitors.
PATCH /projects/:project_id/brand-context Edit positioning, ICP or target topics, add or edit competitors (by id, or by domain when no id is sent; an id lets you change the domain), and delete the domains listed in remove_competitors.
GET /projects/:project_id/workflows List workflows.
GET /projects/:project_id/workflows/:id Get one workflow and its ordered steps.
PATCH /projects/:project_id/workflows/:id Update a workflow's name, status, archived state, prompt, output schema, or field mapping.
GET /projects/:project_id/usage Read the current usage period and remaining pages.
GET /projects/:project_id/runs List recent generation runs.
GET /projects/:project_id/runs/:id Get a run and its items.
POST /projects/:project_id/runs Generate content from idea indices.
GET /projects/:project_id/run-items/:id Get one generated item.
PATCH /projects/:project_id/run-items/:id Set or remove its publication schedule.
GET /projects/:project_id/ai-visibility/evaluation-runs List AI visibility evaluation runs. Optional report_id filter.
GET /projects/:project_id/ai-visibility/evaluation-runs/:id Get parsed prompt-by-engine results.
GET /projects/:project_id/ai-visibility/evaluation-runs/:id/raw Get parsed results plus retained provider request/response data. Callback credentials are redacted.
GET /projects/:project_id/content-types List content types and field schemas.
GET /projects/:project_id/entries List published entries across content types.
GET /projects/:project_id/content-types/:slug/entries List published entries for one content type.
GET /projects/:project_id/content-types/:slug/entries/:entry_slug Get one entry.
POST /projects/:project_id/content-types/:slug/entries Create an entry.
PATCH /projects/:project_id/content-types/:slug/entries/:entry_slug Update an entry.

List endpoints that return entries accept page and per_page parameters.

AI visibility endpoints are read-only and return stored onboarding results; calling them does not launch provider work. Each run includes the ISO country_code and its model-specific engine_availability snapshot so unsupported engines are distinguishable from failed checks. The list accepts per_page from 1 to 100 and defaults to 25.

Add an idea and start generation

Add an idea with a title or keyword, optional instructions, and a workflow ID:

curl https://evatype.com/api/v1/projects/proj_EXAMPLE/ideas \
  -X POST \
  -H "Authorization: Bearer $EVATYPE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"A guide to content operations","workflow_id":123,"description":"Write for a marketing operations lead."}'

List ideas and read the index value for the idea you want to process. Start a run with one or more indices:

curl https://evatype.com/api/v1/projects/proj_EXAMPLE/runs \
  -X POST \
  -H "Authorization: Bearer $EVATYPE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"idea_indices":[0]}'

The account's remaining page allowance can reduce the number of ideas accepted into a run.

Update a workflow

Send only the settings you want to change. The token needs write permission.

Field Effect
name Renames the workflow.
status draft or active.
archived true archives the workflow. false restores it.
prompt_template Replaces the full writing prompt on the process step.
output_schema Replaces the full list of output fields on the process step. Send an array of field objects. Each object needs a slug.
field_mapping Replaces the full destination mapping on the write step. Send an object whose keys are output field slugs and whose values are destination field slugs. An empty string leaves that output field unwritten.

Read the current workflow first, edit the arrays and objects you get back, and send the complete result. A partial output_schema or field_mapping removes the fields you leave out.

curl https://evatype.com/api/v1/projects/proj_EXAMPLE/workflows/123 \
  -X PATCH \
  -H "Authorization: Bearer $EVATYPE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"field_mapping":{"page-title":"page-title","intro-paragraph":"intro-paragraph","use-cases":""}}'

A malformed output_schema or field_mapping, or a workflow without the matching step, returns 422 and changes nothing.

Schedule a generated item

Set a future timestamp in ISO 8601 format. The value must include Z or an explicit UTC offset.

curl https://evatype.com/api/v1/projects/proj_EXAMPLE/run-items/456 \
  -X PATCH \
  -H "Authorization: Bearer $EVATYPE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"scheduled_publish_at":"2026-08-20T09:00:00+05:30"}'

Remove the schedule by sending null:

{"scheduled_publish_at": null}

The item must contain generated data and have an eligible destination. Invalid, past, or ineligible schedules return 422. A queue error returns 503 and does not save the requested time.

Create or update a content entry

Entry bodies use field_data, whose keys must follow the content type schema. status can be draft or published.

{
  "slug": "content-operations-guide",
  "status": "draft",
  "field_data": {
    "title": "A guide to content operations",
    "body_markdown": "## Introduction\n\nContent..."
  }
}

An entry update merges the submitted field_data into the existing data.

For AI-client access to the same product data, see the MCP guide.