Add or update a Muse account
October 12, 2026
Table of contents
Add a Muse account with its email and password. The account must have email + password sign-in: if it signs in only with an emailed code, create a password in Meta Accounts Center first. See Setup Muse for what the account needs and what to expect.
Once added, the account is managed by the API: it signs in once, keeps the account signed in, and renews the 30-day Muse session itself, a day before it expires or whenever Muse stops accepting it, using the stored password. You never re-add the account for that. Each sign-in makes Muse email the account a login code, which needs no action.
After the sign-in the API reads the account’s Muse plan and weekly usage (quota). If Meta asks for a security check on the account, the account is saved but paused, and the answer is 596: sign in once at muse.ai in a browser, complete the check, then post the same email and password again.
Posting an account that is already added re-adds it. With the same password and a session Muse still accepts, the API keeps that session and signs in nothing new. added, maxJobs and the session are kept unless you send a new maxJobs or a new password.
This endpoint does two things. To add or re-add an account, post email and password. To change only maxJobs on an account that is already added, post email and maxJobs without password: nothing is sent to Muse then.
Each useapi.net subscription lets you add 3 Muse accounts.
https://api.useapi.net/v1/muse/accounts
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
Add or re-add an account:
{
"email": "[email protected]",
"password": "your Muse password",
"maxJobs": 2
}
emailis required, the email of the Muse account.passwordis required to add or re-add an account, the account’s Muse password.
Maximum length:256characters. A wrong password returns400. So does an account without a password (one that signs in only with an emailed code): create a password in Meta Accounts Center first.maxJobsis optional, the number of jobs this account may run at the same time.
Range:1to5. Default:2for a new account, the current value on a re-add.
Update an added account:
{
"email": "[email protected]",
"maxJobs": 3
}
emailis required, the email of an added account.maxJobsis required in this mode, the new limit. Range:1to5.
Responses
-
200 OK — the account was already added and has been re-added or updated.
{ "email": "[email protected]", "maxJobs": 3, "added": "2026-10-12T00:34:19.139Z", "updated": "2026-10-12T01:13:03.745Z", "sessionExpiresAt": "2026-11-11T00:34:18.820Z", "quota": { "tier": "HATCH_FREE", "percentUsed": 0, "resetsAt": "2026-10-19T01:13:03.000Z", "quotaStatus": "SUFFICIENT", "topupBalance": 0, "readAt": "2026-10-12T01:13:03.745Z" }, "health": "OK" }sessionExpiresAtis when the current Muse session ends. The API renews it before then.quotais the account’s Muse plan and weekly usage, as read now. It is left out when Muse did not answer the read. GET /accounts/emailreads it live at any time.- An update (
email+maxJobs) returns the same record withquotaas last read.
-
201 Created — a new account was added. Same body as
200, withoutupdated.{ "email": "[email protected]", "maxJobs": 2, "added": "2026-10-12T00:34:19.139Z", "sessionExpiresAt": "2026-11-11T00:34:18.820Z", "health": "OK" } -
400 Bad Request — Muse refused the sign-in (a wrong email or password, or an account without a password),
passwordandmaxJobsare both missing, or a parameter is invalid.{ "error": "Meta account [email protected] has no password: it signs in with an emailed code only. Create a password in Meta Accounts Center (https://accountscenter.meta.com/password_and_security/), then add the account again", "code": 400 }{ "error": "Parameter maxJobs (99) is more than 5", "code": 400 } -
Invalid API token.
{ "error": "useapi.net ⁝ Unauthorized", "code": 401 } -
402 Payment Required — the subscription has expired, or a new account needs another subscription.
{ "error": "useapi.net ⁝ You have 1 subscription, you need 1 additional subscription (2 total) to support 4 accounts for the muse API. Upgrade at https://useapi.net/docs/subscription", "code": 402 } -
404 Not Found — update mode: no account is added for this
email.{ "error": "Account [email protected] not found. Add it with email and password", "code": 404 } -
503 Service Unavailable — Muse could not be reached or the sign-in could not finish right now. Nothing was saved. Retry shortly.
{ "error": "Could not reach Muse (gateway: /api/session returned no vm_id), please retry shortly", "code": 503 } -
596 Account Error
Meta asks for a security check on the account. The account is saved with its session but paused. Sign in once at muse.ai in a browser, complete the check, then post the same email and password again: the API then uses the session it already has.
{ "error": "Account [email protected]: Meta asks for a security check on account [email protected] (\"This account must complete a security checkpoint on the web\"). Sign in once at https://muse.ai in a browser, complete the check, then add the account again with POST /accounts", "code": 596 }
Model
200 and 201 return the same account record. The password and the session are never returned.
{ // TypeScript, all fields are optional
email: string
maxJobs: number // jobs this account may run at the same time
added: string // ISO 8601, when the account was first added
updated?: string // ISO 8601, the last re-add or maxJobs change
sessionExpiresAt: string // ISO 8601, when the Muse session expires (30 days, renewed by the API)
quota?: { // the account's Muse plan and weekly usage, as last read
tier: string | null // Muse plan, e.g. HATCH_FREE
percentUsed: number | null // share of the weekly allowance used, in whole percent
resetsAt: string | null // ISO 8601, when the weekly allowance resets
quotaStatus: string | null // SUFFICIENT while jobs may run
topupBalance: number | null
readAt: string // ISO 8601, when this was read from Muse
}
health: string // 'OK', or why the account needs attention (596)
error?: string // errors only
code?: number // errors only
}
Examples
-
curl -X POST "https://api.useapi.net/v1/muse/accounts" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -d '{ "email": "[email protected]", "password": "…", "maxJobs": 2 }' -
const token = "API token"; const apiUrl = "https://api.useapi.net/v1/muse/accounts"; const response = await fetch(apiUrl, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${token}`, }, body: JSON.stringify({ email: "Muse account email", password: "Muse account password", maxJobs: 2 }) }); const result = await response.json(); console.log("response", {response, result}); -
import requests token = "API token" apiUrl = "https://api.useapi.net/v1/muse/accounts" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } data = { "email": "Muse account email", "password": "Muse account password", "maxJobs": 2 } response = requests.post(apiUrl, headers=headers, json=data) print(response, response.json())