Skip to content

Process a logging payload synchronously

POST /plugin/sync

Reference path for manifest endpointUrl when isAsync is false or omitted. App Connect invokes installed synchronous plugins sequentially before the connector creates or updates the CRM activity. The request envelope contains data, optional config, and, for call flows, hashedExtensionId. The response must be the bare logging payload, not the request envelope; it becomes input to the next plugin and then the connector. Preserve every downstream-required field. A network error, non-2xx response, or unusable response fails primary logging. App Connect persists X-Refreshed-JWT-Token from a successful synchronous response.

Operation ID: invokeSynchronousPlugin
Authorization: BEARER

Request body

Synchronous invocation envelope. data is the current connector logging payload, config is the user's saved plugin configuration or null, and call flows can include hashedExtensionId. The response is data itself, not this envelope.

Required: Yes

Content type: application/json

Schema: PluginInvocationRequest

{
  "data": {
    "logInfo": {
      "sessionId": "session-123",
      "direction": "Outbound",
      "startTime": "2026-07-14T09:30:00.000Z",
      "duration": 120,
      "result": "Completed",
      "from": {
        "phoneNumber": "+14155550100"
      },
      "to": {
        "phoneNumber": "+14155550101"
      }
    },
    "contactId": "contact-123",
    "contactType": "Contact",
    "contactName": "Ada Lovelace",
    "note": "Follow up tomorrow.",
    "additionalSubmission": {}
  },
  "config": {
    "ignoreLetters": {
      "value": "ac"
    }
  },
  "hashedExtensionId": "6b5d3fcae1f7"
}

Responses

Status Description Body
200 The transformed logging payload itself. App Connect passes it to the next synchronous plugin or connector; do not wrap it in a data envelope. LoggingPayload
401 The plugin bearer credential is missing or invalid. TextError
403 The credential is valid but is not authorized for the requested account or plugin. The template's plugin-id comparison works only after the route or trusted configuration supplies a plugin identifier; its documented paths do not contain :pluginId. TextError
500 The plugin failed to process the logging payload. TextError