OpenText Vendor Invoice Management Connector Guide

The OpenText VIM connector lets Tealfabric workflows create, update, and retrieve invoice and workflow entities in OpenText Vendor Invoice Management. It is commonly used for AP intake automation, approval-state synchronization, and invoice exception handling in SAP-oriented finance environments.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/o/opentext-vim
Version (published date)2026-05-08
Tagsconnectors, reference, opentext-vim
Connector IDopentext-vim-1.0.0

OpenText VIM connector flow showing authenticated invoice creation, approval workflow retrieval, and workflow-driven AP automation.

Configuration and authentication

Configure the connector with your OpenText VIM base URL and API user credentials so workflow requests can authenticate consistently. Use a dedicated service account with least-privilege access to invoice and workflow entities.

Required values are base_url, username, and password. You can optionally set timeout_seconds for longer-running invoice processing calls. After setup, run test before enabling scheduled production automations.

Requests are routed to {base_url}/api/{endpoint} with HTTP Basic authentication.

Create or update invoices with send

Use send for write operations such as creating invoices or updating workflow state. send requires endpoint (path after /api/) and defaults to HTTP POST when method is omitted.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function createInvoice(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "send",
      endpoint: "invoices",
      method: "POST",
      data: {
        invoiceNumber: "INV-2026-0091",
        vendorId: "VEND-8402",
        invoiceDate: "2026-05-08",
        dueDate: "2026-06-07",
        amount: 1845.2,
        currency: "USD",
        status: "PendingApproval"
      }
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  return response.json();
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "send",
    "endpoint": "invoices",
    "method": "POST",
    "data": {
      "invoiceNumber": "INV-2026-0091",
      "vendorId": "VEND-8402",
      "invoiceDate": "2026-05-08",
      "dueDate": "2026-06-07",
      "amount": 1845.2,
      "currency": "USD",
      "status": "PendingApproval"
    }
  }'
{
  "success": true,
  "data": {
    "message": "OpenText VIM operation completed successfully",
    "result": {
      "invoiceNumber": "INV-2026-0091",
      "status": "PendingApproval"
    }
  }
}

Retrieve invoices and workflows with receive

Use receive to fetch invoice and workflow data. receive requires endpoint and issues GET {base_url}/api/{endpoint}. Pass optional filters as a query object.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function listPendingInvoices(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "receive",
      endpoint: "invoices",
      query: {
        status: "PendingApproval",
        limit: "25",
        offset: "0"
      }
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  return response.json();
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "receive",
    "endpoint": "invoices",
    "query": {
      "status": "PendingApproval",
      "limit": "25",
      "offset": "0"
    }
  }'
{
  "success": true,
  "data": {
    "message": "OpenText VIM data retrieved successfully",
    "invoice_count": 1,
    "items": [
      {
        "invoiceNumber": "INV-2026-0091",
        "vendorId": "VEND-8402",
        "invoiceDate": "2026-05-08",
        "amount": 1845.2,
        "status": "PendingApproval"
      }
    ]
  }
}

Execute arbitrary API methods with execute

Use execute when you need an explicit HTTP method (default GET) and JSON body from body or data.

{
  "operation": "execute",
  "endpoint": "workflows/123/approve",
  "method": "POST",
  "body": {
    "comment": "Approved by automation"
  }
}

Test connection with test

test validates base_url, username, and password, then calls GET api/invoices.

{
  "success": true,
  "data": {
    "message": "OpenText VIM connection test successful",
    "details": {
      "base_url": "https://your-instance.opentext.com",
      "invoices_found": 12
    }
  }
}

Reliability guidance

Most production issues come from authentication failures, missing entity permissions, or malformed query parameters. Validate with test, verify API user access for invoice/workflow entities, and log rejected payloads for rapid troubleshooting.

For resilient AP automation, page large result sets, apply retry backoff for 429 responses, and keep workflow status transitions explicit in update calls. These practices improve reliability and auditability.

Additional resources