Jestiyon - Public API
The public API for external companies that integrate with Jestiyon. Use api.jestiyon.com for production and api-sandbox.jestiyon.com for testing.
Base URL
https://api-sandbox.jestiyon.com
Authentication
Requests are authenticated with an API key sent in a request header.
API key
Şirketinize verilen API anahtarı. 'X-Api-Key' başlığında gönderin. Kimlik doğrulama bu önizleme sürümünde henüz zorunlu değildir.
curl https://api-sandbox.jestiyon.com/api/v1/companies \-H "X-Api-Key: YOUR_SANDBOX_KEY"
Getting started
Form a Turkish company in four steps: create the company, submit setup data and documents, then poll its status until formation completes.
1. Pick a firm type
Call GET /api/v1/reference/firm-types and note the firmTypeId you need — 1 for Şahıs İşletmesi (sole proprietorship), 2 for Limited Şirket. You send this exact value as firmTypeId when creating the company.
2. Create the company
POST the admin user and title to /api/v1/companies. The response returns the companyId you use for every later call, with taxNumber and taxOffice still null until the tax office is assigned.
curl -X POST https://api-sandbox.jestiyon.com/api/v1/companies \-H "X-Api-Key: YOUR_SANDBOX_KEY" \-H "Content-Type: application/json" \-d '{"title": "Örnek Yazılım Ltd. Şti.","firmTypeId": 2,"firstName": "Ayşe","lastName": "Yılmaz","email": "ayse.yilmaz@ornek.com","mobilePrefix": "+90","mobilePhone": "5321234567"}'
3. Submit setup
POST /api/v1/companies/{companyId}/setup with the formation data and the required document files in one multipart request. See the Companies section for the full field list per firm type. Attach any remaining documents with the documents endpoint using the numeric documentType id from /reference/document-types.
4. Poll the status
Poll GET /api/v1/companies/{companyId}/status (or subscribe to the company.status_changed webhook) until status is completed. If documents are rejected the response lists each rejection with how to fix it.
curl https://api-sandbox.jestiyon.com/api/v1/companies/1/status \-H "X-Api-Key: YOUR_SANDBOX_KEY"
Companies
Operations in the Companies group.
List companies
Returns every company created under your partner account, with its title, tax details and current formation status.
curl https://api-sandbox.jestiyon.com/api/v1/companies \-H "X-Api-Key: YOUR_SANDBOX_KEY"
[{"companyId": 1,"title": "Örnek Yazılım Ltd. Şti.","taxNumber": null,"taxOffice": null,"status": "pending_document_review"}]
Create company
Creates a Turkish company shell and its admin user on behalf of your partner account. Formation data is submitted separately through the setup endpoint.
setup requirements.curl -X POST https://api-sandbox.jestiyon.com/api/v1/companies \-H "X-Api-Key: YOUR_SANDBOX_KEY" \-H "Content-Type: application/json" \-d '{ \"title": "Örnek Yazılım Ltd. Şti.", \"firmTypeId": 2, \"firstName": "Ayşe", \"lastName": "Yılmaz", \"email": "ayse.yilmaz@ornek.com", \"mobilePrefix": "+90", \"mobilePhone": "5321234567" \}'
{"companyId": 1,"title": "Örnek Yazılım Ltd. Şti.","taxNumber": null,"taxOffice": null,"status": "pending_document_review"}
{"error": {"code": "parameter_missing","message": "Missing required parameter: firmTypeId.","param": "firmTypeId","request_id": "req_8Vd1pQ2mZ0"}}
Get company
Returns a single partner-owned company by its id.
curl https://api-sandbox.jestiyon.com/api/v1/companies/1 \-H "X-Api-Key: YOUR_SANDBOX_KEY"
{"companyId": 1,"title": "Örnek Yazılım Ltd. Şti.","taxNumber": null,"taxOffice": null,"status": "pending_document_review"}
{"error": {"code": "not_found","message": "No company found with id 999.","request_id": "req_7Kp2mNq0Za"}}
Company status
Returns a company's current formation status, whether setup has been submitted, and any outstanding document rejections.
curl https://api-sandbox.jestiyon.com/api/v1/companies/1/status \-H "X-Api-Key: YOUR_SANDBOX_KEY"
{"companyId": 1,"status": "pending_document_review","isSetupSubmitted": true,"rejections": null}
Submit setup
Submits formation data and documents in a single multipart request: a JSON data field (owner, partners, managers, capital, activity scope) plus owner and manager document files.
curl -X POST https://api-sandbox.jestiyon.com/api/v1/companies/1/setup \-H "X-Api-Key: YOUR_SANDBOX_KEY" \-F "name=Ayşe Yılmaz" \-F "identityNo=12345678901" \-F "isForeignIdentity=false" \-F "birthDate=1990-05-14T00:00:00Z" \-F "birthPlace=İstanbul" \-F "cityId=34" \-F "townId=1234" \-F "address=Bağdat Cad. No:1, Kadıköy" \-F "addressCountry=TR" \-F "email=ayse.yilmaz@ornek.com" \-F "phonePrefix=+90" \-F "phone=5321234567" \-F "isVehicleOperation=false" \-F "ownerIdentityFront=@/path/to/ownerIdentityFront" \-F "ownerIdentityBack=@/path/to/ownerIdentityBack" \-F "ownerAddressStatement=@/path/to/ownerAddressStatement" \-F "ownerPassport=@/path/to/ownerPassport" \-F "ownerResidency=@/path/to/ownerResidency" \-F "totalCapital=50000" \-F "shareCount=100" \-F "shareNominalValue=500" \-F "currency=TRY" \-F "activityScope=Yazılım geliştirme ve danışmanlık" \-F "managerIdentityFronts=@/path/to/managerIdentityFronts" \-F "managerIdentityBacks=@/path/to/managerIdentityBacks" \-F "managerResidencies=@/path/to/managerResidencies" \# + partner*/manager* array parts: repeat -F once per value (see Parameters)
{"companyId": 1,"status": "pending_document_review","details": [{"detailId": 11,"type": "partner","name": "Mehmet Demir"},{"detailId": 12,"type": "manager","name": "Ayşe Yılmaz"}]}
Upload document
Uploads a single formation document into an owner or partner/manager slot.
setup response). Omit to attach to the owner.curl -X POST https://api-sandbox.jestiyon.com/api/v1/companies/1/documents \-H "X-Api-Key: YOUR_SANDBOX_KEY" \-F "documentType=1" \-F "file=@/path/to/file"
{"documentId": 5001,"documentType": "IdentityFront","detailId": null,"fileName": "identity-front.jpg"}
Me
Operations in the Me group.
Current partner
Echoes the authenticated partner's id, name, tier and the environment of the key used.
curl https://api-sandbox.jestiyon.com/api/v1/me \-H "X-Api-Key: YOUR_SANDBOX_KEY"
{"partnerId": 1,"name": "Örnek Entegrasyon A.Ş.","tier": "standard","environment": "sandbox"}
Ping
Operations in the Ping group.
Ping
Returns a lightweight liveness response. Requires no authentication and is safe to call for uptime checks.
curl https://api-sandbox.jestiyon.com/api/v1/ping
{"status": "ok","version": "1.0","environment": "sandbox","serverTimeUtc": "2026-08-12T09:30:00Z"}
Reference
Operations in the Reference group.
Firm types
Returns the available Turkey firm types.
curl https://api-sandbox.jestiyon.com/api/v1/reference/firm-types \-H "X-Api-Key: YOUR_SANDBOX_KEY"
[{"firmTypeId": 1,"name": "Şahıs İşletmesi","description": "Tek kişilik işletme","countryId": 1,"requiresCapital": false},{"firmTypeId": 2,"name": "Limited Şirket","description": "Sermaye şirketi (Ltd. Şti.)","countryId": 1,"requiresCapital": true}]
Currencies
Returns the available currencies.
curl https://api-sandbox.jestiyon.com/api/v1/reference/currencies \-H "X-Api-Key: YOUR_SANDBOX_KEY"
[{"id": 1,"name": "TRY"},{"id": 2,"name": "USD"}]
Cities
Returns the list of Turkey cities.
curl https://api-sandbox.jestiyon.com/api/v1/reference/cities \-H "X-Api-Key: YOUR_SANDBOX_KEY"
[{"id": 34,"name": "İstanbul"},{"id": 6,"name": "Ankara"}]
Towns
Returns the towns (İlçe) of a city.
curl https://api-sandbox.jestiyon.com/api/v1/reference/towns?cityId=1 \-H "X-Api-Key: YOUR_SANDBOX_KEY"
[{"id": 1234,"name": "Kadıköy"},{"id": 1235,"name": "Beşiktaş"}]
Document types
Returns the document categories accepted for formation uploads.
curl https://api-sandbox.jestiyon.com/api/v1/reference/document-types \-H "X-Api-Key: YOUR_SANDBOX_KEY"
[{"id": 1,"name": "IdentityFront"},{"id": 2,"name": "IdentityBack"},{"id": 3,"name": "AddressStatement"},{"id": 4,"name": "Passport"},{"id": 5,"name": "Residency"}]
Statuses
Returns the set of formation status values the API can return.
curl https://api-sandbox.jestiyon.com/api/v1/reference/statuses \-H "X-Api-Key: YOUR_SANDBOX_KEY"
["pending_document_review","documents_approved","e_signature_pending","e_invoice_setup","completed","rejected"]
Webhooks
Jestiyon posts signed events to your webhook URL as company formation status changes.
Jestiyon POSTs company.status_changed events to your configured webhook URL on every formation status change. The body matches the CompanyStatusChangedWebhook schema and is signed with HMAC-SHA256 (hex) over the raw body in the X-Signature header — verify it with your webhook secret. Return 2xx to acknowledge; non-2xx or timeouts are retried with backoff.
Status values
Each company.status_changed event carries one of the following status values. All of them are triggered internally by Jestiyon.
setup has started.Example payload
{"event": "company.status_changed","companyId": 1,"status": "documents_approved","occurredAtUtc": "2026-08-12T09:30:00Z"}
Errors
Every error uses the same JSON envelope. Read error.code for branching and error.message for a human-readable reason.
{"error": {"code": "parameter_missing","message": "Missing required parameter: firmTypeId.","param": "firmTypeId","request_id": "req_8Vd1pQ2mZ0"}}
Status codes
error.param).Retry-After.Rate limits
When you exceed your tier's rate limit the API returns 429 with a Retry-After header (in seconds). Wait that long before retrying; retrying sooner keeps failing.
resp.taxNumber === null), not for an absent key.Changelog
Notable changes to the public API.
v1.0 — August 2026
setup, documents, status), Me, Ping and the Reference lookups.company.status_changed events (HMAC-SHA256) as formation status changes.Support
Get help from the Jestiyon integration team.