1# A. Create an ordinary post for review.
2curl --location 'https://api.nonli.com/v2.1/posts/bulk' \
3 --header 'Content-Type: application/json' \
4 --header 'Authorization: Bearer YOUR_API_TOKEN' \
5 --data '{
6 "post": [{
7 "brandId": 1,
8 "postType": "text",
9 "message": "Hello from the Nonli API",
10 "status": "review",
11 "socialAccount": {
12 "externalId": "SOCIAL_ACCOUNT_ACCOUNT_ID",
13 "type": "facebook"
14 }
15 }]
16 }'
17
18# B. Build a three-segment thread.
19# 1. Create the root with the shortlink mapping.
20curl --location 'https://api.nonli.com/v2.1/posts/bulk' \
21 --header 'Content-Type: application/json' \
22 --header 'Authorization: Bearer YOUR_API_TOKEN' \
23 --data '{
24 "post": [
25 {
26 "brandId": 1,
27 "postType": "text",
28 "message": "The opening segment",
29 "status": "review",
30 "shortlink": { "mappingId": "SHORTLINK_MAPPING_ID" },
31 "socialAccount": {
32 "externalId": "SOCIAL_ACCOUNT_ACCOUNT_ID",
33 "type": "threads"
34 },
35 "thread": { "activated": true }
36 }
37 ]
38 }'
39
40# Save the returned id as ROOT_POST_ID and its shortDomain/shortId values.
41# 2. Create the middle segment. The first child's parent is also the origin.
42curl --location 'https://api.nonli.com/v2.1/posts/bulk' \
43 --header 'Content-Type: application/json' \
44 --header 'Authorization: Bearer YOUR_API_TOKEN' \
45 --data '{
46 "post": [{
47 "brandId": 1,
48 "postType": "text",
49 "message": "The middle segment",
50 "status": "review",
51 "socialAccount": { "externalId": "SOCIAL_ACCOUNT_ACCOUNT_ID", "type": "threads" },
52 "thread": {
53 "activated": true,
54 "isChild": true,
55 "parent": "ROOT_POST_ID",
56 "origin": "ROOT_POST_ID"
57 }
58 }]
59 }'
60
61# Save the returned id as MIDDLE_POST_ID.
62# Verify that the root lists the first child before continuing.
63curl --location 'https://api.nonli.com/v2.1/posts?filters=id:ROOT_POST_ID&fields=id,thread' \
64 --header 'Authorization: Bearer YOUR_API_TOKEN'
65
66# 3. Create the final segment without the URL. Its parent is the middle segment.
67curl --location 'https://api.nonli.com/v2.1/posts/bulk' \
68 --header 'Content-Type: application/json' \
69 --header 'Authorization: Bearer YOUR_API_TOKEN' \
70 --data '{
71 "post": [{
72 "brandId": 1,
73 "postType": "text",
74 "message": "Read the complete story:",
75 "status": "review",
76 "socialAccount": { "externalId": "SOCIAL_ACCOUNT_ACCOUNT_ID", "type": "threads" },
77 "thread": {
78 "activated": true,
79 "isChild": true,
80 "parent": "MIDDLE_POST_ID",
81 "origin": "ROOT_POST_ID"
82 }
83 }]
84 }'
85
86# Save the returned id as FINAL_POST_ID and verify the complete child order.
87curl --location 'https://api.nonli.com/v2.1/posts?filters=id:ROOT_POST_ID&fields=id,thread' \
88 --header 'Authorization: Bearer YOUR_API_TOKEN'
89
90# Then add the resolved root URL to the final segment.
91curl --request PUT --location 'https://api.nonli.com/v2.1/posts/bulk' \
92 --header 'Content-Type: application/json' \
93 --header 'Authorization: Bearer YOUR_API_TOKEN' \
94 --data '{
95 "post": [{
96 "id": "FINAL_POST_ID",
97 "message": "Read the complete story: https://ROOT_SHORT_DOMAIN/ROOT_SHORT_ID"
98 }]
99 }'
100
101# 4. Read back the root and final segment. Verify the ordered root thread.children
102# list and the final resolved URL before publication. This GET returns the usual
103# paginated { "total": ..., "rows": [...] } search response.
104curl --location 'https://api.nonli.com/v2.1/posts?filtersOr=id:ROOT_POST_ID,FINAL_POST_ID&fields=id,author,userId,status,postType,message,shortDomain,shortId,thread' \
105 --header 'Authorization: Bearer YOUR_API_TOKEN'
6.Social accounts
10 endepunkterRead connected social accounts and quota data required before creating or scheduling posts.
/social-accountsKrever Bearer-token6.1.Search social accounts
Return social accounts available to the authenticated company and user.
Spørreparametere
sizeint100pageint0sortstringfiltersstringfiltersOrstringexcludesstringfieldsstringembedstringFelter i svaret
totalintrowsSocialAccount[]idintaccountIdstringnamestringtypestringbrandIdintstatusstringEksempel
/social-accounts/:socialAccountIdKrever Bearer-token6.2.Get a social account
Return one connected social account with publishing metadata.
Spørreparametere
fieldsstringFelter i svaret
idintaccountIdstringnamestringtypestringbrandIdintEksempel
/social-accounts/publishing-quotaKrever Bearer-token6.3.Get publishing quota
Return publishing quota information for selected social accounts before scheduling posts.
Spørreparametere
socialAccountsstringFelter i svaret
totalintrowsobject[]externalIdstringtypestringquotaint|nullEksempel
/social-accounts/youtube/playlistsKrever Bearer-token6.4.Get YouTube playlists
Return the playlists of connected YouTube social accounts, to choose the `youtube.playlistIds` of a YouTube post. Playlist items (videos) are not returned.
playlistsarray and anerrormessage, and the other accounts are still returned.privacyStatus. They are cached for one hour per account. The cache is cleared after a create, update, or delete through this API; a change made in YouTube Studio appears after the cache expires or withforce=true. A playlist created moments ago can be missing from the list until YouTube exposes it: read the list again withforce=true.Spørreparametere
socialAccounts*stringforceboolfalseFelter i svaret
YouTubeAccountPlaylists[]YouTubeAccountPlaylists[]socialAccountIdintplaylistsobject[]idstringtitlestringdescriptionstringthumbnailUrlstringitemCountintprivacyStatusstringerrorstringEksempel
Eksempel på svar
/social-accounts/youtube/playlistsKrever Bearer-token6.5.Create a YouTube playlist
Create a playlist on the channel of a connected YouTube social account. The API answers 201 Created with the new playlist. The API-token role must be allowed to manage social accounts. An unknown socialAccountId, or one that is not a YouTube account, returns 404 Not Found.
itemCountand the playlist items endpoint returns an empty page.Parametere i forespørselens innhold
socialAccountId*inttitle*stringdescriptionstringprivacyStatusstringprivateFelter i svaret
idstringtitlestringdescriptionstringthumbnailUrlstringitemCountintprivacyStatusstringEksempel
Eksempel på svar
/social-accounts/youtube/playlists/:playlistIdKrever Bearer-token6.6.Update a YouTube playlist
Change the title, description, or visibility of a playlist of a connected YouTube social account. Fields left out keep their current value. The API answers with the updated playlist.
itemCountand the playlist items endpoint returns an empty page.Parametere i forespørselens innhold
socialAccountId*inttitlestringdescriptionstringprivacyStatusstringFelter i svaret
idstringtitlestringdescriptionstringthumbnailUrlstringitemCountint|nullprivacyStatusstringEksempel
/social-accounts/youtube/playlists/:playlistIdKrever Bearer-token6.7.Delete a YouTube playlist
Delete a playlist of a connected YouTube social account. The videos themselves are not deleted. The API answers 204 No Content.
itemCountand the playlist items endpoint returns an empty page.Spørreparametere
socialAccountId*intEksempel
/social-accounts/youtube/playlists/:playlistId/itemsKrever Bearer-token6.8.List the videos of a YouTube playlist
Return one page of the videos of a YouTube playlist, in playlist order. The result is read from YouTube on each call and is not cached.
pageToken: send thenextPageTokenof the previous response until it is null. An unknown or inaccessible playlist returns 404 Not Found; a playlist created through this API moments ago returns an empty page instead.Spørreparametere
socialAccountId*intsizeint50pageTokenstringFelter i svaret
itemsobject[]idstringvideoIdstringpositioninttitlestringaddedAtdatevideoPublishedAtdateprivacyStatusstringnextPageTokenstring|nullEksempel
Eksempel på svar
/social-accounts/youtube/playlists/:playlistId/items/:itemIdKrever Bearer-token6.9.Move a video in a YouTube playlist
Move a video to another position of a YouTube playlist. The API answers with the moved item and its new position.
Parametere i forespørselens innhold
socialAccountId*intposition*intFelter i svaret
idstringvideoIdstringpositioninttitlestringaddedAtdatevideoPublishedAtdateprivacyStatusstringEksempel
/social-accounts/pinterest/boardsKrever Bearer-token6.10.Get Pinterest boards
Return the boards of connected Pinterest social accounts, to choose the `pinterest.boardId` of a Pinterest post.
boardsarray is empty.force=trueto read them from Pinterest again.Spørreparametere
socialAccounts*stringforceboolfalseFelter i svaret
PinterestAccountBoards[]PinterestAccountBoards[]socialAccountIdintboardsobject[]Eksempel