Release notes — Everything new in the API as they happen.
The Wthaiq API evolves continuously without disrupting your integration, and the version is pinned with a dated header Wthaiq-Version: 2026-07-01: changes non-breaking — such as a new endpoint, an optional field or an event type — ship continuously on your same version, while changes that are breaking come in a new dated version that does not apply to you until you choose to upgrade to it yourself. This page documents every change with its date and its tag.
Wthaiq-Version: 2026-07-01
Tag guide
Every change in the log is tagged with its color and its type, so you can read its impact on your integration at a glance.
Versions Newest first.
The timeline starts with the public launch of API v1 on 4 October 2026, followed by its updates with their exact dates and tags.
- AddingError messages are in English with the request header
Accept-Language: enor the parameter?lang=en; Arabic stays the default, and error codes do not change. - FixThe path
/en/api/v1/…now works exactly like/api/v1/…, and its error messages are in English. - Adding
upgrade_urlis now a field in the errors402 plan_requiredand402 plan_expired, andverify_urlis a field in the error403 kyb_required, andmax_signersis a field in the error400 too_many_signers. - Change
GET /v1/verifications/{reference}for an unknown reference returns a 404 error in the standard format with the codenot_found, instead of a body that looks like a success response. - Fix
GET /v1/webhook_endpointsnow returnsnext_cursorand acceptsstarting_after, so you can reach every endpoint page by page. - FixThe field
docsinGET /v1points to the documentation in the developer portal.
- AddingAfter identity verification, we match the name on the signer's document with the name sent in the request. When they differ, signing is held until you decide, and you receive the event
signer.identity_match_holdthensigner.identity_match_decidedafter the decision. - AddingA new endpoint for the decision:
POST /v1/signers/{id}/identity_matchwith the value approve or reject, plus an “Identity review” page in the developer console with a new “Identity reviewer” role. - AddingThe signer object carries
identity.name_matchwith the match state and both names, and from the same page you can choose “Record the difference only” instead of holding signing.
- ChangeThe developer console is now a separate product with its own developer account, created from its sign-up page and not linked to Wthaiq platform accounts in sign-in, data or balances.
- ChangeLive sending requires a paid yearly plan and a verified company; otherwise the API returns
402 plan_requiredor402 plan_expiredor403 kyb_required. Test keys remain free, within daily limits. - ChangeEvery signer on a live request counts as one send from your annual plan balance, with a maximum of five signers per request. Once it runs out, the overage is charged to the wallet at your plan's rate, and identity verification is always charged to the wallet. If the balance isn't enough, the error returned is
402 insufficient_balanceand the request is not created. - AddingThe API returns
403 plan_feature_unavailablewhen a request asks for a capability your plan does not include, with the fieldsfeatureandrequired_planandupgrade_url. - ChangeThe endpoints
GET /v1/usageandGET /v1/balancenow return amounts as objects in your wallet currency, together with the plan and its prices, and no longer return the keysamount_egpandmonth_spent_egpandsend_egp. The fieldcostin a session is now an object with the amount, currency and source. - DeprecationThe free live requests that were available before account verification have been removed; the field
trialremains on older requests only.
- AddingSignature requests on the path
POST /v1/signature_requestswith their full lifecycle, and the endpointssendandcancelandremindersanddownloadandcertificateandevidence. - AddingTemplates through
GET /v1/templatesand creating a signature request from a template by passing its field values, and public verification by reference throughGET /v1/verifications/{reference}. - AddingEmbedded signing inside your app through
POST /v1/signers/{id}/signing_sessionand/v1/sessions, and signer identity confirmation through a specialist provider with the fieldrequire_identityand the objectidentity_verification. - AddingSigned event notifications (Webhooks) with the header
Wthaiq-Signatureusing HMAC-SHA256, with retries at increasing intervals for up to 24 hours, including the identity review eventssigner.identity_in_reviewandsigner.identity_resubmission_requestedandsigner.identity_declined. - AddingLive keys with the prefixes
sk_andpk_, and test keys with the prefixessk_test_andpk_test_that charge nothing and send no message to anyone; the fieldlivemodeshows which of them created the object. - ChangeAll errors return in one structure, and
Idempotency-Keyon requestsPOSTrequests to make retries safe; the limit is 100 requests every 10 seconds, with the headersX-RateLimit-LimitandRetry-After, and every response carriesWthaiq-Request-Id. - AvailableOfficial SDKs:
wthaiq/wthaiq-php(PHP) ·wthaiq(Node.js) ·wthaiq(Python) — they pin the version header by default and follow SemVer. together with the two in-app signing libraries (iOS · Android); the install commands are on the official libraries page.
How we ship changes without breaking your integration.
We follow date-based versioning. The behavior of your pinned version never changes through a breaking change — you alone decide when to upgrade it.
Breaking changes
Require a new dated version
- Removing an endpoint, a field or a value
enum, or renaming it. - Changing the type of an existing field (for example from
stringtointeger). - Adding a new required parameter (
required) to an existing request. - Tightening validation rules so that requests previously accepted are now rejected.
- Changing the default semantics of a response, or the order of the items in a list.
Non-breaking changes
ship continuously on your same version
- Adding an entirely new endpoint.
- Adding a new field Optional into a response body.
- Adding a value
enumnew (handle unknown values gracefully). - Adding a new Webhook event type to the list.
- Adding a new optional parameter to an existing request.
Wthaiq-Deprecation on the responses concerned, and we keep the old behavior working for at least 6 months before removing it in a new dated version — leaving enough time to upgrade safely. Pin the version by sending the header Wthaiq-Version with every request. If you do not send it, the last dated version pinned to your account is used (or the latest default version). The behavior of your pinned version never changes through a breaking change. Example:
curl https://wthaiq.com/api/v1/signature_requests \
-H "Authorization: Bearer sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Wthaiq-Version: 2026-07-01"
# The response returns the version actually used in the header:
# Wthaiq-Version: 2026-07-01
# Wthaiq-Request-Id: req_9f2a1c
Wthaiq-Version in production. There is no need to upgrade all at once — each integration upgrades at its own pace. Ready to build your integration?
Start from the full API documentation, pin your dated version, and subscribe to receive every update as it ships.