---
title: "Approve errand list"
method: POST
path: "/v1/errands/list/{id}/approve"
tags: ["Owner"]
---

# Approve errand list

`POST /v1/errands/list/{id}/approve`

## Request

- Base URL: `https://api.vicem.ai`
- URL: `https://api.vicem.ai/v1/errands/list/{id}/approve`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Request body

- ApproveErrandListRequest
  - `items` object[], required
    - `errandId` string, required
    - `payloadHash` string, required

## Response `200`

OK

- ApproveErrandListResponse
  - `list` ErrandListResponse, required
    - `id` string, required
    - `errands` ErrandResponse[], required
      - `id` string, required
      - `status` 'planned' | 'queued' | 'dialing' | 'ivr' | 'on_hold' | 'talking' | 'done' | 'failed' | 'needs_owner' | 'cancelled', required
      - `statusLine` string, required
      - `request` string, required
      - `goal` string, required
      - `targetName` string, nullable, required
      - `targetE164` string, required
      - `targetSource` 'contact' | 'places' | 'typed', nullable, required
      - `callLang` string, required
      - `reportLang` string, required
      - `allowedFacts` string[], required
      - `maxMinutes` integer, required
      - `holdMode` 'alert_owner' | 'carry_on', required
      - `holdLimitMinutes` integer, nullable
      - `payloadHash` string, nullable, required
      - `blocker` object, nullable, required
        - `reason` 'no_number' | 'invalid' | 'needs_area_code' | 'emergency' | 'premium' | 'short_code' | 'own_number' | 'unsupported_country' | 'opted_out' | 'business_dnc' | 'owner_daily_cap' | 'destination_daily_cap' | 'no_minutes' | 'service_off' | 'no_caller', required
        - `message` string, required
      - `outcome` object, nullable, required
        - `result` 'achieved' | 'partial' | 'not_achieved' | 'no_answer' | 'voicemail' | 'needs_owner' | 'refused_ai' | 'no_answer_closed', required
        - `summary` string, required
        - `timesOffered` string[], required
        - `price` string, nullable, required
        - `reference` string, nullable, required
        - `nextStep` string, nullable, required
        - `screener` object
          - `detected` boolean, required
          - `passed` boolean, required
          - `vendorHint` string, required
        - `counterpartAi` object
          - `vendorHint` string, nullable, required
          - `principal` string, nullable, required
        - `closedHours` string, nullable
        - `effective` string, nullable
        - `agreed` object, nullable
          - `when` string, nullable, required
          - `what` string, required
        - `scope` object
          - `security` boolean, required
          - `offered` string[], required
        - `reached` object
          - `by` 'person' | 'recording' | 'nobody', required
          - `words` string
          - `seq` integer
      - `summary` string, nullable, required
      - `holdMinutes` integer, required
      - `holdStartedAt` string, date-time
      - `holdPosition` integer, nullable
      - `holdWaitMinutes` integer, nullable
      - `callSeconds` integer, nullable, required
      - `interactionId` string, required
      - `groupId` string
      - `createdAt` string, date-time, required
      - `approvedAt` string, date-time, required
      - `endedAt` string, date-time, required
      - `mailFacts` object[]
        - `id` string, required
        - `label` string, required
        - `value` string, required
      - `wantsPerson` boolean
      - `topic` string, nullable
      - `screenerNote` string
      - `scheduledFor` string, date-time
      - `via` object, nullable
        - `clientName` string, required
      - `bookedLine` string, nullable
      - `again` object, nullable
        - `tryAt` string, date-time, required
      - `stopRequested` boolean
      - `notDialled` boolean
      - `doNotCall` boolean
      - `retryOf` string
      - `ownerJoined` boolean
      - `chase` object, nullable
        - `caseId` string, nullable, required
      - `more` object, nullable
        - `sooner` object, nullable, required
          - `caseId` string, required
        - `again` object, nullable, required
          - `caseId` string, required
      - `usedEarlier` boolean
      - `limits` object, nullable
        - `maxPrice` number, nullable, required
        - `currency` string, nullable, required
        - `window` object, nullable, required
          - `days` integer[], required
          - `from` string, nullable, required
          - `to` string, nullable, required
        - `mustNot` string[], required
        - `decide` 'first_fit' | 'compare', required
      - `callerId` object
        - `name` string, nullable, required
        - `fewerPickUps` boolean, required
    - `skipped` object[], required
      - `name` string, required
      - `message` string, required
    - `createdAt` string, date-time, required
  - `results` object[], required
    - `errandId` string, required
    - `ok` boolean, required
    - `code` string, nullable, required
    - `message` string, nullable, required

## Other responses

- `400`: Invalid request (body not JSON, or schema validation failed).
- `401`: Missing, expired or invalid bearer token.
- `404`: No such resource, or not visible to this caller.
- `413`: Body over the limit (64 KB; 512 KB for contact import).
- `500`: Unexpected server error (reported to Sentry).

---

[API](https://skmtc.dev/vicem/apis/vicem-api.md) · [All operations](https://skmtc.dev/vicem/apis/vicem-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vicem/apis/vicem-api/revisions/9efcec07e5f4?raw)
