Update account profiles
Change an existing account’s username, display name, bio, and picture through the API or CLI.
Let customers edit their username, display name, bio and profile picture from your own dashboard. Submit the edits together, save the request ID, and show the outcome when HumanPost approves the work.
Before you start#
Keep the API key on your server. It needs accounts:read and accounts:write for the customer's company. Choose an active or warming TikTok or Instagram account from GET /v2/accounts.
Submit and track with the API#
Check eligibility
Check the remaining allowance, cooldowns for the fields you want to change, and any active request.
curl 'https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts/ACCOUNT_ID/profile-changes' \ -H "Authorization: Bearer $HUMANPOST_API_KEY"Submit the edits together
Send only changed fields. Save the returned requestId and show the request as pending in your dashboard.
curl -X POST 'https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts/ACCOUNT_ID/profile-changes' \ -H "Authorization: Bearer $HUMANPOST_API_KEY" \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: profile-october-1' \ -d '{"displayName":"Build Mode","bio":"Tools for growing teams"}'Poll for the outcome
Replace REQUEST_ID with the saved ID. Keep polling until completed, partially_completed, blocked or failed; queued is not success.
curl 'https://us-central1-clickbaitcarousel.cloudfunctions.net/publishingApi/v2/accounts/ACCOUNT_ID/profile-changes/REQUEST_ID' \ -H "Authorization: Bearer $HUMANPOST_API_KEY"
Example accepted response · HTTP 202
{
"requestId": "profile_123",
"accountId": "ACCOUNT_ID",
"status": "queued",
"fields": [
"displayName",
"bio"
],
"completedFields": [],
"blockedFields": [],
"message": null,
"createdAt": "2026-10-09T12:00:00.000Z",
"updatedAt": "2026-10-09T12:00:00.000Z",
"completedAt": null,
"allowance": {
"limit": 2,
"windowDays": 30,
"used": 0,
"remaining": 2,
"nextEligibleAt": null
},
"idempotentReplay": false
}Acceptance means the request is queued. An operator makes the changes natively, then HumanPost reviews the result. Dispatch waits for the assigned worker’s 8am–8pm local shift. Outside those hours, edits stay queued; paused or unassigned workers can delay them further.
Retry the same body and Idempotency-Key after a network interruption. A replay returns HTTP 200 and the original request, including after completion. A new edit needs a new key.
Add a profile picture#
First upload an image (requires posts:write). Create the upload, PUT the image bytes to its temporary URL, then complete it. You can also import a public HTTPS image. Wait for status: ready and use its uploadId as profilePictureUploadId.
The CLI handles the local upload steps for you:
humanpost uploads local ./avatar.png --jsonUse the validated upload ID, rather than the picture URL or temporary PUT URL. Keep that same ID when retrying a profile request.
Use the CLI#
Install and configure the CLI, then save this as profile.json. Replace UPLOAD_ID with a ready image upload ID, or omit it to keep the picture. Omit any other unchanged fields.
{
"username": "buildmode_team",
"displayName": "Build Mode",
"bio": "Tools for growing teams",
"profilePictureUploadId": "UPLOAD_ID"
}humanpost accounts profile-allowance ACCOUNT_ID --json
humanpost accounts update-profile ACCOUNT_ID --file profile.json --idempotency-key profile-october-1 --json
humanpost accounts profile-request ACCOUNT_ID REQUEST_ID --json
humanpost accounts profile-request ACCOUNT_ID REQUEST_ID --wait --wait-timeout 300 --json--wait polls until a terminal outcome. A timeout or Ctrl-C leaves the server request running. Resume with profile-request. Partial, blocked and failed results exit with code 1 and include the outcome under error.profile with --json.
Fields and results#
username- 1–30 letters, numbers, periods or underscores. No trailing period. A leading @ is removed; letters become lowercase. Availability is decided by the platform.
displayName- Nonempty; up to 30 characters for TikTok or 50 for Instagram.
bio- Up to 80 characters for TikTok or 150 for Instagram. Send an empty string to clear it.
profilePictureUploadId- A ready, company-owned image upload. Use JPG, PNG or WebP; up to 10 MB, one valid image, at most 40 megapixels. Profile photos have a stricter limit than post images. Convert other formats to JPG.
Text is trimmed. Unknown fields, wrong types and no-op requests are rejected. Omitted fields stay unchanged; null is rejected.
creating- Worker tasks are being created. If dispatch failed, retry the original body and key.
queued- Accepted and waiting for a worker. This is not confirmation that the platform has changed.
in_progress- A worker is assigned or editing the profile.
pending_approval- Worker proof is waiting for HumanPost review.
completed- Every requested field was approved. One allowance request is consumed.
partially_completed- Some fields were approved. Inspect completedFields, blockedFields and message; submit only unfinished edits with a new key when eligible.
blocked / failed- No fields were approved. Inspect message for a platform restriction or failure. Retry as a new request when eligible.
Use completedFields, blockedFields and message to explain the result in your dashboard. Stored profile values update through worker approval. After partial completion, refresh the stored profile and submit only the unfinished edits with a new key.
Costs and frequency limits#
HumanPost · 2 completed requests / rolling 30 days
HumanPost includes 2 fully completed profile-update requests per account in a rolling 30-day window. Multiple fields submitted together count as one request.
Only one request may be active on an account. Failed, blocked, and partially completed requests do not consume the allowance. Successfully changed fields in a partial request may still have platform cooldowns.
Included profile updates do not consume post credits, Comment credits, or Amplify credits. There is no automatic overage purchase; contact support@humanpost.co for urgent changes after using the allowance. API calls and image uploads still have the usual daily API limits.
TikTok · username 30 days · display name 7 days
TikTok allows username changes once every 30 days and display name (nickname) changes once every 7 days. Changing a username changes the profile URL; released usernames may be unavailable temporarily. Verified accounts may require TikTok support and a new verification application.
Instagram · HumanPost safeguard
Display name- HumanPost: two recorded edits per rolling 14 days
Username, bio & picture- No fixed cooldown verified; platform restrictions still apply
HumanPost applies a display-name safeguard for standard Instagram accounts: two recorded successful edits per rolling 14 days. The second edit is allowed; a third request waits until the older recorded edit leaves HumanPost's window. Name edits in partially completed requests also count. This is a HumanPost eligibility rule, not a guaranteed Instagram reset time.
The public Meta Help article checked does not confirm a numeric name-edit limit for standard accounts or whether Instagram uses a rolling or fixed reset. A third-party screenshot reports two edits within 14 days; its authenticity and account subscription status were not independently verified. No fixed standard-account username, bio or picture cooldown was verified, so no numeric field guard is applied to them. Platform restrictions and edits outside HumanPost may be unknown. Subscription-only rules are not applied here.
Check allowance.remaining and allowance.nextEligibleAt, plus fieldNextEligibleAt for each field you plan to change. An active request must finish first. Cooldown estimates reflect recorded HumanPost changes; the platform has the final decision.
TikTok sources checked October 9, 2026. Instagram sources checked October 11, 2026. The public profile Help page covers editing and username review. The numeric name rule is reported in a third-party screenshot that was not independently authenticated; the public Help article does not confirm it or its reset semantics. HumanPost uses a rolling window for its own safeguard. Subscription rules are separate.
- TikTok username rules
- TikTok nickname rules
- TikTok verification
- Instagram profile editing
- Reported Instagram name-edit guidance (unverified user screenshot)
- Meta Verified subscription rules (not applied to standard accounts)
Recover from errors#
Show the error message and hint to the customer. Eligibility errors include error.context with allowance, active request and cooldown estimates; retryAt identifies HumanPost’s next request time, rather than guaranteeing a platform reset. Include error.requestId when contacting support.
400 invalid_argument / invalid_request- Correct the fields or change at least one value. Omitted fields are preserved; null and unknown fields are rejected.
400 idempotency_key_required- Send Idempotency-Key. Retry the same body with the same key; choose a new key for a new request.
403 insufficient_scope- Use accounts:write to submit, accounts:read to inspect. Image uploads also require posts:write.
404 account_not_found / profile_request_not_found- Use an account and request belonging to the API key's company.
409 request_in_progress / legacy_request_pending- Wait for the active request to finish; a legacy request awaiting review may need HumanPost support.
409 platform_cooldown- Use error.context.retryAt and fieldNextEligibleAt for HumanPost request eligibility. Instagram name dates reflect the HumanPost safeguard and do not guarantee platform acceptance.
409 profile_image_not_ready- Complete a valid image upload first. Videos, unready uploads and arbitrary picture URLs are not accepted.
409 idempotency_conflict- Use the original payload and key to recover the original request. A changed payload requires a new key.
409 dispatch_failed- Retry the same body and key. The requestId in error.context is reserved; existing field tasks are reused.
429 allowance_exhausted- Show error.context.allowance and retryAt; wait for the rolling allowance reset or contact support for an urgent change.