Status Codes¶
Misfin status codes follow the Gemini status code scheme — a two-digit code where the first digit indicates the category.
Status Code Table¶
| Code | Name | Category | Meta Field Contains |
|---|---|---|---|
| 20 | SUCCESS | Success | Recipient certificate fingerprint |
| 30 | REDIRECT_TEMPORARY | Redirect | Temporary redirect address |
| 31 | REDIRECT_PERMANENT | Redirect | Permanent redirect address |
| 40 | TEMPORARY_FAILURE | Temporary Failure | Error description |
| 41 | SERVER_UNAVAILABLE | Temporary Failure | Error description |
| 42 | CGI_ERROR | Temporary Failure | Error description |
| 43 | PROXY_ERROR | Temporary Failure | Error description |
| 44 | SLOW_DOWN | Temporary Failure | Retry delay hint |
| 45 | MAILBOX_FULL | Temporary Failure | Error description |
| 50 | PERMANENT_FAILURE | Permanent Failure | Error description |
| 51 | MAILBOX_NOT_FOUND | Permanent Failure | Error description |
| 52 | MAILBOX_GONE | Permanent Failure | Error description |
| 53 | DOMAIN_NOT_SERVICED | Permanent Failure | Error description |
| 59 | BAD_REQUEST | Permanent Failure | Error description |
| 60 | CERTIFICATE_REQUIRED | Auth Failure | Error description |
| 61 | UNAUTHORIZED_SENDER | Auth Failure | Error description |
| 62 | CERTIFICATE_INVALID | Auth Failure | Error description |
| 63 | CERTIFICATE_CHANGED | Auth Failure | Error description |
| 64 | PROVE_IT | Auth Failure | Challenge description |
Categories¶
| Range | Category | Description |
|---|---|---|
| 20-29 | Success | Message was delivered |
| 30-39 | Redirect | Send to a different address |
| 40-49 | Temporary Failure | Try again later |
| 50-59 | Permanent Failure | Do not retry |
| 60-69 | Auth Failure | Certificate/authentication issue |
Utility Functions¶
from titlani.protocol.status import (
StatusCode,
interpret_status,
is_success,
is_redirect,
is_error,
is_auth_failure,
)
interpret_status(status: int) -> str¶
Returns a human-readable description:
interpret_status(20) # "Message delivered"
interpret_status(51) # "Mailbox not found"
interpret_status(99) # "Unknown status"
is_success(status: int) -> bool¶
is_redirect(status: int) -> bool¶
is_error(status: int) -> bool¶
Returns True for both temporary (40-49) and permanent (50-59) failures:
is_auth_failure(status: int) -> bool¶
Using StatusCode Enum¶
from titlani import StatusCode, MisfinResponse
response = MisfinResponse(status=StatusCode.SUCCESS, meta="fingerprint_here")
response = MisfinResponse(status=StatusCode.MAILBOX_NOT_FOUND, meta="No such mailbox")
The StatusCode enum is an IntEnum, so it can be used anywhere an integer status code is expected.