Sari la conținut
Pagini APIProfiles

Documentație API

Această documentație este disponibilă doar în limba engleză.

Profiles

A profile is a client company. For an accounting firm this is the list the whole day is organized around. For a business using Syllevo directly it holds one entry, itself.

Almost everything else on these pages hangs off a profile: its documents, its invoices, its suppliers, its sources, its reminders, and its month-end status. The profile id is the single most useful value in the API, so this is usually the second call you make.

Profiles are called clients in the web app. The API name is profile and it will stay profile.

Routes

Method Path Needs
GET /v1/profiles Any member
POST /v1/profiles Admin
GET /v1/profiles/{id} View
PUT /v1/profiles/{id} ManageSettings
POST /v1/profiles/{id}/archive Admin
POST /v1/profiles/{id}/unarchive Admin
POST /v1/profiles/{id}/avatar ManageSettings
DELETE /v1/profiles/{id}/avatar ManageSettings
GET /v1/profiles/{profileId}/stats View
GET /v1/profiles/{profileId}/trend View

The profile shape

Field Type Means
id uuid Use this everywhere a profileId is asked for
name string The client company's name
taxIdentifier string or null VAT number or national registration number, null if unknown
countryCode string or null Two-letter country code
locale string en or ro. The language this client is written to in
archivedAt date-time, null Null while the client is in the working set
createdAt date-time When it was added
canManageSources boolean Whether this caller holds ManageSources on it
myPermissions integer[] Every ProfilePermission this caller holds on it
avatarUrl string or null Logo, 256 px. A short-lived link
avatarThumbnailUrl string or null Logo, 64 px. A short-lived link

canManageSources is there so a client application can hide a button without a second request. Do not treat it as the authoritative answer. The API decides.

myPermissions is the same idea for every permission: 0 View, 1 ManageDocuments, 2 ManageSources, 3 SendReminders, 4 ManageSettings, 5 TransmitInvoices. A member granted TransmitInvoices on a client sees 5 here, so the app can show them the send to SPV button.

GET /v1/profiles

One page of the client companies this credential can see, and only those.

Parameter Type Default Means
page integer 1 See Conventions
pageSize integer 25 Clamped to 200
search string none Matches anywhere in the name, case-insensitively
includeArchived boolean false Whether archived clients are included

The narrowing happens inside the query, not on the page that came back. A member who handles 30 of the firm's 200 clients gets 30 rows and a totalCount of 30. Likewise search counts the matches, not the portfolio.

GET /v1/profiles?search=example&pageSize=2 HTTP/1.1
Host: api.syllevo.com
X-Api-Key: syl_live_examplekeynotreal000000000000
{
  "items": [
    {
      "id": "22222222-2222-4222-8222-222222222222",
      "name": "Example Comert SRL",
      "taxIdentifier": "RO00000000",
      "countryCode": "RO",
      "locale": "ro",
      "archivedAt": null,
      "createdAt": "2026-01-15T09:00:00Z",
      "canManageSources": true,
      "myPermissions": [0, 1, 2, 3, 4],
      "avatarUrl": null,
      "avatarThumbnailUrl": null
    }
  ],
  "page": 1,
  "pageSize": 2,
  "totalCount": 1,
  "totalPages": 1
}

POST /v1/profiles

Adds a client company. Admin, not a per-client permission, because there is no client yet to hold a permission on.

Field Type Required Means
name string yes The client company's name
taxIdentifier string no VAT number or national registration number
countryCode string no Two-letter country code
locale string no en or ro. Defaults to the organization's locale

Answers 201 with the profile.

Fill in taxIdentifier and countryCode if you have them. They are what lets Syllevo recognize the client on an incoming e-Factura message and match suppliers to directory entries. A client created without them still works, but more documents land in review.

The number of clients a package covers is package.includedProfiles on GET /v1/organizations. Passing it is a billing matter, not a refusal here.

GET /v1/profiles/{id}

One client company. View.

A client this credential cannot see answers 404, not 403. That is on purpose: a 403 would confirm the id exists.

PUT /v1/profiles/{id}

Changes the client company's name, tax identifier, country, and locale. ManageSettings.

A full replace, not a patch. Omitting taxIdentifier clears it. Read the profile first, change what you need, and send the whole shape back.

Changing countryCode or taxIdentifier changes how incoming documents are matched to this client. Changing locale changes the language of every reminder it receives from that point on.

POST /v1/profiles/{id}/archive and /unarchive

Takes a client out of the firm's working set, or puts it back. Admin.

Archiving does not delete anything. Documents, invoices, and exports stay. What stops is the active handling: the client leaves the default lists and stops being chased.

Both are idempotent. Archiving an archived client answers 200 with the profile, and so does unarchiving an active one.

Use includeArchived=true on GET /v1/profiles to see archived clients.

POST and DELETE /v1/profiles/{id}/avatar

Sets or removes the client company's logo. ManageSettings.

multipart/form-data, one part named file, at most 5 MB, stored as WebP at 256 px with a 64 px thumbnail. Same rules as the organization logo, see Organizations. The delete is idempotent.

GET /v1/profiles/{profileId}/stats

What Syllevo holds for this client. View.

Field Type Means
documentCount integer Document originals on file
invoiceCount integer Invoices read out of them
supplierCount integer Distinct suppliers seen

GET /v1/profiles/{profileId}/trend

Invoices and documents that arrived for this client per day, one point per day with no gaps. View.

Same window rules as the organization trend: from and to are both inclusive, omitting both gives the last 30 days, a backwards range is 400, and a range longer than 366 days is 400. See Organizations for the response shape.

Where to go next with a profile id

To find out Call
What arrived GET /v1/documents
What was read out of it GET /v1/invoices
What is still missing GET /v1/completeness
Where documents come from GET /v1/profiles/{profileId}/accounts
Who is being chased GET /v1/profiles/{profileId}/reminders
Everything for a month GET /v1/profiles/{profileId}/handover-pack