> ## Documentation Index
> Fetch the complete documentation index at: https://docs.objectionly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Queue Call

> Queue transcript text, uploaded media, or remote audio/video URLs for processing.

## Base URL

[https://api.objectionly.com](https://api.objectionly.com)

## Endpoint

`POST /api/call-processing/queue`

## Authentication

<Note>
  Get your API key here:
  [https://app.objectionly.com/dashboard/integrations](https://app.objectionly.com/dashboard/integrations)
</Note>

<ParamField header="X-Workspace-API-Key" type="string" required>
  Your workspace API key.
</ParamField>

<ParamField header="X-Objectionly-Proxy-Token" type="string">
  Required only when your workspace is configured to require a proxy token.
</ParamField>

<ParamField header="X-Objectionly-Source" type="string">
  Optional source header. Supported values match the `source` body field. If
  both are sent, the body `source` value takes precedence.
</ParamField>

## Request Body

<ParamField body="title" type="string" required default="Discovery call - Acme">
  Call title.
</ParamField>

<ParamField body="repEmail" type="string" required default="rep@acme.com">
  Rep or host identity. This is usually an email address, but it can also be a
  unique rep identifier configured in Objectionly.
</ParamField>

<ParamField body="callDate" type="string" required default="2026-01-31T18:30:00Z">
  ISO-8601 timestamp.
</ParamField>

<ParamField body="transcriptText" type="string">
  Plain transcript text. This is the preferred text field for new integrations.
</ParamField>

<ParamField body="mediaUrl" type="string">
  Absolute `http(s)` URL for a remote audio or video file. Can be used by
  itself or together with `transcriptText`.
</ParamField>

<ParamField body="file" type="string">
  Multipart file upload for direct media ingestion. `file` and `mediaUrl`
  cannot be sent together.
</ParamField>

<ParamField body="repName" type="string">
  Rep or host display name.
</ParamField>

<ParamField body="callDuration" type="number">
  Duration in minutes. Must be a positive integer. Defaults to `30` if omitted.
</ParamField>

<ParamField body="description" type="string">
  Additional context to store with the call.
</ParamField>

<ParamField body="externalMeetingId" type="string">
  Used for de-duplication/idempotency across calls.
</ParamField>

<ParamField body="source" type="string">
  Optional source value. Supported values: `manually`, `firefliesai`,
  `fathom`, `zoom`, `gohighlevel`, `zapier`, `custom_api`.
</ParamField>

<ParamField body="forceImport" type="boolean">
  Bypasses early short-call filtering when set to `true`. For manual imports,
  this defaults to `true` if omitted.
</ParamField>

<ParamField body="attendees" type="array">
  Optional list of call attendees. Send up to `10` attendee objects.
</ParamField>

<Info>
  Provide at least one ingest input: `transcriptText`, `mediaUrl`, or `file`.
</Info>

Attendees should be sent as an array. Each attendee can include `name`, `phone`,
`email`, and `uniqueId`.

```json theme={null}
{
  "attendees": [

  ]
}
```

Example with one attendee:

```json theme={null}
{
  "attendees": [
    {
      "name": "Alex Buyer",
      "phone": "+15551234567",
      "email": "alex@example.com",
      "uniqueId": "crm-contact-id"
    }
  ]
}
```

<Note>
  Attendee fields are optional. Objectionly trims attendee values, stores blank
  values as `null`, and skips attendee objects where every field is blank.
</Note>

<Note>
  Media-only requests are accepted. When you upload a `file` or provide a
  `mediaUrl` without transcript text, Objectionly stores the media and
  transcribes it later during processing.
</Note>

<Note>
  Supported media types are `.mp3`, `.wav`, `.m4a`, and `.mp4`, mapped to
  `audio/mpeg`, `audio/wav`, `audio/m4a`, and `video/mp4`.
</Note>

## Examples

<Tabs>
  <Tab title="Transcript text (JSON)">
    ```json theme={null}
    {
      "title": "Discovery call - Acme",
      "transcriptText": "Full transcript text...",
      "repEmail": "rep@acme.com",
      "repName": "Alex Rep",
      "callDate": "2026-01-31T18:30:00Z",
      "callDuration": 42,
      "description": "Optional summary or metadata...",
      "externalMeetingId": "optional-idempotency-key",
      "source": "custom_api",
      "attendees": [
        {
          "name": "Alex Buyer",
          "phone": "+15551234567",
          "email": "alex@example.com",
          "uniqueId": "crm-contact-id"
        }
      ]
    }
    ```
  </Tab>

  <Tab title="Remote media URL (JSON)">
    ```json theme={null}
    {
      "title": "Remote recording",
      "mediaUrl": "https://cdn.example.com/calls/discovery-call.mp4",
      "repEmail": "rep@acme.com",
      "repName": "Alex Rep",
      "callDate": "2026-01-31T18:30:00Z",
      "callDuration": 42,
      "source": "custom_api"
    }
    ```
  </Tab>

  <Tab title="Transcript + media URL (JSON)">
    ```json theme={null}
    {
      "title": "Remote recording with transcript",
      "transcriptText": "Transcript already captured by the upstream system.",
      "mediaUrl": "https://cdn.example.com/calls/discovery-call.mp3",
      "repEmail": "rep@acme.com",
      "repName": "Alex Rep",
      "callDate": "2026-01-31T18:30:00Z",
      "source": "firefliesai"
    }
    ```
  </Tab>

  <Tab title="File upload (multipart)">
    Send a `multipart/form-data` request with form fields like `title`,
    `repEmail`, `callDate`, optional `transcriptText`, and a `file` part.
    To include attendees in a multipart request, send an `attendees` form field
    containing a JSON-encoded array, such as
    `[{"name":"Alex Buyer","phone":"+15551234567"}]`.

    Do not manually set the multipart `Content-Type` header; your HTTP client
    should generate it with the boundary.
  </Tab>
</Tabs>

## Responses

<Tabs>
  <Tab title="Queued (200)">
    <ResponseField name="callId" type="string" required>
      Unique identifier for the queued call.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      Queue status for the call.
    </ResponseField>

    <ResponseField name="queued" type="boolean" required>
      Indicates the call was queued successfully.
    </ResponseField>

    ```json theme={null}
    {
      "callId": "uuid",
      "status": "queued",
      "queued": true
    }
    ```
  </Tab>

  <Tab title="Filtered Out (200)">
    <ResponseField name="callId" type="string" required>
      Unique identifier for the call record.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      `filtered_out` when the call is stopped during ingest, such as for a
      short call.
    </ResponseField>

    <ResponseField name="queued" type="boolean" required>
      `false` when the call was stored but not queued for worker processing.
    </ResponseField>

    ```json theme={null}
    {
      "callId": "uuid",
      "status": "filtered_out",
      "queued": false
    }
    ```
  </Tab>

  <Tab title="Duplicate (200)">
    <ResponseField name="callId" type="string" required>
      Existing call identifier.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      Current status of the existing call.
    </ResponseField>

    <ResponseField name="duplicate" type="boolean" required>
      Returned when `externalMeetingId` matches an existing call.
    </ResponseField>

    ```json theme={null}
    {
      "callId": "uuid",
      "status": "queued",
      "duplicate": true
    }
    ```

    <Note>
      In the duplicate case, `status` is the existing call's current status.
    </Note>
  </Tab>
</Tabs>

## Remote Media URL Rules

* `mediaUrl` must be an absolute `http(s)` URL.
* In production, `mediaUrl` must use `https`.
* The URL must resolve to a public internet address.
* Redirects are allowed, but only up to the configured limit.
* Maximum media size is 500 MB.
* Unsupported media types return `415 Unsupported Media Type`.

## Errors

| Status | Description                                                                                                                                                                                                                          |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 400    | Missing or invalid fields such as `title`, `repEmail`, `callDate`, `callDuration`, `forceImport`, `source`, malformed `mediaUrl`, malformed multipart `attendees`, more than 10 attendees, or sending `file` and `mediaUrl` together |
| 401    | Missing or invalid authentication                                                                                                                                                                                                    |
| 413    | Uploaded or remote media exceeds the 500 MB limit                                                                                                                                                                                    |
| 415    | Unsupported media type                                                                                                                                                                                                               |
| 422    | `mediaUrl` could not be fetched or failed remote URL safety checks                                                                                                                                                                   |
| 500    | Failed to store media or queue the call                                                                                                                                                                                              |
