curl --request POST \
--url https://api.fanvue.com/v1/agencies/posts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"posts": [
{
"creatorUserUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"text": "<string>",
"mediaUuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"mediaPreviewUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 301,
"publishAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"collectionUuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
]
}
'import requests
url = "https://api.fanvue.com/v1/agencies/posts"
payload = { "posts": [
{
"creatorUserUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"text": "<string>",
"mediaUuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"mediaPreviewUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 301,
"publishAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"collectionUuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
] }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
posts: [
{
creatorUserUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
text: '<string>',
mediaUuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
mediaPreviewUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
price: 301,
publishAt: '2023-11-07T05:31:56Z',
expiresAt: '2023-11-07T05:31:56Z',
collectionUuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
}
]
})
};
fetch('https://api.fanvue.com/v1/agencies/posts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"results": [
{
"index": 0,
"creatorUserUuid": "123e4567-e89b-12d3-a456-426614174000",
"status": "success",
"data": {
"uuid": "a1b2c3d4-e5f6-4789-8123-456789abcdef",
"createdAt": "2025-01-01T12:00:00.000Z",
"text": "Scheduled drop for tomorrow!",
"price": null,
"mediaPreviewUuid": null,
"audience": "subscribers",
"publishAt": "2025-01-02T09:00:00.000Z",
"publishedAt": null,
"expiresAt": null
}
},
{
"index": 1,
"creatorUserUuid": "223e4567-e89b-12d3-a456-426614174001",
"status": "error",
"code": 404,
"message": "Creator not found or not assigned to team member"
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Bulk-create posts across creators
Create (and optionally schedule) multiple posts across one or more creators in a single request.
Each item reuses the same validation, scheduling (publishAt/expiresAt) and creation path as the single-creator createCreatorPost endpoint, and access is enforced per creatorUserUuid exactly as that endpoint does.
The request returns HTTP 200 whenever the envelope is valid. Each item is reported independently in results (index-aligned with the request posts array) as either a success or an error, so one creator’s failure never sinks the whole batch.
write:post and write:creator scopes, plus access to each creator (agency assignment/admin, or self).curl --request POST \
--url https://api.fanvue.com/v1/agencies/posts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"posts": [
{
"creatorUserUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"text": "<string>",
"mediaUuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"mediaPreviewUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 301,
"publishAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"collectionUuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
]
}
'import requests
url = "https://api.fanvue.com/v1/agencies/posts"
payload = { "posts": [
{
"creatorUserUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"text": "<string>",
"mediaUuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"mediaPreviewUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 301,
"publishAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"collectionUuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
] }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
posts: [
{
creatorUserUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
text: '<string>',
mediaUuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
mediaPreviewUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
price: 301,
publishAt: '2023-11-07T05:31:56Z',
expiresAt: '2023-11-07T05:31:56Z',
collectionUuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
}
]
})
};
fetch('https://api.fanvue.com/v1/agencies/posts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"results": [
{
"index": 0,
"creatorUserUuid": "123e4567-e89b-12d3-a456-426614174000",
"status": "success",
"data": {
"uuid": "a1b2c3d4-e5f6-4789-8123-456789abcdef",
"createdAt": "2025-01-01T12:00:00.000Z",
"text": "Scheduled drop for tomorrow!",
"price": null,
"mediaPreviewUuid": null,
"audience": "subscribers",
"publishAt": "2025-01-02T09:00:00.000Z",
"publishedAt": null,
"expiresAt": null
}
},
{
"index": 1,
"creatorUserUuid": "223e4567-e89b-12d3-a456-426614174001",
"status": "error",
"code": 404,
"message": "Creator not found or not assigned to team member"
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}write:post— Create, edit, and manage posts and content on behalf of users.write:creator— Modify creator profiles, settings, and creator-specific data.
Authorizations
OAuth 2.0 access token, presented as a JWT bearer token in the Authorization header. Obtain a token via the authorization-code flow; the scopes granted to the token determine which operations it may call.
Headers
API version to use for the request
"2025-06-26"
Body
Array of posts to create across creators (1–100)
1 - 100 elementsShow child attributes
Show child attributes
Response
Batch processed. Per-item success/failure is reported in results; a 200 does not imply every item succeeded.
Per-item results, index-aligned with the request posts array
- Option 1
- Option 2
Show child attributes
Show child attributes
Was this page helpful?