Okodi SocialOKODI SOCIAL

Guide

How Okodi Social works

This portal is built for agencies and in-house teams to generate and publish social posts for one or many businesses. Below is everything you need to know to get set up.

Overview

Okodi Social is a multi-tenant content studio. Your team (a Clerk Organization) can create a Business record for every company you serve — your own brand, or each of your agency clients. Each Business has its own brand sheet, its own generated posts, and its own social account connections. Data is scoped to your Organization; other orgs can never see it.

Adding a business

From the dashboard, click Add business. Fill in the brand sheet: the audience, voice, tone, dos and don'ts, hashtags, and platform list. This sheet is what the writer and editor agents use to keep posts on-brand. You can revisit it any time from the business overview page.

Generating posts

Open a business and click Create content →. Paste a source (an article, product blurb, a rough idea), and the pipeline runs a writer agent followed by an editor agent. Each platform variant is generated separately so hashtags and tone match. Approved posts move onto the Kanban board and Calendar.

You can also enable weekly auto-generation from the business overview — the cron will produce a fresh batch of posts each week and email you approval links.

Connecting social accounts

Publishing requires connecting the client's social accounts. There are two paths, and both are supported:

  • Agency-connects:the client adds someone from your team as an admin on their Facebook Business Manager or LinkedIn Company Page. Your teammate then opens the client's business in Okodi, clicks Connect, and picks the client's Page from the list. This is how Buffer, Later, and Hootsuite work.
  • Client self-connects: send the client the connect link from their business page. They click it, log in with their own account, and grant access. They never see the rest of the portal.

LinkedIn setup

LinkedIn supports posting to a personal profile or to a Company Pagethe user administers. To offer Company Page posting, your LinkedIn app needs Marketing Developer Platform (MDP) approval — apply from the LinkedIn developer dashboard. Without MDP the connection still works, but the "post as" picker will only offer the personal profile.

  • Scopes requested: openid, profile, email, w_member_social, r_organization_admin, w_organization_social.
  • Tokens are refreshed automatically when they get within 60 seconds of expiring.
  • You can change the target (personal ↔ Company Page) from the Publish page.

Meta App Review URLs (paste these into the Meta dashboard)

  • Privacy Policy URL: https://social.okodi.ai/legal/privacy
  • Terms of Service URL: https://social.okodi.ai/legal/terms
  • Data Deletion Instructions URL: https://social.okodi.ai/legal/data-deletion
  • Data Deletion Request Callback URL: https://social.okodi.ai/api/webhooks/meta/deletion
  • Deauthorize Callback URL: https://social.okodi.ai/api/webhooks/meta/deauthorize
  • OAuth Redirect URI: https://social.okodi.ai/api/auth/meta/callback

Both webhooks verify the signed_request POST body against META_APP_SECRET before doing anything, and delete every Facebook and Instagram connection tied to the calling Meta user id. Requests without a valid signature receive a 400 with no side effects.

Facebook + Instagram setup

One Meta connection covers both Facebook Page posting and Instagram Business posting. Requirements:

  • The Facebook Page must be one you administer (or your client granted your account access via Meta Business Manager).
  • The Instagram account must be a Business or Creator account, linked to the Facebook Page.
  • For posting to non-admin Pages in production, submit the Meta app for App Review with pages_manage_posts and instagram_content_publish. Dev-mode only works for app admins and testers.
  • Instagram requires an image — text-only IG posts are blocked in the Publish queue.

After connecting, Okodi auto-selects the first Page you administer. To pick a different Page, click Reconnect on the Publish page and choose a different one during the Meta OAuth flow.

Client self-connect

On the Publish page for a business, use the Copy client connect link button to get a shareable URL. Send it to your client. When they open it, they see only your logo, the business name, and two Connect buttons — LinkedIn and Meta. Once they authorise, the tokens are stored under that business and you can start publishing. Rotate the link if you want to invalidate a previously shared one.

Publishing

Posts can be published two ways:

  • Manual: approved posts show up in per-platform queues on the Publish page — click Publish to send immediately.
  • Scheduled: set a scheduled date on any approved post. The hourly cron pushes it when the time arrives, refreshing tokens as needed.

You can also export every post as CSV for tools like Buffer, Later, or Hootsuite — handy if a client uses their own scheduler.

Troubleshooting

  • "LinkedIn token expired. Reconnect." — the refresh token also expired (LinkedIn refresh tokens last ~365 days). Just click Connect again on the Publish page.
  • "Facebook Page not selected." — the connected user admins zero Pages, or the Page was removed. Reconnect and pick a different account.
  • "Instagram requires an image." — generate an image on the Kanban board for the post before publishing.
  • No Company Pages found in the LinkedIn picker. — your LinkedIn app needs Marketing Developer Platform approval to enumerate admin orgs.