J&J Technology PartnersCustomer sign-in

Connect your own agent

Your company manages its workspace, LinkedIn authorization, and agent credentials. Your agent calls this hosted service from its own machine.

Availability: general customer production access is awaiting approval. J&J may enable a specific enrolled workspace for integration testing. Your portal displays whether your workspace can connect; an installation does not bypass permissions.

Start in your agent chat

Give your agent this guide and ask it to connect to J&J for your company. J&J must have enrolled your owner email first. The agent needs shell access and Node.js 24 or later; this uses the hosted API and does not require an MCP server.

Verify the client download

SHA-256 for the current official client: 5d45d0dbf2c7a9f9f6aa117c4e0ca6e0f937fb41ab20cdb718d35eb9bd7302d1. Download the checksum. Compare before running the client and stop if the values do not match.

For the downloaded file, Linux:

sha256sum openclaw-client.mjs

macOS:

shasum -a 256 openclaw-client.mjs

Windows PowerShell:

Get-FileHash -Algorithm SHA256 openclaw-client.mjs

Compare the displayed hash with the value above; letter case does not matter. If you saved the file as agent.mjs, use that filename instead. This verifies equality to the release published through J&J's official HTTPS service, not a separately signed release. Obtain both client and checksum from the same official service.

Agent setup instructions

  1. Download and inspect the client, then save it as agent.mjs in your integration folder.
  2. Create a new private configuration directory. On Linux use mode 0700; on Windows use a directory private to the agent account. Set JJ_LINKEDIN_AGENT_CONFIG to the absolute path of the future config.json inside it. Do not reuse a directory with existing credentials.
  3. Run node agent.mjs connect-start OWNER_EMAIL AGENT_NAME, quoting names as needed. Share only the returned authorization URL and pairing code with the owner. The key and polling secret stay in protected local files. Never ask the owner to paste passwords, email codes or API keys into chat.
  4. The owner opens the authorization URL, signs in with their enrolled email and activates the company if needed. They use Connect LinkedIn, authorize their account, then return automatically to the portal. They choose exactly one company Page and confirm Use this Page. Other discovered Pages are not connected for the agent. Under Connect your agent, they review the matching code, choose the intended Page and explicitly grant drafting or drafting and publishing. Only approve a request initiated in your own agent chat.
  5. After the owner authorizes, run node agent.mjs connect-finish. A pending response means authorization is not complete; check again no faster than every five seconds. The client verifies the approved identity and saves its configuration automatically. No key download or manual transfer is needed.
  6. Run node agent.mjs status and node agent.mjs pages; verify the expected company and Page and operator: false. Save these instructions and the configuration path in the agent's own tool documentation for future chat turns. Never save credential contents there.

Connection requests expire after 30 minutes. If a request expires or initiation fails, start again using a new private directory; do not overwrite a working installation. The owner can always return through the permanent portal address and enter the pairing code manually.

Draft and publish through your agent

Create a JSON file with the fields below, using a unique request key for each new draft:

{"text":"Your proposed company Page post.","requestKey":"first-draft-001"}

Run node agent.mjs draft draft.json. Review and publication instructions happen in your conversation with your agent. The connector enforces the Page permissions you granted; it does not require portal approval for individual posts.

If the agent has publishing permission and the service is enabled, run node agent.mjs publish POST_ID once. Use node agent.mjs get POST_ID to check status. Do not automatically retry or create a replacement for a checking, publishing, or uncertain result; contact support to reconcile it.

Edit a draft or published post

Existing installations should download the latest client and replace only agent.mjs, keeping their protected key and configuration. Do not run pairing again just to update the client.

Run node agent.mjs get POST_ID and review currentText with the owner. Save the agreed revision to a JSON file, copying the returned currentHash as expectedHash:

{"text":"Revised company Page post.","expectedHash":"CURRENT_HASH_FROM_GET","requestKey":"edit-001"}

Run node agent.mjs edit POST_ID edit.json. A draft revision returns revision_post, the new draft ID to review and publish; the previous draft is retired and its approval cleared. A published revision updates text on the same LinkedIn post and requires publishing permission. Posts must have been created through this connector.

If the edit outcome is uncertain, do not retry or create a replacement post. Run node agent.mjs get POST_ID to find pendingEdit.id, then node agent.mjs reconcile-edit POST_ID EDIT_ID. Reconciliation checks live content without sending another edit. If it cannot confirm the revision, contact J&J. After reconnecting LinkedIn, the owner must grant the agent access to the current connection for the same Page.

Add images

Use JPEG or PNG files, up to 10 MiB each and 20 images per post. Run node agent.mjs upload-image photo.png photo-upload-001. Uploading does not publish anything. If the returned state is processing, run node agent.mjs image-status IMAGE_ID later and wait for ready. Do not retry uncertain uploads; check status or contact support.

Add each returned image ID to your draft JSON, uploading additional files with unique keys. The images array determines order; optional alt text describes each image:

{"text":"Your company Page caption.","requestKey":"image-post-001","images":[{"id":"IMAGE_ID","altText":"Description of the photo."}]}

Review the caption and images before publishing. To change a draft's images, include the new images array in the edit JSON; omit it to preserve attachments or use an empty array to remove them. LinkedIn does not support adding or replacing images after publication. Published text edits preserve existing images. Replace only the client script in existing installations, keeping the key and configuration.

For direct API integrations, use the public OpenAPI 3.1 contract. It describes only implemented V2 routes, authentication, exact write inputs and response schemas.

Keep a stable post reference

Run node agent.mjs draft-v2 draft.json with an optional clientReference, such as campaign-october-2026. Use 1–80 letters, digits, underscores or hyphens. The reference is unique for your agent and stays reserved after retirement. It follows draft revisions without changing their content hashes. For example, search with {"clientReference":"campaign-october-2026","revisions":"active"} to find the latest revision. Each result identifies its root, previous and next revision. The default revisions filter includes retired originals. The reference filter still matches an individual creation requestKey. Repeating a creation request returns the original record; search explicitly for the latest revision before editing or scheduling. Existing drafts cannot be assigned a new independent reference.

Find and review stored posts

Run node agent.mjs search query.json with optional q, state, from, to, reference, clientReference, revisions, receipt, limit and cursor filters. Omit the JSON file for a fresh default search. Results are confined to your own posts on the configured Page. Run node agent.mjs review POST_ID for the exact current caption, images, hash and any active schedule. node agent.mjs readiness reports current permissions, connection expiry and whether hosted dispatch is enabled.

Schedule and cancel

The owner must explicitly grant both publication and scheduling in the portal. Hosted scheduled dispatch is initially available only to the Rift test workspace. Existing publication permission does not include scheduling. Write a schedule JSON file with requestKey, expectedHash, publishAt with an explicit offset, and an IANA timezone:

{"requestKey":"tuesday-update","expectedHash":"HASH_FROM_REVIEW","publishAt":"2026-10-06T09:00:00-05:00","timezone":"America/Chicago"}

Run node agent.mjs schedule POST_ID schedule.json. Times use minute precision, at least a minute ahead and at most 90 days ahead. Ambiguous daylight-saving times are rejected. expiresAt is optional; the default latest dispatch is 15 minutes after publishAt. Dispatch is best effort and requires valid credentials, current grants and usable media at that time. The agent machine can be offline.

Run node agent.mjs schedules or node agent.mjs schedule-status SCHEDULE_ID. To change time, use node agent.mjs reschedule SCHEDULE_ID change.json with requestKey, expectedVersion from the current job, expectedHash, publishAt and timezone. To stop a queued job, use node agent.mjs cancel-schedule SCHEDULE_ID cancel.json with requestKey and expectedVersion. Cancellation can win during checks, but cannot recall a dispatched request. Reusing an identical request key returns the original response; read current status after a retry.

Editing the draft cancels its old schedule. A new revision needs a new schedule. Saving grants, replacing the key or suspending service invalidates queued authority until explicitly rescheduled. After reconnecting LinkedIn, revise the draft under the fresh connection before scheduling it. While scheduled, immediate publication is blocked. To retire a draft itself, use node agent.mjs cancel-draft POST_ID cancel.json with requestKey and expectedHash. Published and uncertain posts cannot be cancelled this way. An uncertain publication requires receipt reconciliation; never send a replacement automatically.

node agent.mjs operation OPERATION_ID reads a local cancellation, schedule or direct publication/edit outcome. Direct post reads return publicationOperationId; published edits return operationId. These references can be inspected with read-only access. operations and events list cancellation/direct-content operations and local draft-cancellation events respectively; schedules lists jobs. Caption editing uses node agent.mjs edit-v2 POST_ID edit.json and requires the separate edit_published grant for published posts. Both edit commands require edit_published for granular grants. Only existing legacy grants retain V1 publication-based compatibility.

Read published Page history

The owner can explicitly enable read_page_posts on your current Page grant. It defaults off. Run node agent.mjs search-page query.json (or omit query.json) and node agent.mjs review-page POST_ID. Page reads show stored published connector receipts and retrieved or owner-imported Page history. Coverage is explicitly incomplete; an empty result does not mean the LinkedIn Page has no posts. Private drafts, references, lineage, uploads, errors, pending edits and schedules are withheld. They do not grant editing rights to another agent’s post and stored search does not fetch LinkedIn. Use node agent.mjs sync-page to retrieve one public Page-history page from LinkedIn, then search-page. Continue with a JSON file containing the returned nextCursor as cursor until no continuation remains. This requires read_page_posts plus provider organization-read access and consumes provider read budget. Permission failures explain the limitation and preserve stored history. Owner imports are available under Page post history in the portal. Retrieved/imported observations are read-only and expose no writable draft identity. Upgrade only the client script after verifying its published checksum; preserve existing configuration and credentials. Optional agent filters select the originating agent; private reference/revision filters are unavailable.

Resume stored event history

Run node agent.mjs event-feed to read your local cancellation, schedule, direct publication and published-edit transitions. Persist the returned checkpoint only after processing every returned item. Drain nextCursor with an unchanged limit; after the last page, poll with checkpoint in a query JSON file. Checkpoints renew for 30 days; page cursors expire after one hour. Restart and deduplicate event IDs after expiry or a changed credential, connection or Page. The feed is at least once and never instructs a public write. Direct publish/edit events are included; local draft revisions, uploads and provider observations remain outside the feed. Operations support action and state filters in a query JSON file. The source post/edit attempts remain authoritative; reading never retries or repairs a write. Historical operation backfills are labelled snapshots reconstructed from existing connector attempts; they do not import LinkedIn Page posts or invent dispatch times. New direct-content attempts have a 1,000-record per-agent ceiling; reads and reconciliation remain available. The existing events command retains local history behavior.

Choose read-only access

The owner can grant read-only access in the portal; new grants and pairing requests default to it. Your agent and user choose how to use the tool. Read-only access allows stored post reviews, image metadata, schedules, operations and events, with no content writes. Add read_page_posts explicitly for other agents’ published Page history. Turn off read-only and select each desired action: draft creation, draft editing, draft cancellation, upload, image refresh, schedule cancellation, reconciliation, publication, scheduling or published editing. No action is granted automatically. Published editing is separate from publication through both API versions. Scheduling also requires publication. Existing grants retain legacy bundles until an owner reviews and saves granular permissions. Run node agent.mjs image-read IMAGE_ID for stored image status without a provider refresh. Readiness reports readOnly, permissionModel, raw/effective capabilities and the legacyV1PublishedEdit compatibility flag; service publishing eligibility alone is not permission to publish.

Manage access

The owner can pause a Page grant, revoke an agent, replace its credential, or disconnect LinkedIn in the portal. Replacing a credential immediately invalidates the old one. J&J service eligibility and LinkedIn production approval are separate from these workspace permissions.