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 three 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/v25.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/v25.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/v25.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.
If you don't have a Threads profile or an Instagram account, you can still create and deliver ads in Threads using a Page-backed Threads account, similar to Page-backed Instagram accounts for Instagram.
Note: You should only use a Page-backed Threads account when you are using a Page-backed Instagram account for Instagram ads.
You can create these accounts with the API and use them to create ads on Threads. These Threads accounts have the same name and profile picture as the related Page. If someone changes the Page name or profile picture, the Threads account is automatically updated.
This approach functions as if you are running ads for a Facebook Page, however a mock Threads account is created specifically to run those ads.
You cannot log into Threads accounts created this way to manage posts.
To create a Page-backed Threads account, you need to have at least an ADVERTISER role on the Page; the MANAGER or CONTENT_CREATOR roles also work.
Additionally, your Page should not have a previously created Page-backed Threads account, as each Page can only have one Page-backed Threads account. If you already have a Page-backed Threads account, use the existing one. Check whether a specific Page has a Page-backed Threads account before you create a new one.
You can create a Page-backed Threads account by sending a POST request to the /<PAGE_ID>/page_backed_threads_accounts endpoint.
curl -X POST \
-F "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/v25.0/<PAGE_ID>/page_backed_threads_accounts"
This returns a Threads account ID on success. If a Page already has a Page-backed Threads account, the call returns the existing Page-backed Threads account ID. Save the returned ID to run your ads.
To see if a Facebook Page has a Page-backed Threads account, send a GET request to the /<PAGE_ID>?fields=page_backed_threads_account_id endpoint.
curl -G \
-d "access_token=<ACCESS_TOKEN>"\
-d "fields=page_backed_threads_account_id" \
"https://graph.facebook.com/v25.0/<PAGE_ID>"
This returns a Threads account ID, if there is one. If there is no Page-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.
You do not need to assign ad accounts to the Page-backed Threads account. When you provide an ad creative using a Page-backed Threads account, you can use any ad accounts that you have access to.
You need to have at least the ADVERTISER role on the Page backing this Page-backed Threads account. Similar to a Page-backed Instagram Account, the pages_read_engagement permission is also required to be granted to the app.
Once a Page-backed Threads account is created, you can use its ID as the threads_user_id in your ad creative. The page_id of your ad creative must be for the Page associated with this Page-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/v25.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/v25.0/act_<AD_ACCOUNT_ID>/adcreatives