Errors

Every error code, what it means, and whether to retry, fix something, or fetch a person.

Failures use standard HTTP status codes and carry a stable code. A status of 400 or above is a failed step — that is how automation platforms treat it.

error
{
  "error": {
    "code": "agent_offline",
    "message": "The connector isn't running on OFFICE-PC. Open it, wait for \"Connected\", then re-run this step.",
    "type": "unavailable",
    "retryable": true
  },
  "meta": { "request_id": "req_c19e…" }
}
FieldMeans
codeStable. Branch a workflow on this.
messageWritten for the person reading it, naming the next step.
typeThe category, which follows the status: invalid_request, authentication, plan_limit, permission, not_found, conflict, validation, rate_limit, unavailable, outcome_unknown, internal.
retryableWhether the same request can succeed later with nothing changed. On a 429 or 503, wait Retry-After seconds first.
fieldThe input the error is about, when one is known.
detailsExtra facts for some codes — for example the godowns to choose from.
Retrythe same request lands on the same record
Fix, then retrythe same request fails the same way until something changes
Needs a personsomebody has to attend to that computer

Something is wrong with TallyPrime

These are the ones your users will actually see. Every message names the next action, so showing it unchanged is almost always the right thing to do.

CodeStatusMeansThen
agent_offline503The connector is not running on that computer.Needs a person
tally_not_open503TallyPrime is not open on that computer.Needs a person
tally_starting503TallyPrime is still opening. Re-running the step shortly succeeds.Retry
tally_unreachable503TallyPrime is not answering. Its connectivity setting is probably off.Needs a person
company_not_loaded503No company is open in TallyPrime.Needs a person
company_mismatch409A different company is open than this connection is bound to.Needs a person
tally_busy_dialog503TallyPrime is waiting on a message box that someone must close.Needs a person
tally_not_responding503TallyPrime has stopped responding and may need restarting.Needs a person
agent_busy503Too many steps are queued for that computer at once. Nothing was sent.Retry
tally_timeout504No answer in time. Re-running the step updates the same record.Retry
not_verified502Tally reported success but the record could not be read back.Retry

Something is wrong with the data

CodeStatusMeansThen
ledger_not_found422A ledger named in the request does not exist.Fix, then retry
item_not_found422A stock item named in the request does not exist.Fix, then retry
godown_required422The company uses several godowns and the line did not say which. The message lists them.Fix, then retry
unbalanced_entry422The totals do not add up. Nothing was written.Fix, then retry
bill_wise_off422Bills were listed to settle but that party has no bill-by-bill tracking. Nothing was written.Fix, then retry
ledger_exists409ledgers.create found a ledger with that name. Use ledgers.find_or_create or ledgers.create_or_update if that is expected.Fix, then retry
item_exists409stock_items.create found a stock item with that name.Fix, then retry
ledger_group_mismatch409A ledger with that name already exists under a different group. Nothing was changed.Fix, then retry
ledger_gstin_mismatch409A ledger with that name already exists with another party's GSTIN. Nothing was changed.Fix, then retry
duplicate_invoice409That invoice or bill number is already recorded for that party. Nothing was added.Fix, then retry
group_not_found422The group named for the ledger does not exist in the company.Fix, then retry
duplicate_number422The number sent is already on another entry of the same type, and TallyPrime is set to prevent duplicates. The message names that entry.Fix, then retry
voucher_type_unavailable422The voucher type does not exist in the company, or is switched off.Fix, then retry
tally_rejected422TallyPrime refused the entry. The message quotes its reason where it gave one, and names the cause where a read can find it.Fix, then retry
bad_request400A required field is missing or a value is malformed. field names it.Fix, then retry
validation_failed422Several fields need fixing. details names each one.Fix, then retry
not_found404No operation, list or record by that name — for example ledgers.get on a name TallyPrime does not have.Fix, then retry
method_not_allowed405A write was sent as GET. Send it as POST with a JSON body.Fix, then retry

Access and limits

CodeStatusMeansThen
unauthenticated401No token, or it is not recognised.Fix, then retry
access_revoked401The authorization was revoked. Reconnect the application.Needs a person
token_expired401The access token has expired. Refresh it with the refresh token and send the request again.Retry
invalid_grant400The code or refresh token is expired, used or does not match.Fix, then retry
forbidden403The token does not carry the permission this operation needs.Fix, then retry
connection_revoked409The TallyPrime connection was disconnected in the dashboard.Needs a person
connection_unauthorized409The TallyPrime connection is no longer authorized. Reconnect it from the dashboard.Needs a person
connection_not_ready409Pairing was never finished for that connection.Needs a person
plan_limit_reached402The monthly operation allowance is used up.Needs a person
too_many_requests429Rate limited. Retry-After says how long to wait.Retry

Retrying safely

  • Retry means exactly that: re-running a write with the same body lands on the same record rather than creating a second one, so a retry loop is safe.

  • Fix, then retry means the same request will fail the same way. Change the data — or create the missing ledger — first.

  • Needs a person means the computer running TallyPrime wants attention. Retrying may work once someone has been to it.

Something missing on this page? Tell us and we will fix it.