GoliathDevelopersGet an API key
Reference/Workflowsgenerated from the gateway manifest

applyTaskSet

Run a whole TASK_SET against a contact.

POST/api/v1/callWRITEidempotent · 24 hruns as the key's owner
View as Markdown

Run a whole TASK_SET against a contact: creates every step as a task in one call, all assigned to the acting user and linked to the contact (and any dealIds). Each step's due date is ITS OWN relative offset from one shared “now”, snapped to its own preferred time-of-day; the referenced template's timing is ignored inside a set. Steps run in due order and stop at the FIRST failure, KEEPING what was created: the payload carries the tasks that landed plus failedStep { index, taskTemplateId, message }, and it does NOT error, so read failedStep before reporting success. Rejects a template not of type TASK_SET. Set ids: listContentTemplates(type: TASK_SET).

curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "operationId": "applyTaskSet",
    "variables": {
      "templateId": "<templateId>",
      "contactId": "<contactId>"
    }
  }'
import { GoliathClient } from '@goliath-data/sdk'

const goliath = new GoliathClient({
  apiKey: process.env.GOLIATH_API_KEY!,
  baseUrl: 'https://server.goliathdata.com',
})

const result = await goliath.workflows.applyTaskSet(
  {
    templateId: '<templateId>',
    contactId: '<contactId>'
  },
  { idempotencyKey: crypto.randomUUID() },
)
const res = await fetch('https://server.goliathdata.com/api/v1/call', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.GOLIATH_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({
    operationId: 'applyTaskSet',
    variables: {
      templateId: '<templateId>',
      contactId: '<contactId>'
    }
  }),
})
const { data, errors } = await res.json()

Variables

The example sends only what the schema requires. Some operations also need one of several optional variables (one filter or another, say); the description above says which.

templateIdID!required
contactIdID!required
dealIds[ID!]

Response

What comes back under data: a list shows as one entry, and a value as its type.

response shape
{
  "data": {
    "workflowAutomationsMutation": {
      "applyTaskSet": {
        "tasks": [
          {
            "id": "<ID>",
            "title": "…",
            "description": "…",
            "endDate": "2026-01-01T00:00:00.000Z",
            "completedAt": "2026-01-01T00:00:00.000Z"
          }
        ],
        "failedStep": {
          "index": 0,
          "taskTemplateId": "<ID>",
          "message": "…"
        }
      }
    }
  }
}

Errors

Idempotency

Send an Idempotency-Key of 1 to 255 characters. A finished request retried with the same key replays its stored response, marked Idempotency-Replayed: true; one still in flight returns 409 idempotency_conflict. Keys expire after 24 hours. Write without fear →