Some updates to Threads Ads may not be available to all users yet.
To run ads on Threads, you need a Threads account ID. You have two options for obtaining one:
Make sure your Instagram account has the proper setup for Instagram ads.
To make API calls with an Instagram-associated Threads account you need a user access token with the following permissions:
instagram_basicthreads_business_basicpages_read_engagementIf the app user was granted a role via the Business Manager on the Page connected to your app user's Instagram professional account, your app will also need one of:
ads_managementads_readNote: Anyone with access to create Instagram ads from the Instagram account can create Threads ads from the Instagram-associated Threads account.
You need the following:
Once you connect an Threads account to a valid Instagram account, you can call the /<IG_USER_ID>/connected_threads_user endpoint to get the Threads account ID.
curl -G \
-d "access_token=<ACCESS_TOKEN>"\
-d "fields=threads_user_id" \
"https://graph.facebook.com/v24.0/<IG_USER_ID>/connected_threads_user"
The result should be a Threads account object containing only the threads_user_id. Save this threads_user_id to use in your ads.
If you don't have a Threads profile, you can still create and deliver ads in Threads using an Instagram-backed Threads account.
These accounts are created with the API and function as if you are running ads for a Threads account, however a mock Threads account is created specifically to run those ads.
You cannot log into Threads accounts created this way to manage posts.
You can create an Instagram-backed Threads account by sending a POST request to the /<IG_USER_ID>/instagram_backed_threads_user endpoint.
curl \
-F "access_token=<ACCESS_TOKEN>"\
"https://graph.facebook.com/v24.0/<IG_USER_ID>/instagram_backed_threads_user"
This returns a Threads account ID on success. If an Instagram account already has a Instagram-backed Threads account, the call returns the existing Instagram-backed Threads account ID. Save the returned ID to run your ads.
To see if an Instagram account has an Instagram-backed Threads account, send a GET request to the /<IG_USER_ID>/instagram_backed_threads_user endpoint.
curl -G \
-d "access_token=<ACCESS_TOKEN>"\
-d "fields=threads_user_id" \
"https://graph.facebook.com/v24.0/<IG_USER_ID>/instagram_backed_threads_user"
This returns a Threads account object, if there is one. The object includes a threads_user_id that can be used to run Threads ads. If there is no Instagram-backed Threads account already set up, the API returns an empty response.
You can use any ad account, either owned by an individual or by a business, as long as you have access, to create ads for Instagram-associated Threads accounts.
When creating an ad creative, you should provide the threads_user_id and the instagram_user_id . The instagram_user_id of your ad creative must be for the Instagram account associated with this Threads account and with the matching username in your Business Portfolio. Businesses with an Instagram-associated Threads account created before January 29, 2026, will have their Threads account automatically added to their Business Portfolio with the same user access and permissions managed from the Instagram account. Developers can continue to use the same Instagram-associated Threads account IDs as they were using prior to January 29, 2026. New Threads accounts created after January 29, 2026, will need to be manually added to the Business Portfolio and managed like other account types.
You do not need to assign ad accounts to the Instagram-backed Threads account. When you provide an ad creative using a Instagram-backed Threads account, you can use any ad accounts that you have access to.
Once an Instagram-backed Threads account is created, you can use its ID as the threads_user_id in your ad creative, as you do with other types of Instagram accounts. The instagram_user_id of your ad creative must be for the Instagram account associated with this Instagram-backed Threads account.
While the instagram_user_id must be included in the object_story_spec field, the threads_user_id can be included either in the object_story_spec field or on a higher level of the API call.
object_story_spec field
curl -X POST \
-F {
"name": "test",
"object_story_spec": {
"link_data": {
"link": "<LINK_URL>",
"call_to_action": {
"type": "WATCH_MORE",
"value": {}
},
"message": "<MESSAGE_TEXT>",
"image_hash": "<IMAGE_HASH>"
},
"instagram_user_id": "<IG_USER_ID>",
"threads_user_id": "<THREADS_USER_ID>",
"page_id": "<PAGE_ID>"
}
} \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adcreatives
curl -X POST \
- F {
"name": "test",
"object_story_spec": {
"link_data": {
"link": "<LINK_URL>",
"call_to_action": {
"type": "WATCH_MORE",
"value": {}
},
"message": "<MESSAGE_TEXT>",
"image_hash": "<IMAGE_HASH>"
},
"instagram_user_id": "<IG_USER_ID>",
"page_id": "<PAGE_ID>"
},
"threads_user_id": "<THREADS_USER_ID>"
} \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adcreatives