Errors

One shape, every time. Real HTTP status codes, and never a 200 containing an error.

{
  "error": {
    "type": "invalid_request",
    "code": "media_too_large",
    "message": "Document is 118.4 MB. The limit is 100 MB.",
    "param": "document",
    "docs": "https://docs.njiwa.upeo.ai/errors/media_too_large"
  }
}

type is one of invalid_request, authentication_error, permission_error, not_found, rate_limit, instance_error, api_error.

Branch on code, not on the message. Messages are written for humans and we improve them; codes are the contract.

Every response carries an X-Request-Id. Quote it when you contact us and we can find the exact request.

All 288 codes

a_read_is_already_running account_locked_previously account_not_confirmed account_suspended already_a_member already_retried already_sent amount_below_provider_minimum amount_too_large amount_too_small api_key_in_query_string api_key_not_found backwards_period bad_broadcast bad_date bad_link bad_offer ban_risk before_not_a_timestamp calendar_disconnected calendar_not_chosen calendar_not_configured campaign_already_completed campaign_not_running cannot_delete_theirs cannot_hide_own cannot_invite_an_owner cannot_refund_no_longer_available channels_not_available cloud_credentials_refused cloud_error cloud_not_configured cloud_number_unreadable cloud_rate_limited cloud_token_invalid cloud_unreachable comment_deleted confirm_link_invalid content_not_stored cross_origin_session_write delivery_rejected description_too_long discovery_expired disposable_email email_already_registered email_domain_unreachable email_too_long empty_edit empty_file empty_message empty_number_access envelope_lost example_phone_number group_is_announce_only http_error idempotency_key_in_progress idempotency_key_reused instance_gone instance_not_attached instance_not_connected instance_not_found instance_required internal_error invalid_amount invalid_api_key invalid_attendee invalid_attendee_list invalid_base64 invalid_before invalid_contact invalid_contact_ids invalid_credentials invalid_data_uri invalid_duration invalid_email invalid_extension invalid_json invalid_key_prefix invalid_location invalid_match_type invalid_media_id invalid_media_path invalid_media_signature invalid_numbers invalid_phone_number invalid_reaction invalid_regex invalid_request_body invalid_retention invalid_scope invalid_scopes invalid_sender_email invalid_setting invalid_shortcut invalid_signature invalid_start invalid_status invalid_term invalid_until invalid_webhook_url invalid_whatsapp_number invitation_invalid key_locked_to_instance key_not_revealable label_too_long last_owner likes_not_supported list_name_taken list_too_large malformed_api_key media_fetch_failed media_gone media_not_found media_quota_exceeded media_too_large media_url_required meeting_in_the_past member_not_active member_removed membership_not_active mention_all_needs_a_group message_allowance_exhausted message_deleted message_not_found meta_error meta_not_connected meta_permission_missing meta_rate_limited meta_recipient_unavailable meta_token_invalid meta_token_missing meta_unreachable meta_verification_required method_not_allowed missing_amount missing_api_key missing_assertion missing_cloud_credentials missing_contacts missing_content missing_file missing_label missing_msisdn missing_name missing_pattern missing_reference missing_reply missing_scope missing_shortcut missing_summary missing_text missing_to missing_until msisdn_required_for_pairing_code multiple_content_keys name_too_long never_linked never_reached_whatsapp no_calendar_connected no_conversation no_files_named no_number_to_send_from no_numbers no_offer no_recipient no_recipients no_settings no_such_calendar no_such_chat no_worker_available nobody_to_send_to not_a_cloud_number not_a_group not_a_number not_a_plan_payment not_an_operator not_banned not_failed not_found not_in_that_group not_invited not_linking not_ours_to_edit not_ours_to_send not_ours_to_withdraw not_signed_in not_this_key not_to_yourself not_while_viewing not_your_account not_your_note nothing_chosen nothing_to_cancel numbers_required only_text_can_be_edited outside_service_window owner_not_yours_to_change password_already_set password_incorrect password_required password_too_short payment_not_found payment_provider_error payment_provider_unreachable payments_not_configured plan_excludes_campaigns plan_is_quoted plan_number_limit rail_not_available rate_limited recipient_not_on_whatsapp reference_required reply_target_not_found reset_link_invalid revoked_api_key role_not_permitted scopes_required seat_limit send_failed sender_ambiguous sender_name_required sender_name_too_long sender_not_found session_expired session_invalid session_required shortcut_taken signals_balance_too_low signals_credit_not_returned signals_needs_a_person signals_needs_message_storage signals_not_configured signals_not_enabled signals_read_in_progress signals_read_too_soon signals_refused signals_unreachable signature_greets_the_sender signature_name_too_long signature_needs_name signature_too_long storage_still_on summary_too_long template_param_mismatch text_too_long token_required too_many_attendees too_many_contacts too_many_exclusions too_many_files too_many_link_previews too_many_messages too_many_numbers too_many_recipients too_many_saved_replies too_old_to_edit too_old_to_withdraw topup_not_recorded trial_expired unknown_channel unknown_currency unknown_endpoint unknown_kind unknown_letter unknown_link_strategy unknown_number unknown_period unknown_plan unknown_role unknown_scope unknown_setting unknown_time_zone unrecognised_media_reference unsafe_webhook_url unsupported_content_type unsupported_on_this_channel until_in_the_past use_transfer_ownership webhook_url_empty webhook_url_required whatsapp_already_confirmed whatsapp_required worker_error worker_unauthorised worker_unavailable worker_unreachable wrong_channel wrong_password