GOSI data API: wages, certificates, SANED
GOSI is the official Android client of the General Organization for Social Insurance, the Saudi agency that runs contributory insurance for private-sector workers, employers and beneficiaries. After a Nafath number-confirm (or a saved biometric unlock) contributors pull wage and contribution certificates, estimate a pension, file SANED unemployment insurance, update a benefit IBAN and keep digital certificates available offline; employers switch into the same client for dashboards, contributor search, wage updates, certificate issuance and a compliance indicator. Optional Taqdeer offers, step challenges and a Health Score sit beside the insurance ledger. The listing is 1 million-plus downloads, rated 4.7 from about 100,600 reviews; the developer block is General organization for social insurance - GOSI at Riyadh 12315, Saudi Arabia, support [email protected]. It is a national social-insurance wallet rather than a commercial bank app, sitting next to Nafath as the identity rail and Absher as the OTP channel.
Contributory wage rows pin contributoryWage against monthlyContributoryWage and employerContributionAmount. Certificate cards keep certificateNumber with certificateType. Benefit rows carry estimatedPension and kSanedBenefit; the signed-in card is nationalIdentificationNumber plus contributorId and ibanAccountNo.
Payroll desks recon the same contributoryWage the Riyadh tenant already shows; certificate counters issue the same certificateNumber the share sheet already lists; SANED kiosks read kSanedBenefit next to estimatedPension — openData Studio turns that insurance ledger into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Start Nafath login
POST
/v1/gosi/nafathosintStarts a Nafath login for nationalIdentificationNumber and waits for the in-app number confirm.
Auth: Unauthenticated. Body is nationalIdentificationNumber. The user confirms a number in the Nafath app.
- nationalIdentificationNumber
- nafathCheck
- status
POST /v1/gosi/nafath HTTP/1.1 Content-Type: application/json X-AppVersion: 3.2.41 { "nationalIdentificationNumber": "1098765432" }{ "nafathCheck": true, "status": "PENDING" }Exchange Nafath session
POST
/v1/gosi/sessionosintExchanges a confirmed Nafath login for accessToken plus the contributorName card.
Auth: Unauthenticated after the Nafath confirm. Response accessToken is sent as Authorization Bearer on later calls.
- accessToken
- nationalIdentificationNumber
- contributorName
POST /v1/gosi/session HTTP/1.1 Content-Type: application/json X-AppVersion: 3.2.41 { "nationalIdentificationNumber": "1098765432" }{ "accessToken": "eyJhbGciOiJIUzI1NiJ9...", "nationalIdentificationNumber": "1098765432", "contributorName": "AHMED ALI" }Biometric unlock
POST
/v1/gosi/biometricsosintUnlocks a registered biometric login and returns accessToken.
Auth: Device biometric assertion after a prior register. Returns accessToken.
- nationalIdentificationNumber
- accessToken
- status
POST /v1/gosi/biometrics HTTP/1.1 Content-Type: application/json X-AppVersion: 3.2.41 { "nationalIdentificationNumber": "1098765432" }{ "accessToken": "eyJhbGciOiJIUzI1NiJ9...", "status": "OK" }Signed-in contributor profile
GET
/v1/gosi/meosintReturns the signed-in contributor card: names, contributorId and ibanAccountNo.
Auth: Bearer accessToken from POST /v1/gosi/session.
- nationalIdentificationNumber
- contributorName
- contributorNameArabic
- contributorId
- ibanAccountNo
GET /v1/gosi/me HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Accept: application/json{ "nationalIdentificationNumber": "1098765432", "contributorName": "AHMED ALI", "contributorNameArabic": "أحمد علي", "contributorId": 44102, "ibanAccountNo": "SA0380000000608010167519" }Active contributors
GET
/v1/gosi/contributorsopendataPages ACTIVE contributors with occupationName and contributoryWage.
Auth: Bearer accessToken. Employer sessions page ACTIVE rows.
- contributorId
- contributorName
- nationalIdentificationNumber
- occupationName
- contributoryWage
GET /v1/gosi/contributors?status=ACTIVE&pageNo=1 HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Accept: application/json{ "contributors": [{ "contributorId": 44102, "contributorName": "AHMED ALI", "nationalIdentificationNumber": "1098765432", "occupationName": "Software Engineer", "contributoryWage": "12000.00" }] }Wage summary
GET
/v1/gosi/wagesopenfinanceReturns contributoryWage, monthlyContributoryWage and employerContributionAmount.
Auth: Bearer accessToken.
- contributoryWage
- monthlyContributoryWage
- averageMonthlyContributoryWageCalculation
- employerContributionAmount
- wpsWage
GET /v1/gosi/wages HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Accept: application/json{ "contributoryWage": "12000.00", "monthlyContributoryWage": "12000.00", "averageMonthlyContributoryWageCalculation": "11850.00", "employerContributionAmount": "1080.00", "wpsWage": "12000.00" }Certificate catalog
GET
/v1/gosi/certificatesopendataLists issueable certificates with certificateNumber and certificateType.
Auth: Bearer accessToken. Guest pre-login verify uses certificateNumber plus national ID without a session.
- certificateNumber
- certificateType
- certificateWccId
- status
GET /v1/gosi/certificates HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Accept: application/json{ "certificates": [{ "certificateNumber": "WCC-88421", "certificateType": "WAGE", "certificateWccId": "wcc-88421", "status": "READY" }] }Issue a certificate
POST
/v1/gosi/certificates/issueopendataIssues a wage, contribution or benefit certificate and returns certificateNumber.
Auth: Bearer accessToken.
- certificateType
- language
- certificateNumber
- status
POST /v1/gosi/certificates/issue HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Content-Type: application/json { "certificateType": "WAGE", "language": "en" }{ "certificateNumber": "WCC-88421", "certificateType": "WAGE", "status": "READY" }Existing benefits
GET
/v1/gosi/benefitsopenfinanceReturns estimatedPension, kTotalMonthlyBenefit and benefitHistory rows.
Auth: Bearer accessToken.
- estimatedPension
- kTotalMonthlyBenefit
- eligibleToGetBenefit
- kBenefitName
- kMonthlyBenefit
GET /v1/gosi/benefits HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Accept: application/json{ "estimatedPension": "4800.00", "kTotalMonthlyBenefit": "4800.00", "eligibleToGetBenefit": true, "benefitHistory": [{ "kBenefitName": "Retirement", "kMonthlyBenefit": "4800.00" }] }SANED history
GET
/v1/gosi/sanedopendataReturns SANED unemployment-insurance status and kSanedBenefit.
Auth: Bearer accessToken. Some SANED steps also send an Absher OTP as X-Otp.
- kSanedBenefit
- status
- eligibleToGetBenefit
GET /v1/gosi/saned HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Accept: application/json{ "kSanedBenefit": "2000.00", "status": "ELIGIBLE", "eligibleToGetBenefit": true }Update benefit IBAN
POST
/v1/gosi/ibanopenfinanceSubmits a new ibanAccountNo for pension or benefit payouts.
Auth: Bearer accessToken.
- ibanAccountNo
- status
POST /v1/gosi/iban HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Content-Type: application/json { "ibanAccountNo": "SA0380000000608010167519" }{ "ibanAccountNo": "SA0380000000608010167519", "status": "PENDING" }Establishment profile
GET
/v1/gosi/establishmentopendataReturns the employer establishmentRegistrationNo and unpaidEstablishmentList.
Auth: Bearer accessToken on an employer session.
- establishmentRegistrationNo
- establishmentRegistrationNumber
- totalNoOfEstablishments
- unpaidEstablishmentList
GET /v1/gosi/establishment HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... Accept: application/json{ "establishmentRegistrationNo": "7001234567", "establishmentRegistrationNumber": "7001234567", "totalNoOfEstablishments": 1, "unpaidEstablishmentList": [] }
Data categories
- identity
- contributors
- wages
- certificates
- benefits
- saned
- iban
- establishments
- auth-sessions
Where teams use this data
Payroll wage recon against the agency book
HR pulls GET /v1/gosi/wages (contributoryWage, monthlyContributoryWage, employerContributionAmount) next to GET /v1/gosi/contributors so declared wages match the GOSI ledger before WPS filing.
Certificate desk at HR intake
A staffing desk reads GET /v1/gosi/certificates then POST /v1/gosi/certificates/issue (certificateNumber, certificateType) so a wage or contribution certificate is on file without a branch visit.
SANED eligibility check
A benefits kiosk reads GET /v1/gosi/saned (kSanedBenefit, eligibleToGetBenefit) beside GET /v1/gosi/benefits (estimatedPension) so unemployment and pension chips sit on one card.
IBAN payout update
A pension-payment desk POSTs /v1/gosi/iban (ibanAccountNo) after GET /v1/gosi/me so a new Saudi IBAN is stored against the same contributorId.
Frequently asked questions
How does GOSI authenticate API calls?
POST /v1/gosi/nafath starts a Nafath confirm on nationalIdentificationNumber. POST /v1/gosi/session exchanges it for accessToken. POST /v1/gosi/biometrics unlocks a saved biometric. Later calls send Authorization Bearer accessToken.
Which endpoints expose wages and contributors?
GET /v1/gosi/wages returns contributoryWage, monthlyContributoryWage and employerContributionAmount. GET /v1/gosi/contributors pages ACTIVE rows with occupationName. GET /v1/gosi/me returns contributorId and ibanAccountNo.
What certificate and benefit fields are returned?
GET /v1/gosi/certificates lists certificateNumber and certificateType. POST /v1/gosi/certificates/issue issues one. GET /v1/gosi/benefits returns estimatedPension. GET /v1/gosi/saned returns kSanedBenefit.
Does the API cover IBAN updates and establishments?
Yes. POST /v1/gosi/iban submits ibanAccountNo. GET /v1/gosi/establishment returns establishmentRegistrationNo and unpaidEstablishmentList on an employer session.
Apps similar to GOSI
- VssID — VssID is Vietnam Social Security's citizen self-care client with an e-book and BHYT card; GOSI is the Saudi equivalent with wage certificates, SANED and a Nafath login.
- Pak Identity — Pak Identity is NADRA's CNIC vault; GOSI instead centres on social-insurance wages, certificates and benefit IBANs after a Nafath confirm.
- Налоги ФЛ — Налоги ФЛ is Russia's Federal Tax Service self-care client; GOSI is the Saudi social-insurance ledger rather than a tax cabinet.
- Microsoft Authenticator — Microsoft Authenticator stores work-or-school OTPs; GOSI consumes Nafath as the national identity rail and optional on-device biometrics for the same insurance account.
- Absher — Absher is the Interior Ministry's national services app and the OTP channel GOSI uses for some SANED steps; GOSI itself is the social-insurance wallet.
- Nafath — Nafath is the national digital-identity confirm app: GOSI starts a number-confirm there, then exchanges it for the insurance session.
- DigiLocker — DigiLocker is India's issued-document wallet; GOSI's wage and contribution certificates play the same role for Saudi social insurance.
Topics
- gosi api
- saudi social insurance api
- contributoryWage
- certificateNumber
- saned api
- nafath gosi
- ibanAccountNo
- riyadh insurance api
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use