Skip to content
UGC API

Using UGC API from n8n and Make

You don't need to write code to post UGC through an API. n8n and Make both have HTTP request steps that can call UGC API directly. This guide sets up a sheet-to-post flow and a results webhook in each.

Updated

What you need

  • A UGC API key from the dashboard. It starts with ugc_live_.
  • Connected account IDs. Create connect links from the dashboard or with one HTTP call, then copy the acc_... IDs from GET /v1/accounts.
  • Media on public URLs, like a public storage bucket or the URLs returned by POST /v1/media.

The one request you need

Every flow below ends in this request. Method POST, URL https://ugcapi.dev/v1/posts, two headers, and a JSON body.

SettingValue
MethodPOST
URLhttps://ugcapi.dev/v1/posts
HeaderAuthorization: Bearer ugc_live_...
HeaderContent-Type: application/json
BodyJSON: accounts, format, media, caption, scheduled_at, options

n8n: Google Sheet to scheduled posts

  1. Make a sheet with columns: account_id, format, media_url, caption, scheduled_at, status.
  2. Add a Schedule Trigger to run every 15 minutes, or a Google Sheets Trigger on new rows.
  3. Add a Google Sheets node to read rows where status is empty.
  4. Add an HTTP Request node. Set method POST and the URL above. For auth, create a Header Auth credential with name Authorization and value Bearer ugc_live_..., so the key isn't stored in the workflow.
  5. Set body content type to JSON and map fields from the sheet row.
  6. Add a Google Sheets update node to write the returned post id into status.
json
{
  "accounts": ["{{ $json.account_id }}"],
  "format": "{{ $json.format }}",
  "media": ["{{ $json.media_url }}"],
  "caption": "{{ $json.caption }}",
  "scheduled_at": "{{ $json.scheduled_at }}"
}

For slideshows, put the image URLs in one cell separated by commas and use an expression to split them into the media array.

Make: the same flow

  1. Start with Google Sheets > Watch Rows.
  2. Add HTTP > Make a request.
  3. Set URL, method POST, and add the two headers. Keep the API key in a connection or a variable rather than typing it into every module.
  4. Set body type to Raw, content type JSON, and build the JSON with mapped values.
  5. Turn on Parse response so you can map id into a Google Sheets > Update a Row module.

Spreading a batch with campaigns

If you have 50 rows and 5 accounts, don't send 50 posts at fixed times. Collect the rows with an aggregator (n8n's Aggregate node, Make's Array aggregator) and send one POST /v1/campaigns with a per-account cadence. We assign and stagger them. See campaigns.

Getting results back

  1. In n8n, add a Webhook node and copy its production URL. In Make, add Webhooks > Custom webhook.
  2. Register it once with PUT /v1/webhook and body { "url": "..." }.
  3. Branch on the event type: post.published writes the URL to the sheet, post.failed writes the error message.

To verify signatures in n8n, use a Crypto node to compute the HMAC-SHA256 hex of the raw body with your secret and compare it with the X-UGCAPI-Signature header. Details are in webhooks.

Common mistakes

  • Sending media as a string instead of an array.
  • Dates without a timezone. Use ISO 8601 with Z, like 2026-11-01T17:00:00Z.
  • Private media links, like Google Drive share pages. Platforms need a direct file URL.
  • Missing Bearer before the key.

Error responses follow one JSON shape, listed in errors. Brands running this setup should also see ecommerce brands.

Keeping costs predictable

Automations can loop. Before you turn a flow on, run it on one row and check GET /v1/usage for credits left. Add a filter so rows with a post ID are never sent again. Each post to one account is one credit, and you start with 50 free, so a test run costs nothing. Credits never expire, so there's no pressure to use them up in a month.

FAQ

Is there an n8n or Make app for UGC API?

Not a dedicated one. The built-in HTTP request steps work with any REST API, including ours.

Can I use Google Drive links for media?

Not share-page links. Platforms need a direct, public file URL. Upload to POST /v1/media or use public storage.

Can Zapier do this too?

Yes, with its webhook action that sends a custom POST request with headers and a JSON body.

How do I post slideshows from a sheet?

Put image URLs in one cell, split them into an array with an expression, and set format to slideshow.

Related