API
Employee custom fields
expand=custom_fields adds a custom_fields object to the record: the values of
fields the company defined itself, keyed by api_name. Field descriptions —
types, options, table columns — come from GET /developer/v1/employee_custom_fields.
The scope is the same, employees:read; fields hidden by permissions go to
redacted_fields. Files, images and formula fields are not returned yet.→ Custom fieldsDocumentation
Reference corrections
The error format now matches reality: the body is agoogle.rpc.Status with a
numeric code, while the stable string code arrives in the X-Error-Reason header
and in details[].metadata.code. Status 409 and the document, file, webhook, and
Ingest codes were added.Event semantics fixed: a person rename emits only person.changed, while
employee.changed covers employment attributes. Subscribe to both if you store
names on your side.Field names in examples now match the code: DocumentTemplate.title,
person.full_name, limit instead of page_size, url instead of
download_url.→ Errors · WebhooksAPI
Uploading your own document
POST /developer/v1/files returns a presigned form, POST /developer/v1/files/{file_id}/_confirm
confirms the upload, and POST /developer/v1/documents accepts file_id
instead of template_id — your PDF then travels the route like any other
document. Same scope, documents:write.Only application/pdf up to 50 MB is accepted: the file goes to signing
exactly as you sent it.→ Uploading your own documentAPI
Documents in the Developer API
The full document lifecycle: create from a template, routes, sending, approval, signing (ЭЦП/КЭД), and download, plus type, category, and template catalogs. New scopes —documents:read and documents:write.Added document webhooks: document.sent, document.completed,
document.rejected, and others.Reworked the docs structure: guides for
employees and
documents, with recipes.API
Data ingest from external systems
Added thePOST /developer/v1/ingest/{source_type} endpoint: a batch of records
from an external HR system with a create_missing flag.Records are matched by
external_id — re-sending does not create duplicates.