OpenAPI JSONMarkdown Docs

OpenAPI Explorer

Auto-generated OpenAPI definition for all enabled modules.

Default server: https://open-mercato.dogtronic.biz/api

Authentication & Accounts

23 endpoints
GET/auth/admin/nav
Auth required

Resolve sidebar entries

Returns the backend navigation tree available to the authenticated administrator after applying role and personal sidebar preferences.

Responses

200Sidebar navigation structure
Content-Type: application/json
{
  "groups": [
    {
      "id": "string",
      "name": "string",
      "defaultName": "string",
      "items": [
        {
          "href": "string",
          "title": "string",
          "defaultTitle": "string",
          "enabled": true
        }
      ]
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/admin/nav" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/feature-check
Auth required

Check feature grants for the current user

Evaluates which of the requested features are available to the signed-in user within the active tenant / organization context.

Request body (application/json)

{
  "features": [
    "string"
  ]
}

Responses

200Evaluation result
Content-Type: application/json
{
  "ok": true,
  "granted": [
    "string"
  ]
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/auth/feature-check" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "features": [
    "string"
  ]
}'
GET/auth/features
Auth requiredauth.acl.manage

List declared feature flags

Returns all static features contributed by the enabled modules along with their module source. Requires features: auth.acl.manage

Responses

200Aggregated feature catalog
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "title": "string",
      "module": "string"
    }
  ],
  "modules": [
    {
      "id": "string",
      "title": "string"
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/features" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/login

Authenticate user credentials

Validates the submitted credentials and issues a bearer token cookie for subsequent API calls.

Request body (application/x-www-form-urlencoded)

email=user%40example.com&password=string

Responses

200Authentication succeeded
Content-Type: application/json
{
  "ok": true,
  "token": "string",
  "redirect": null
}
400Validation failed
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
401Invalid credentials
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
403User lacks required role
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/auth/login" \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d 'email=user%40example.com&password=string'
GET/auth/logout
Auth required

Log out (legacy GET)

For convenience, the GET variant performs the same logout logic as POST and issues a redirect.

Responses

200Success response
Content-Type: application/json
{}
302Redirect to login after successful logout
Content-Type: text/html
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/logout" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/logout
Auth required

Invalidate session and redirect

Clears authentication cookies and redirects the browser to the login page.

Responses

201Success response
Content-Type: application/json
{}
302Redirect to login after successful logout
Content-Type: text/html
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/auth/logout" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/reset

Send reset email

Requests a password reset email for the given account. The endpoint always returns `ok: true` to avoid leaking account existence.

Request body (application/x-www-form-urlencoded)

email=user%40example.com

Responses

200Reset email dispatched (or ignored for unknown accounts)
Content-Type: application/json
{
  "ok": true
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/auth/reset" \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d 'email=user%40example.com'
POST/auth/reset/confirm

Complete password reset

Validates the reset token and updates the user password.

Request body (application/x-www-form-urlencoded)

token=string&password=string

Responses

200Password reset succeeded
Content-Type: application/json
{
  "ok": true,
  "redirect": "string"
}
400Invalid token or payload
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/auth/reset/confirm" \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d 'token=string&password=string'
GET/auth/roles
Auth requiredauth.roles.list

List roles

Returns available roles within the current tenant. Super administrators receive visibility across tenants. Requires features: auth.roles.list

Parameters

NameInRequiredSchemaDescription
idqueryNostring
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
tenantIdqueryNostring

Responses

200Role collection
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "usersCount": 1,
      "tenantId": null,
      "tenantName": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/roles?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/roles
Auth requiredauth.roles.manage

Create role

Creates a new role for the current tenant or globally when `tenantId` is omitted. Requires features: auth.roles.manage

Request body (application/json)

{
  "name": "string",
  "tenantId": null
}

Responses

201Role created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/auth/roles" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "tenantId": null
}'
PUT/auth/roles
Auth requiredauth.roles.manage

Update role

Updates mutable fields on an existing role. Requires features: auth.roles.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "tenantId": null
}

Responses

200Role updated
Content-Type: application/json
{
  "ok": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/auth/roles" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "tenantId": null
}'
DELETE/auth/roles
Auth requiredauth.roles.manage

Delete role

Deletes a role by identifier. Fails when users remain assigned. Requires features: auth.roles.manage

Parameters

NameInRequiredSchemaDescription
idqueryYesstring

Responses

200Role deleted
Content-Type: application/json
{
  "ok": true
}
400Role cannot be deleted
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/auth/roles?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/auth/roles/acl
Auth requiredauth.acl.manage

Fetch role ACL

Returns the feature and organization assignments associated with a role within the current tenant. Requires features: auth.acl.manage

Parameters

NameInRequiredSchemaDescription
roleIdqueryYesstring
tenantIdqueryNostring

Responses

200Role ACL entry
Content-Type: application/json
{
  "isSuperAdmin": true,
  "features": [
    "string"
  ],
  "organizations": null
}
400Invalid role id
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/roles/acl?roleId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/auth/roles/acl
Auth requiredauth.acl.manage

Update role ACL

Replaces the feature list, super admin flag, and optional organization assignments for a role. Requires features: auth.acl.manage

Request body (application/json)

{
  "roleId": "00000000-0000-4000-8000-000000000000",
  "organizations": null
}

Responses

200Role ACL updated
Content-Type: application/json
{
  "ok": true,
  "sanitized": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/auth/roles/acl" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "roleId": "00000000-0000-4000-8000-000000000000",
  "organizations": null
}'
GET/auth/session/refresh

Refresh auth cookie from session token

Exchanges an existing `session_token` cookie for a fresh JWT auth cookie and redirects the browser.

Parameters

NameInRequiredSchemaDescription
redirectqueryNostring

Responses

200Success response
Content-Type: application/json
{}
302Redirect to target location when session is valid
Content-Type: text/html
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/session/refresh" \
  -H "Accept: application/json"
GET/auth/sidebar/preferences
Auth required

Get sidebar preferences

Returns personal sidebar customization and any role-level preferences the user can manage.

Responses

200Current sidebar configuration
Content-Type: application/json
{
  "locale": "string",
  "settings": {
    "version": 1,
    "groupOrder": [
      "string"
    ],
    "groupLabels": {
      "key": "string"
    },
    "itemLabels": {
      "key": "string"
    },
    "hiddenItems": [
      "string"
    ]
  },
  "canApplyToRoles": true,
  "roles": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "hasPreference": true
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/sidebar/preferences" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/auth/sidebar/preferences
Auth required

Update sidebar preferences

Updates personal sidebar configuration and, optionally, applies the same settings to selected roles.

Request body (application/json)

{}

Responses

200Preferences saved
Content-Type: application/json
{
  "locale": "string",
  "settings": {
    "version": 1,
    "groupOrder": [
      "string"
    ],
    "groupLabels": {
      "key": "string"
    },
    "itemLabels": {
      "key": "string"
    },
    "hiddenItems": [
      "string"
    ]
  },
  "canApplyToRoles": true,
  "roles": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "hasPreference": true
    }
  ],
  "appliedRoles": [
    "00000000-0000-4000-8000-000000000000"
  ],
  "clearedRoles": [
    "00000000-0000-4000-8000-000000000000"
  ]
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
403Missing features for role-wide updates
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/auth/sidebar/preferences" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
GET/auth/users
Auth requiredauth.users.list

List users

Returns users for the current tenant. Super administrators may scope the response via organization or role filters. Requires features: auth.users.list

Parameters

NameInRequiredSchemaDescription
idqueryNostring
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
organizationIdqueryNostring
roleIdsqueryNoarray

Responses

200User collection
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "email": "user@example.com",
      "organizationId": null,
      "organizationName": null,
      "tenantId": null,
      "tenantName": null,
      "roles": [
        "string"
      ]
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/users?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/users
Auth requiredauth.users.create

Create user

Creates a new confirmed user within the specified organization and optional roles. Requires features: auth.users.create

Request body (application/json)

{
  "email": "user@example.com",
  "password": "string",
  "organizationId": "00000000-0000-4000-8000-000000000000"
}

Responses

201User created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload or duplicate email
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/auth/users" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "user@example.com",
  "password": "string",
  "organizationId": "00000000-0000-4000-8000-000000000000"
}'
PUT/auth/users
Auth requiredauth.users.edit

Update user

Updates profile fields, organization assignment, credentials, or role memberships. Requires features: auth.users.edit

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200User updated
Content-Type: application/json
{
  "ok": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404User not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/auth/users" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/auth/users
Auth requiredauth.users.delete

Delete user

Deletes a user by identifier. Undo support is provided via the command bus. Requires features: auth.users.delete

Parameters

NameInRequiredSchemaDescription
idqueryYesstring

Responses

200User deleted
Content-Type: application/json
{
  "ok": true
}
400User cannot be deleted
Content-Type: application/json
{
  "error": "string"
}
404User not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/auth/users?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/auth/users/acl
Auth requiredauth.acl.manage

Fetch user ACL

Returns custom ACL overrides for a user within the current tenant, if any. Requires features: auth.acl.manage

Parameters

NameInRequiredSchemaDescription
userIdqueryYesstring

Responses

200User ACL entry
Content-Type: application/json
{
  "hasCustomAcl": true,
  "isSuperAdmin": true,
  "features": [
    "string"
  ],
  "organizations": null
}
400Invalid user id
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/auth/users/acl?userId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/auth/users/acl
Auth requiredauth.acl.manage

Update user ACL

Configures per-user ACL overrides, including super admin access, feature list, and organization scope. Requires features: auth.acl.manage

Request body (application/json)

{
  "userId": "00000000-0000-4000-8000-000000000000",
  "organizations": null
}

Responses

200User ACL updated
Content-Type: application/json
{
  "ok": true,
  "sanitized": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/auth/users/acl" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "userId": "00000000-0000-4000-8000-000000000000",
  "organizations": null
}'

Configuration

6 endpoints
GET/configs/cache
Auth requiredconfigs.cache.view

GET /configs/cache

Requires features: configs.cache.view

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/configs/cache" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/configs/cache
Auth requiredconfigs.cache.manage

POST /configs/cache

Requires features: configs.cache.manage

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/configs/cache" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/configs/system-status
Auth requiredconfigs.system_status.view

GET /configs/system-status

Requires features: configs.system_status.view

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/configs/system-status" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/configs/system-status
Auth requiredconfigs.manage

POST /configs/system-status

Requires features: configs.manage

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/configs/system-status" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/configs/upgrade-actions
Auth requiredconfigs.manage

GET /configs/upgrade-actions

Requires features: configs.manage

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/configs/upgrade-actions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/configs/upgrade-actions
Auth requiredconfigs.manage

POST /configs/upgrade-actions

Requires features: configs.manage

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/configs/upgrade-actions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Vector Search

6 endpoints
GET/vector/index
Auth requiredvector.search

GET /vector/index

Requires features: vector.search

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/vector/index" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/vector/index
Auth requiredvector.manage

DELETE /vector/index

Requires features: vector.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/vector/index" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/vector/reindex
Auth requiredvector.reindex

POST /vector/reindex

Requires features: vector.reindex

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/vector/reindex" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/vector/settings
Auth requiredvector.view

GET /vector/settings

Requires features: vector.view

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/vector/settings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/vector/settings
Auth requiredvector.manage

POST /vector/settings

Requires features: vector.manage

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/vector/settings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Audit & Action Logs

4 endpoints
GET/audit_logs/audit-logs/access
Auth requiredaudit_logs.view_self

Retrieve access logs

Fetches paginated access audit logs scoped to the authenticated user. Tenant administrators can optionally expand the search to other actors or organizations. Requires features: audit_logs.view_self

Parameters

NameInRequiredSchemaDescription
organizationIdqueryNostring
actorUserIdqueryNostring
resourceKindqueryNostring
accessTypequeryNostring
pagequeryNostring
pageSizequeryNostring
limitqueryNostring
beforequeryNostring
afterqueryNostring

Responses

200Access logs returned successfully
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "resourceKind": "string",
      "resourceId": "string",
      "accessType": "string",
      "actorUserId": null,
      "actorUserName": null,
      "tenantId": null,
      "tenantName": null,
      "organizationId": null,
      "organizationName": null,
      "fields": [
        "string"
      ],
      "context": null,
      "createdAt": "string"
    }
  ],
  "canViewTenant": true,
  "page": 1,
  "pageSize": 1,
  "total": 1,
  "totalPages": 1
}
400Invalid filters supplied
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/audit_logs/audit-logs/access" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/audit_logs/audit-logs/actions
Auth requiredaudit_logs.view_self

Fetch action logs

Returns recent action audit log entries. Tenant administrators can widen the scope to other actors or organizations, and callers can optionally restrict results to undoable actions. Requires features: audit_logs.view_self

Parameters

NameInRequiredSchemaDescription
organizationIdqueryNostring
actorUserIdqueryNostring
undoableOnlyqueryNostring
limitqueryNostring
beforequeryNostring
afterqueryNostring

Responses

200Action logs retrieved successfully
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "commandId": "string",
      "actionLabel": null,
      "executionState": "done",
      "actorUserId": null,
      "actorUserName": null,
      "tenantId": null,
      "tenantName": null,
      "organizationId": null,
      "organizationName": null,
      "resourceKind": null,
      "resourceId": null,
      "undoToken": null,
      "createdAt": "string",
      "updatedAt": "string",
      "snapshotBefore": null,
      "snapshotAfter": null,
      "changes": null,
      "context": null
    }
  ],
  "canViewTenant": true
}
400Invalid filter values
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/audit_logs/audit-logs/actions?undoableOnly=false" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/audit_logs/audit-logs/actions/redo
Auth requiredaudit_logs.redo_self

Redo by action log id

Redoes the latest undone command owned by the caller. Requires the action to still be eligible for redo within tenant and organization scope. Requires features: audit_logs.redo_self

Request body (application/json)

{
  "logId": "string"
}

Responses

200Redo executed successfully
Content-Type: application/json
{
  "ok": true,
  "logId": null,
  "undoToken": null
}
400Log not eligible for redo
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/audit_logs/audit-logs/actions/redo" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "logId": "string"
}'
POST/audit_logs/audit-logs/actions/undo
Auth requiredaudit_logs.undo_self

Undo action by token

Replays the undo handler registered for a command. The provided undo token must match the latest undoable log entry accessible to the caller. Requires features: audit_logs.undo_self

Request body (application/json)

{
  "undoToken": "string"
}

Responses

200Undo applied successfully
Content-Type: application/json
{
  "ok": true,
  "logId": "string"
}
400Invalid or unavailable undo token
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/audit_logs/audit-logs/actions/undo" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "undoToken": "string"
}'

Attachments

14 endpoints
GET/attachments/attachments
Auth requiredattachments.view

List attachments for a record

Returns uploaded attachments for the given entity record, ordered by newest first. Requires features: attachments.view

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesstring
recordIdqueryYesstring

Responses

200Attachments found for the record
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "url": "string",
      "fileName": "string",
      "fileSize": 1,
      "createdAt": "string"
    }
  ]
}
400Missing entity or record identifiers
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/attachments/attachments?entityId=string&recordId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/attachments/attachments
Auth requiredattachments.manage

Upload attachment

Uploads a new attachment using multipart form-data and stores metadata for later retrieval. Requires features: attachments.manage

Request body (multipart/form-data)

entityId=string
recordId=string
file=string

Responses

200Attachment stored successfully
Content-Type: application/json
{
  "ok": true,
  "item": {
    "id": "string",
    "url": "string",
    "fileName": "string",
    "fileSize": 1
  }
}
400Payload validation error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/attachments/attachments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: multipart/form-data" \
  -d '{
  "entityId": "string",
  "recordId": "string",
  "file": "string"
}'
DELETE/attachments/attachments
Auth requiredattachments.manage

Delete attachment

Removes an uploaded attachment and deletes the stored asset. Requires features: attachments.manage

Parameters

NameInRequiredSchemaDescription
idqueryYesstring

Responses

200Attachment deleted
Content-Type: application/json
{
  "ok": true
}
400Missing attachment identifier
Content-Type: application/json
{
  "error": "string"
}
404Attachment not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/attachments/attachments?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/attachments/attachments/file/{id}

GET /attachments/attachments/file/{id}

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/attachments/attachments/file/:id" \
  -H "Accept: application/json"
GET/attachments/attachments/image/{id}/{slug}

GET /attachments/attachments/image/{id}/{slug}

Parameters

NameInRequiredSchemaDescription
idpathYesstring
slugpathNostring

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/attachments/attachments/image/:id/:slug" \
  -H "Accept: application/json"
POST/attachments/attachments/transfer
Auth requiredattachments.manage

POST /attachments/attachments/transfer

Requires features: attachments.manage

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/attachments/attachments/transfer" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/attachments/library
Auth requiredattachments.view

GET /attachments/library

Requires features: attachments.view

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/attachments/library" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/attachments/library/{id}
Auth requiredattachments.view

GET /attachments/library/{id}

Requires features: attachments.view

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/attachments/library/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PATCH/attachments/library/{id}
Auth requiredattachments.manage

PATCH /attachments/library/{id}

Requires features: attachments.manage

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X PATCH "https://open-mercato.dogtronic.biz/api/attachments/library/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/attachments/library/{id}
Auth requiredattachments.manage

DELETE /attachments/library/{id}

Requires features: attachments.manage

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

204Success

No response body.

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/attachments/library/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/attachments/partitions
Auth requiredattachments.manage

GET /attachments/partitions

Requires features: attachments.manage

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/attachments/partitions
Auth requiredattachments.manage

POST /attachments/partitions

Requires features: attachments.manage

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/attachments/partitions
Auth requiredattachments.manage

PUT /attachments/partitions

Requires features: attachments.manage

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/attachments/partitions
Auth requiredattachments.manage

DELETE /attachments/partitions

Requires features: attachments.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

API Keys

3 endpoints
GET/api_keys/keys
Auth requiredapi_keys.view

List API keys

Returns paginated API keys visible to the current user, including per-key role assignments and organization context. Requires features: api_keys.view

Parameters

NameInRequiredSchemaDescription
pagequeryNostring
pageSizequeryNostring
searchqueryNostring

Responses

200Collection of API keys
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "name": "string",
      "description": null,
      "keyPrefix": "string",
      "organizationId": null,
      "organizationName": null,
      "createdAt": "string",
      "lastUsedAt": null,
      "expiresAt": null,
      "roles": [
        {
          "id": "string",
          "name": null
        }
      ]
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}
400Tenant context missing
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/api_keys/keys" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/api_keys/keys
Auth requiredapi_keys.create

Create API key

Creates a new API key, returning the one-time secret value together with the generated key prefix and scope details. Requires features: api_keys.create

Request body (application/json)

{
  "name": "string",
  "description": null,
  "tenantId": null,
  "organizationId": null,
  "roles": [],
  "expiresAt": null
}

Responses

201API key created successfully
Content-Type: application/json
{
  "id": "string",
  "name": "string",
  "keyPrefix": "string",
  "tenantId": null,
  "organizationId": null,
  "roles": [
    {
      "id": "string",
      "name": null
    }
  ]
}
400Invalid payload or missing tenant context
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/api_keys/keys" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "description": null,
  "tenantId": null,
  "organizationId": null,
  "roles": [],
  "expiresAt": null
}'
DELETE/api_keys/keys
Auth requiredapi_keys.delete

Delete API key

Removes an API key by identifier. The key must belong to the current tenant and fall within the requester organization scope. Requires features: api_keys.delete

Parameters

NameInRequiredSchemaDescription
idqueryYesstring

Responses

200Key deleted successfully
Content-Type: application/json
{
  "success": true
}
400Missing or invalid identifier
Content-Type: application/json
{
  "error": "string"
}
404Key not found within scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/api_keys/keys?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Onboarding

2 endpoints
POST/onboarding/onboarding

Self-service onboarding submission

Responses

201Success response
Content-Type: application/json
{}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/onboarding/onboarding" \
  -H "Accept: application/json"
GET/onboarding/onboarding/verify

Onboarding verification redirect

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/onboarding/onboarding/verify" \
  -H "Accept: application/json"

Business Rules

16 endpoints
POST/business_rules/execute
Auth requiredbusiness_rules.execute

Execute rules for given context

Manually executes applicable business rules for the specified entity type, event, and data. Supports dry-run mode to test rules without executing actions. Requires features: business_rules.execute

Request body (application/json)

{
  "entityType": "string",
  "dryRun": false
}

Responses

200Rules executed successfully
Content-Type: application/json
{
  "allowed": true,
  "executedRules": [
    {
      "ruleId": "string",
      "ruleName": "string",
      "conditionResult": true,
      "executionTime": 1
    }
  ],
  "totalExecutionTime": 1
}
400Invalid request payload
Content-Type: application/json
{
  "error": "string"
}
500Execution error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/business_rules/execute" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityType": "string",
  "dryRun": false
}'
GET/business_rules/logs
Auth requiredbusiness_rules.view_logs

List rule execution logs

Returns rule execution history for the current tenant and organization with filtering and pagination. Useful for audit trails and debugging. Requires features: business_rules.view_logs

Parameters

NameInRequiredSchemaDescription
idqueryNointeger
pagequeryNonumber
pageSizequeryNonumber
ruleIdqueryNostring
entityIdqueryNostring
entityTypequeryNostring
executionResultqueryNostring
executedByqueryNostring
executedAtFromqueryNostring
executedAtToqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Rule execution logs collection
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "ruleId": "string",
      "ruleName": "string",
      "ruleType": "string",
      "entityId": "00000000-0000-4000-8000-000000000000",
      "entityType": "string",
      "executionResult": "SUCCESS",
      "inputContext": null,
      "outputContext": null,
      "errorMessage": null,
      "executionTimeMs": 1,
      "executedAt": "string",
      "tenantId": "00000000-0000-4000-8000-000000000000",
      "organizationId": null,
      "executedBy": null
    }
  ],
  "total": 1,
  "totalPages": 1
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/business_rules/logs?page=1&pageSize=50&sortDir=desc" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/business_rules/logs/{id}
Auth requiredbusiness_rules.view_logs

Get execution log detail

Returns detailed information about a specific rule execution, including full context and results. Requires features: business_rules.view_logs

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Log entry details
Content-Type: application/json
{
  "id": "string",
  "rule": {
    "id": "00000000-0000-4000-8000-000000000000",
    "ruleId": "string",
    "ruleName": "string",
    "ruleType": "string",
    "entityType": "string"
  },
  "entityId": "00000000-0000-4000-8000-000000000000",
  "entityType": "string",
  "executionResult": "SUCCESS",
  "inputContext": null,
  "outputContext": null,
  "errorMessage": null,
  "executionTimeMs": 1,
  "executedAt": "string",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": null,
  "executedBy": null
}
400Invalid log id
Content-Type: application/json
{
  "error": "string"
}
404Log entry not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/business_rules/logs/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/business_rules/rules
Auth requiredbusiness_rules.view

List business rules

Returns business rules for the current tenant and organization with filtering and pagination. Requires features: business_rules.view

Parameters

NameInRequiredSchemaDescription
idqueryNostring
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
ruleIdqueryNostring
ruleTypequeryNostring
entityTypequeryNostring
eventTypequeryNostring
enabledqueryNoboolean
ruleCategoryqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Business rules collection
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "ruleId": "string",
      "ruleName": "string",
      "description": null,
      "ruleType": "GUARD",
      "ruleCategory": null,
      "entityType": "string",
      "eventType": null,
      "enabled": true,
      "priority": 1,
      "version": 1,
      "effectiveFrom": null,
      "effectiveTo": null,
      "tenantId": "00000000-0000-4000-8000-000000000000",
      "organizationId": "00000000-0000-4000-8000-000000000000",
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/business_rules/rules?page=1&pageSize=50&sortDir=desc" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/business_rules/rules
Auth requiredbusiness_rules.manage

Create business rule

Creates a new business rule for the current tenant and organization. Requires features: business_rules.manage

Request body (application/json)

{
  "ruleId": "string",
  "ruleName": "string",
  "description": null,
  "ruleType": "GUARD",
  "ruleCategory": null,
  "entityType": "string",
  "eventType": null,
  "successActions": null,
  "failureActions": null,
  "enabled": true,
  "priority": 100,
  "version": 1,
  "effectiveFrom": null,
  "effectiveTo": null,
  "tenantId": "string",
  "organizationId": "string",
  "createdBy": null
}

Responses

201Business rule created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/business_rules/rules" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "ruleId": "string",
  "ruleName": "string",
  "description": null,
  "ruleType": "GUARD",
  "ruleCategory": null,
  "entityType": "string",
  "eventType": null,
  "successActions": null,
  "failureActions": null,
  "enabled": true,
  "priority": 100,
  "version": 1,
  "effectiveFrom": null,
  "effectiveTo": null,
  "tenantId": "string",
  "organizationId": "string",
  "createdBy": null
}'
PUT/business_rules/rules
Auth requiredbusiness_rules.manage

Update business rule

Updates an existing business rule. Requires features: business_rules.manage

Request body (application/json)

{
  "description": null,
  "ruleCategory": null,
  "eventType": null,
  "successActions": null,
  "failureActions": null,
  "enabled": true,
  "priority": 100,
  "version": 1,
  "effectiveFrom": null,
  "effectiveTo": null,
  "createdBy": null,
  "id": "string"
}

Responses

200Business rule updated
Content-Type: application/json
{
  "ok": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Business rule not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/business_rules/rules" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "description": null,
  "ruleCategory": null,
  "eventType": null,
  "successActions": null,
  "failureActions": null,
  "enabled": true,
  "priority": 100,
  "version": 1,
  "effectiveFrom": null,
  "effectiveTo": null,
  "createdBy": null,
  "id": "string"
}'
DELETE/business_rules/rules
Auth requiredbusiness_rules.manage

Delete business rule

Soft deletes a business rule by identifier. Requires features: business_rules.manage

Parameters

NameInRequiredSchemaDescription
idqueryYesstring

Responses

200Business rule deleted
Content-Type: application/json
{
  "ok": true
}
400Invalid identifier
Content-Type: application/json
{
  "error": "string"
}
404Business rule not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/business_rules/rules?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/business_rules/rules/{id}
Auth requiredbusiness_rules.view

Fetch business rule by ID

Returns complete details of a business rule including conditions and actions. Requires features: business_rules.view

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Business rule detail
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "ruleId": "string",
  "ruleName": "string",
  "description": null,
  "ruleType": "GUARD",
  "ruleCategory": null,
  "entityType": "string",
  "eventType": null,
  "successActions": null,
  "failureActions": null,
  "enabled": true,
  "priority": 1,
  "version": 1,
  "effectiveFrom": null,
  "effectiveTo": null,
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "createdBy": null,
  "updatedBy": null,
  "createdAt": "string",
  "updatedAt": "string"
}
400Invalid identifier
Content-Type: application/json
{
  "error": "string"
}
404Business rule not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/business_rules/rules/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/business_rules/sets
Auth requiredbusiness_rules.view

List rule sets

Returns rule sets for the current tenant and organization with filtering and pagination. Requires features: business_rules.view

Parameters

NameInRequiredSchemaDescription
idqueryNostring
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
setIdqueryNostring
enabledqueryNoboolean
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Rule sets collection
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "setId": "string",
      "setName": "string",
      "description": null,
      "enabled": true,
      "tenantId": "00000000-0000-4000-8000-000000000000",
      "organizationId": "00000000-0000-4000-8000-000000000000",
      "createdBy": null,
      "updatedBy": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/business_rules/sets?page=1&pageSize=50&sortDir=asc" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/business_rules/sets
Auth requiredbusiness_rules.manage_sets

Create rule set

Creates a new rule set for organizing business rules. Requires features: business_rules.manage_sets

Request body (application/json)

{
  "setId": "string",
  "setName": "string",
  "description": null,
  "enabled": true,
  "tenantId": "string",
  "organizationId": "string",
  "createdBy": null
}

Responses

201Rule set created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/business_rules/sets" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "setId": "string",
  "setName": "string",
  "description": null,
  "enabled": true,
  "tenantId": "string",
  "organizationId": "string",
  "createdBy": null
}'
PUT/business_rules/sets
Auth requiredbusiness_rules.manage_sets

Update rule set

Updates an existing rule set. Requires features: business_rules.manage_sets

Request body (application/json)

{
  "description": null,
  "enabled": true,
  "createdBy": null,
  "id": "string"
}

Responses

200Rule set updated
Content-Type: application/json
{
  "ok": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Rule set not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/business_rules/sets" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "description": null,
  "enabled": true,
  "createdBy": null,
  "id": "string"
}'
DELETE/business_rules/sets
Auth requiredbusiness_rules.manage_sets

Delete rule set

Soft deletes a rule set by identifier. Requires features: business_rules.manage_sets

Parameters

NameInRequiredSchemaDescription
idqueryYesstring

Responses

200Rule set deleted
Content-Type: application/json
{
  "ok": true
}
400Invalid identifier
Content-Type: application/json
{
  "error": "string"
}
404Rule set not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/business_rules/sets?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/business_rules/sets/{id}
Auth requiredbusiness_rules.view

Get rule set detail

Returns detailed information about a specific rule set, including all member rules. Requires features: business_rules.view

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Rule set details
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "setId": "string",
  "setName": "string",
  "description": null,
  "enabled": true,
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "createdBy": null,
  "updatedBy": null,
  "createdAt": "string",
  "updatedAt": "string",
  "members": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "ruleId": "00000000-0000-4000-8000-000000000000",
      "ruleName": "string",
      "ruleType": "string",
      "sequence": 1,
      "enabled": true
    }
  ]
}
400Invalid rule set id
Content-Type: application/json
{
  "error": "string"
}
404Rule set not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/business_rules/sets/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/business_rules/sets/{id}/members
Auth requiredbusiness_rules.manage_sets

Add rule to set

Adds a business rule to a rule set with specified sequence and enabled state. Requires features: business_rules.manage_sets

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Request body (application/json)

{
  "ruleId": "00000000-0000-4000-8000-000000000000",
  "sequence": 0,
  "enabled": true
}

Responses

201Member added
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Rule set or rule not found
Content-Type: application/json
{
  "error": "string"
}
409Rule already in set
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/business_rules/sets/:id/members" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "ruleId": "00000000-0000-4000-8000-000000000000",
  "sequence": 0,
  "enabled": true
}'
PUT/business_rules/sets/{id}/members
Auth requiredbusiness_rules.manage_sets

Update set member

Updates sequence or enabled state of a rule set member. Requires features: business_rules.manage_sets

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Request body (application/json)

{
  "memberId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Member updated
Content-Type: application/json
{
  "ok": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Member not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/business_rules/sets/:id/members" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "memberId": "00000000-0000-4000-8000-000000000000"
}'
DELETE/business_rules/sets/{id}/members
Auth requiredbusiness_rules.manage_sets

Remove rule from set

Removes a business rule from a rule set (hard delete). Requires features: business_rules.manage_sets

Parameters

NameInRequiredSchemaDescription
idpathYesstring
memberIdqueryYesstring

Responses

200Member removed
Content-Type: application/json
{
  "ok": true
}
400Invalid identifier
Content-Type: application/json
{
  "error": "string"
}
404Member not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/business_rules/sets/:id/members?memberId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Catalog

31 endpoints
GET/catalog/categories
Auth requiredcatalog.categories.view

List categories

Returns a paginated collection of categories scoped to the authenticated organization. Requires features: catalog.categories.view

Parameters

NameInRequiredSchemaDescription
viewqueryNostring
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
statusqueryNostring
idsqueryNostring

Responses

200Paginated categories
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "slug": null,
      "description": null,
      "parentId": null,
      "parentName": null,
      "depth": 1,
      "treePath": "string",
      "pathLabel": "string",
      "childCount": 1,
      "descendantCount": 1,
      "isActive": true,
      "organizationId": "00000000-0000-4000-8000-000000000000",
      "tenantId": "00000000-0000-4000-8000-000000000000"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/categories?view=manage&page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/catalog/categories
Auth requiredcatalog.categories.manage

Create category

Creates a new product category. Requires features: catalog.categories.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "slug": null,
  "parentId": null
}

Responses

201Category created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/catalog/categories" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "slug": null,
  "parentId": null
}'
PUT/catalog/categories
Auth requiredcatalog.categories.manage

Update category

Updates an existing category by id. Requires features: catalog.categories.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "slug": null,
  "parentId": null
}

Responses

200Category updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/catalog/categories" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "slug": null,
  "parentId": null
}'
DELETE/catalog/categories
Auth requiredcatalog.categories.manage

Delete category

Deletes a category by id. Requires features: catalog.categories.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Category deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/catalog/categories" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/catalog/dictionaries/{key}
Auth requiredcatalog.products.manage

Get dictionary entries by key

Returns dictionary entries for a specific key (e.g., currency, unit). Requires features: catalog.products.manage

Parameters

NameInRequiredSchemaDescription
keypathYesstring

Responses

200Dictionary entries
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "entries": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": "string",
      "color": null,
      "icon": null
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/dictionaries/:key" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/catalog/offers
Auth requiredsales.channels.manage

List offers

Returns a paginated collection of offers scoped to the authenticated organization. Requires features: sales.channels.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
productIdqueryNostring
channelIdqueryNostring
channelIdsqueryNostring
idqueryNostring
searchqueryNostring
isActivequeryNostring
withDeletedqueryNoboolean
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated offers
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "productId": null,
      "organizationId": null,
      "tenantId": null,
      "channelId": null,
      "title": "string",
      "description": null,
      "defaultMediaId": null,
      "defaultMediaUrl": null,
      "localizedContent": null,
      "metadata": null,
      "isActive": null,
      "createdAt": null,
      "updatedAt": null,
      "product": null,
      "productChannelPrice": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/offers?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/catalog/offers
Auth requiredsales.channels.manage

Create offer

Creates a new offer linking a product to a sales channel. Requires features: sales.channels.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "channelId": "00000000-0000-4000-8000-000000000000",
  "title": "string",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "productId": "00000000-0000-4000-8000-000000000000"
}

Responses

201Offer created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/catalog/offers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "channelId": "00000000-0000-4000-8000-000000000000",
  "title": "string",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "productId": "00000000-0000-4000-8000-000000000000"
}'
PUT/catalog/offers
Auth requiredsales.channels.manage

Update offer

Updates an existing offer by id. Requires features: sales.channels.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "defaultMediaId": null,
  "defaultMediaUrl": null
}

Responses

200Offer updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/catalog/offers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "defaultMediaId": null,
  "defaultMediaUrl": null
}'
DELETE/catalog/offers
Auth requiredsales.channels.manage

Delete offer

Deletes an offer by id. Requires features: sales.channels.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Offer deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/catalog/offers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/catalog/option-schemas
Auth requiredcatalog.products.view

List option schemas

Returns a paginated collection of option schemas scoped to the authenticated organization. Requires features: catalog.products.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
idqueryNostring
searchqueryNostring
isActivequeryNostring
withDeletedqueryNoboolean

Responses

200Paginated option schemas
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "code": null,
      "description": null,
      "schema": null,
      "metadata": null,
      "is_active": null,
      "created_at": null,
      "updated_at": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/option-schemas?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/catalog/option-schemas
Auth requiredcatalog.settings.manage

Create option schema

Creates a new option schema template for product configurations. Requires features: catalog.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "schema": {
    "options": [
      {
        "code": "string",
        "label": "string",
        "inputType": "select"
      }
    ]
  }
}

Responses

201Option Schema created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/catalog/option-schemas" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "schema": {
    "options": [
      {
        "code": "string",
        "label": "string",
        "inputType": "select"
      }
    ]
  }
}'
PUT/catalog/option-schemas
Auth requiredcatalog.settings.manage

Update option schema

Updates an existing option schema by id. Requires features: catalog.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Option Schema updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/catalog/option-schemas" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/catalog/option-schemas
Auth requiredcatalog.settings.manage

Delete option schema

Deletes an option schema by id. Requires features: catalog.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Option Schema deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/catalog/option-schemas" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/catalog/price-kinds
Auth requiredcatalog.settings.manage

List price kinds

Returns a paginated collection of price kinds scoped to the authenticated organization. Requires features: catalog.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
isPromotionqueryNostring
isActivequeryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated price kinds
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "organization_id": null,
      "tenant_id": null,
      "code": "string",
      "title": "string",
      "display_mode": null,
      "currency_code": null,
      "is_promotion": null,
      "is_active": null,
      "created_at": null,
      "updated_at": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/price-kinds?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/catalog/price-kinds
Auth requiredcatalog.settings.manage

Create price kind

Creates a new price kind for categorizing product prices. Requires features: catalog.settings.manage

Request body (application/json)

{
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "code": "string",
  "title": "string",
  "displayMode": "excluding-tax"
}

Responses

201Price Kind created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/catalog/price-kinds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "code": "string",
  "title": "string",
  "displayMode": "excluding-tax"
}'
PUT/catalog/price-kinds
Auth requiredcatalog.settings.manage

Update price kind

Updates an existing price kind by id. Requires features: catalog.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "displayMode": "excluding-tax"
}

Responses

200Price Kind updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/catalog/price-kinds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "displayMode": "excluding-tax"
}'
DELETE/catalog/price-kinds
Auth requiredcatalog.settings.manage

Delete price kind

Deletes a price kind by id. Requires features: catalog.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Price Kind deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/catalog/price-kinds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/catalog/prices
Auth requiredcatalog.products.view

List prices

Returns a paginated collection of prices scoped to the authenticated organization. Requires features: catalog.products.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
productIdqueryNostring
variantIdqueryNostring
offerIdqueryNostring
channelIdqueryNostring
currencyCodequeryNostring
priceKindIdqueryNostring
kindqueryNostring
userIdqueryNostring
userGroupIdqueryNostring
customerIdqueryNostring
customerGroupIdqueryNostring
withDeletedqueryNoboolean
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated prices
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "product_id": null,
      "variant_id": null,
      "offer_id": null,
      "currency_code": null,
      "price_kind_id": null,
      "kind": null,
      "min_quantity": null,
      "max_quantity": null,
      "unit_price_net": null,
      "unit_price_gross": null,
      "tax_rate": null,
      "tax_amount": null,
      "channel_id": null,
      "user_id": null,
      "user_group_id": null,
      "customer_id": null,
      "customer_group_id": null,
      "metadata": null,
      "starts_at": null,
      "ends_at": null,
      "created_at": null,
      "updated_at": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/prices?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/catalog/prices
Auth requiredcatalog.pricing.manage

Create price

Creates a new price entry for a product or variant. Requires features: catalog.pricing.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "priceKindId": "00000000-0000-4000-8000-000000000000",
  "taxRateId": null
}

Responses

201Price created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/catalog/prices" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "priceKindId": "00000000-0000-4000-8000-000000000000",
  "taxRateId": null
}'
PUT/catalog/prices
Auth requiredcatalog.pricing.manage

Update price

Updates an existing price by id. Requires features: catalog.pricing.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "taxRateId": null
}

Responses

200Price updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/catalog/prices" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "taxRateId": null
}'
DELETE/catalog/prices
Auth requiredcatalog.pricing.manage

Delete price

Deletes a price by id. Requires features: catalog.pricing.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Price deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/catalog/prices" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/catalog/product-media
Auth requiredcatalog.products.view

List product media

Returns a list of media attachments for a specific product. Requires features: catalog.products.view

Parameters

NameInRequiredSchemaDescription
productIdqueryYesstring

Responses

200List of product media
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "fileName": "string",
      "url": "string",
      "thumbnailUrl": "string"
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/product-media?productId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/catalog/products
Auth requiredcatalog.products.view

List products

Returns a paginated collection of products scoped to the authenticated organization. Requires features: catalog.products.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
idqueryNostring
searchqueryNostring
statusqueryNostring
isActivequeryNostring
configurablequeryNostring
productTypequeryNostring
channelIdsqueryNostring
channelIdqueryNostring
categoryIdsqueryNostring
tagIdsqueryNostring
offerIdqueryNostring
userIdqueryNostring
userGroupIdqueryNostring
customerIdqueryNostring
customerGroupIdqueryNostring
quantityqueryNonumber
priceDatequeryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean
customFieldsetqueryNostring

Responses

200Paginated products
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "title": null,
      "subtitle": null,
      "description": null,
      "sku": null,
      "handle": null,
      "product_type": null,
      "status_entry_id": null,
      "primary_currency_code": null,
      "default_unit": null,
      "default_media_id": null,
      "default_media_url": null,
      "weight_value": null,
      "weight_unit": null,
      "dimensions": null,
      "is_configurable": null,
      "is_active": null,
      "metadata": null,
      "custom_fieldset_code": null,
      "option_schema_id": null,
      "created_at": null,
      "updated_at": null,
      "pricing": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/products?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/catalog/products
Auth requiredcatalog.products.manage

Create product

Creates a new product in the catalog. Requires features: catalog.products.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "title": "string",
  "taxRateId": null,
  "taxRate": null,
  "productType": "simple",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "weightValue": null,
  "weightUnit": null,
  "dimensions": null,
  "optionSchemaId": null,
  "customFieldsetCode": null
}

Responses

201Product created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/catalog/products" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "title": "string",
  "taxRateId": null,
  "taxRate": null,
  "productType": "simple",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "weightValue": null,
  "weightUnit": null,
  "dimensions": null,
  "optionSchemaId": null,
  "customFieldsetCode": null
}'
PUT/catalog/products
Auth requiredcatalog.products.manage

Update product

Updates an existing product by id. Requires features: catalog.products.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "taxRateId": null,
  "taxRate": null,
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "weightValue": null,
  "weightUnit": null,
  "dimensions": null,
  "optionSchemaId": null,
  "customFieldsetCode": null
}

Responses

200Product updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/catalog/products" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "taxRateId": null,
  "taxRate": null,
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "weightValue": null,
  "weightUnit": null,
  "dimensions": null,
  "optionSchemaId": null,
  "customFieldsetCode": null
}'
DELETE/catalog/products
Auth requiredcatalog.products.manage

Delete product

Deletes a product by id. Requires features: catalog.products.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Product deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/catalog/products" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/catalog/tags
Auth requiredcatalog.products.view

List product tags

Returns a paginated collection of product tags scoped to the authenticated organization. Requires features: catalog.products.view

Parameters

NameInRequiredSchemaDescription
searchqueryNostring
pagequeryNonumber
pageSizequeryNonumber

Responses

200Paginated product tags
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "label": "string",
      "slug": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/tags?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/catalog/variants
Auth requiredcatalog.products.view

List variants

Returns a paginated collection of variants scoped to the authenticated organization. Requires features: catalog.products.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
idqueryNostring
searchqueryNostring
productIdqueryNostring
skuqueryNostring
isActivequeryNostring
isDefaultqueryNostring
withDeletedqueryNoboolean
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated variants
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "product_id": null,
      "name": null,
      "sku": null,
      "barcode": null,
      "status_entry_id": null,
      "is_default": null,
      "is_active": null,
      "weight_value": null,
      "weight_unit": null,
      "dimensions": null,
      "metadata": null,
      "option_values": null,
      "custom_fieldset_code": null,
      "created_at": null,
      "updated_at": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/catalog/variants?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/catalog/variants
Auth requiredcatalog.variants.manage

Create variant

Creates a new product variant. Requires features: catalog.variants.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "productId": "00000000-0000-4000-8000-000000000000",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "taxRateId": null,
  "taxRate": null,
  "customFieldsetCode": null
}

Responses

201Variant created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/catalog/variants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "productId": "00000000-0000-4000-8000-000000000000",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "taxRateId": null,
  "taxRate": null,
  "customFieldsetCode": null
}'
PUT/catalog/variants
Auth requiredcatalog.variants.manage

Update variant

Updates an existing variant by id. Requires features: catalog.variants.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "taxRateId": null,
  "taxRate": null,
  "customFieldsetCode": null
}

Responses

200Variant updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/catalog/variants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "defaultMediaId": null,
  "defaultMediaUrl": null,
  "taxRateId": null,
  "taxRate": null,
  "customFieldsetCode": null
}'
DELETE/catalog/variants
Auth requiredcatalog.variants.manage

Delete variant

Deletes a variant by id. Requires features: catalog.variants.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Variant deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/catalog/variants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'

Customers

48 endpoints
GET/customers/activities
Auth requiredcustomers.activities.view

List activitys

Returns a paginated collection of activitys scoped to the authenticated organization. Requires features: customers.activities.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
entityIdqueryNostring
dealIdqueryNostring
activityTypequeryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated activitys
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "entityId": null,
      "dealId": null,
      "activityType": "string",
      "subject": null,
      "body": null,
      "occurredAt": null,
      "createdAt": null,
      "authorUserId": null,
      "organizationId": null,
      "tenantId": null,
      "activityTypeLabel": null,
      "authorName": null,
      "authorEmail": null,
      "appearanceIcon": null,
      "appearanceColor": null,
      "dealTitle": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/activities?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/activities
Auth requiredcustomers.activities.manage

Create activity

Creates a timeline activity linked to an entity or deal. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "activityType": "string",
  "appearanceIcon": null,
  "appearanceColor": null
}

Responses

201Activity created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/activities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "activityType": "string",
  "appearanceIcon": null,
  "appearanceColor": null
}'
PUT/customers/activities
Auth requiredcustomers.activities.manage

Update activity

Updates subject, body, scheduling, or custom fields for an existing activity. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "appearanceIcon": null,
  "appearanceColor": null
}

Responses

200Activity updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/activities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "appearanceIcon": null,
  "appearanceColor": null
}'
DELETE/customers/activities
Auth requiredcustomers.activities.manage

Delete activity

Deletes an activity identified by `id`. Accepts id via body or query string. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Activity deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/activities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/customers/addresses
Auth requiredcustomers.activities.view

List addresss

Returns a paginated collection of addresss scoped to the authenticated organization. Requires features: customers.activities.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
entityIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated addresss
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "entity_id": "00000000-0000-4000-8000-000000000000",
      "name": null,
      "purpose": null,
      "company_name": null,
      "address_line1": null,
      "address_line2": null,
      "building_number": null,
      "flat_number": null,
      "city": null,
      "region": null,
      "postal_code": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "is_primary": null,
      "organization_id": null,
      "tenant_id": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/addresses?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/addresses
Auth requiredcustomers.activities.manage

Create address

Creates a customer address record and associates it with the referenced entity. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "addressLine1": "string"
}

Responses

201Address created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/addresses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "addressLine1": "string"
}'
PUT/customers/addresses
Auth requiredcustomers.activities.manage

Update address

Updates fields on an existing customer address. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Address updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/addresses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/customers/addresses
Auth requiredcustomers.activities.manage

Delete address

Deletes an address by id. The identifier may be included in the body or query. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Address deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/addresses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/customers/comments
Auth requiredcustomers.activities.view

List comments

Returns a paginated collection of comments scoped to the authenticated organization. Requires features: customers.activities.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
entityIdqueryNostring
dealIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated comments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "entity_id": null,
      "deal_id": null,
      "body": null,
      "author_user_id": null,
      "appearance_icon": null,
      "appearance_color": null,
      "organization_id": null,
      "tenant_id": null,
      "created_at": null,
      "updated_at": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/comments?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/comments
Auth requiredcustomers.activities.manage

Create comment

Adds a comment to a customer timeline. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "body": "string",
  "appearanceIcon": null,
  "appearanceColor": null
}

Responses

201Comment created
Content-Type: application/json
{
  "id": null,
  "authorUserId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/comments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "body": "string",
  "appearanceIcon": null,
  "appearanceColor": null
}'
PUT/customers/comments
Auth requiredcustomers.activities.manage

Update comment

Updates an existing timeline comment. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "appearanceIcon": null,
  "appearanceColor": null
}

Responses

200Comment updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/comments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "appearanceIcon": null,
  "appearanceColor": null
}'
DELETE/customers/comments
Auth requiredcustomers.activities.manage

Delete comment

Deletes a comment identified by `id` supplied via body or query string. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Comment deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/comments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/customers/companies
Auth requiredcustomers.companies.view

List companies

Returns a paginated collection of companies scoped to the authenticated organization. Requires features: customers.companies.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
emailqueryNostring
emailStartsWithqueryNostring
emailContainsqueryNostring
sortFieldqueryNostring
sortDirqueryNostring
statusqueryNostring
lifecycleStagequeryNostring
sourcequeryNostring
hasEmailqueryNostring
hasPhonequeryNostring
hasNextInteractionqueryNostring
createdFromqueryNostring
createdToqueryNostring
idqueryNostring
tagIdsqueryNostring
tagIdsEmptyqueryNostring

Responses

200Paginated companies
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "description": null,
      "owner_user_id": null,
      "primary_email": null,
      "primary_phone": null,
      "status": null,
      "lifecycle_stage": null,
      "source": null,
      "next_interaction_at": null,
      "next_interaction_name": null,
      "next_interaction_ref_id": null,
      "next_interaction_icon": null,
      "next_interaction_color": null,
      "organization_id": null,
      "tenant_id": null,
      "created_at": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/companies?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/companies
Auth requiredcustomers.companies.manage

Create company

Creates a company record and associated profile data. Requires features: customers.companies.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "displayName": "string",
  "nextInteraction": null
}

Responses

201Company created
Content-Type: application/json
{
  "id": null,
  "companyId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/companies" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "displayName": "string",
  "nextInteraction": null
}'
PUT/customers/companies
Auth requiredcustomers.companies.manage

Update company

Updates company profile fields, tags, or custom attributes. Requires features: customers.companies.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "nextInteraction": null
}

Responses

200Company updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/companies" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "nextInteraction": null
}'
DELETE/customers/companies
Auth requiredcustomers.companies.manage

Delete company

Deletes a company by id. The identifier can be provided via body or query. Requires features: customers.companies.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Company deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/companies" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/customers/companies/{id}

Fetch company with related data

Returns a company customer record with optional related resources such as addresses, comments, activities, deals, todos, and linked people.

Parameters

NameInRequiredSchemaDescription
idpathYesstring
includequeryNostring

Responses

200Company detail payload
Content-Type: application/json
{
  "company": {
    "id": "00000000-0000-4000-8000-000000000000",
    "displayName": null,
    "description": null,
    "ownerUserId": null,
    "primaryEmail": null,
    "primaryPhone": null,
    "status": null,
    "lifecycleStage": null,
    "source": null,
    "nextInteractionAt": null,
    "nextInteractionName": null,
    "nextInteractionRefId": null,
    "nextInteractionIcon": null,
    "nextInteractionColor": null,
    "organizationId": null,
    "tenantId": null,
    "createdAt": "string",
    "updatedAt": "string"
  },
  "profile": null,
  "customFields": {},
  "tags": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "label": "string",
      "color": null
    }
  ],
  "addresses": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": null,
      "purpose": null,
      "addressLine1": null,
      "addressLine2": null,
      "buildingNumber": null,
      "flatNumber": null,
      "city": null,
      "region": null,
      "postalCode": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "isPrimary": null,
      "createdAt": "string"
    }
  ],
  "comments": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "body": null,
      "authorUserId": null,
      "authorName": null,
      "authorEmail": null,
      "dealId": null,
      "createdAt": "string",
      "appearanceIcon": null,
      "appearanceColor": null
    }
  ],
  "activities": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "activityType": "string",
      "subject": null,
      "body": null,
      "occurredAt": null,
      "dealId": null,
      "authorUserId": null,
      "authorName": null,
      "authorEmail": null,
      "createdAt": "string",
      "appearanceIcon": null,
      "appearanceColor": null
    }
  ],
  "deals": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "title": null,
      "status": null,
      "pipelineStage": null,
      "valueAmount": null,
      "valueCurrency": null,
      "probability": null,
      "expectedCloseAt": null,
      "ownerUserId": null,
      "source": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "todos": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "todoId": "00000000-0000-4000-8000-000000000000",
      "todoSource": "string",
      "createdAt": "string",
      "createdByUserId": null,
      "title": null,
      "isDone": null,
      "priority": null,
      "severity": null,
      "description": null,
      "dueAt": null,
      "todoOrganizationId": null,
      "customValues": null
    }
  ],
  "people": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "displayName": null,
      "primaryEmail": null,
      "primaryPhone": null,
      "status": null,
      "lifecycleStage": null,
      "jobTitle": null,
      "department": null,
      "createdAt": "string",
      "organizationId": null
    }
  ],
  "viewer": {
    "userId": null,
    "name": null,
    "email": null
  }
}
400Invalid identifier
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
403Forbidden for tenant/organization scope
Content-Type: application/json
{
  "error": "string"
}
404Company not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/companies/:id" \
  -H "Accept: application/json"
GET/customers/dashboard/widgets/customer-todos
Auth requireddashboards.viewcustomers.widgets.todos

Fetch recent customer todo links

Returns the most recently created todo links for display on dashboards. Requires features: dashboards.view, customers.widgets.todos

Parameters

NameInRequiredSchemaDescription
limitqueryNonumber
tenantIdqueryNostring
organizationIdqueryNostring

Responses

200Widget payload
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "todoId": "00000000-0000-4000-8000-000000000000",
      "todoSource": "string",
      "todoTitle": null,
      "createdAt": "string",
      "organizationId": null,
      "entity": {
        "id": null,
        "displayName": null,
        "kind": null,
        "ownerUserId": null
      }
    }
  ]
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}
500Widget failed to load
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/dashboard/widgets/customer-todos?limit=5" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/customers/dashboard/widgets/new-customers
Auth requireddashboards.viewcustomers.widgets.new-customers

Fetch recently created customers

Returns the latest customers created within the scoped tenant/organization for dashboard display. Requires features: dashboards.view, customers.widgets.new-customers

Parameters

NameInRequiredSchemaDescription
limitqueryNonumber
tenantIdqueryNostring
organizationIdqueryNostring
kindqueryNostring

Responses

200Widget payload
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "displayName": null,
      "kind": null,
      "organizationId": null,
      "createdAt": "string",
      "ownerUserId": null
    }
  ]
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}
500Widget failed to load
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/dashboard/widgets/new-customers?limit=5" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/customers/dashboard/widgets/next-interactions
Auth requireddashboards.viewcustomers.widgets.next-interactions

Fetch upcoming customer interactions

Lists upcoming (or optionally past) customer interaction reminders ordered by interaction date. Requires features: dashboards.view, customers.widgets.next-interactions

Parameters

NameInRequiredSchemaDescription
limitqueryNonumber
tenantIdqueryNostring
organizationIdqueryNostring
includePastqueryNostring

Responses

200Widget payload
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "displayName": null,
      "kind": null,
      "organizationId": null,
      "nextInteractionAt": null,
      "nextInteractionName": null,
      "nextInteractionIcon": null,
      "nextInteractionColor": null,
      "ownerUserId": null
    }
  ],
  "now": "string"
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}
500Widget failed to load
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/dashboard/widgets/next-interactions?limit=5" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/customers/deals
Auth requiredcustomers.deals.view

List deals

Returns a paginated collection of deals scoped to the authenticated organization. Requires features: customers.deals.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
statusqueryNostring
pipelineStagequeryNostring
sortFieldqueryNostring
sortDirqueryNostring
personEntityIdqueryNostring
companyEntityIdqueryNostring

Responses

200Paginated deals
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "title": null,
      "description": null,
      "status": null,
      "pipeline_stage": null,
      "value_amount": null,
      "value_currency": null,
      "probability": null,
      "expected_close_at": null,
      "owner_user_id": null,
      "source": null,
      "organization_id": null,
      "tenant_id": null,
      "created_at": null,
      "updated_at": null,
      "organizationId": null,
      "tenantId": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/deals?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/deals
Auth requiredcustomers.deals.manage

Create deal

Creates a sales deal, optionally associating people and companies. Requires features: customers.deals.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "title": "string"
}

Responses

201Deal created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/deals" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "title": "string"
}'
PUT/customers/deals
Auth requiredcustomers.deals.manage

Update deal

Updates pipeline position, metadata, or associations for an existing deal. Requires features: customers.deals.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Deal updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/deals" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/customers/deals
Auth requiredcustomers.deals.manage

Delete deal

Deletes a deal by `id`. The identifier may be provided in the body or query parameters. Requires features: customers.deals.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Deal deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/deals" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/customers/deals/{id}

Fetch deal with associations

Returns a deal with linked people, companies, custom fields, and viewer context.

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Deal detail payload
Content-Type: application/json
{
  "deal": {
    "id": "00000000-0000-4000-8000-000000000000",
    "title": null,
    "description": null,
    "status": null,
    "pipelineStage": null,
    "valueAmount": null,
    "valueCurrency": null,
    "probability": null,
    "expectedCloseAt": null,
    "ownerUserId": null,
    "source": null,
    "organizationId": null,
    "tenantId": null,
    "createdAt": "string",
    "updatedAt": "string"
  },
  "people": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "label": "string",
      "subtitle": null,
      "kind": "person"
    }
  ],
  "companies": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "label": "string",
      "subtitle": null,
      "kind": "company"
    }
  ],
  "customFields": {},
  "viewer": {
    "userId": null,
    "name": null,
    "email": null
  }
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
403Forbidden for tenant/organization scope
Content-Type: application/json
{
  "error": "string"
}
404Deal not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/deals/:id" \
  -H "Accept: application/json"
GET/customers/dictionaries/currency
Auth requiredcustomers.people.view

Resolve currency dictionary

Returns the active currency dictionary for the current organization scope, falling back to shared entries when required. Requires features: customers.people.view

Responses

200Currency dictionary entries
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "entries": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": null
    }
  ]
}
404Currency dictionary missing
Content-Type: application/json
{
  "error": "string"
}
500Unexpected error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/dictionaries/currency" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/customers/dictionaries/{kind}
Auth requiredcustomers.people.view

List dictionary entries

Returns the merged dictionary entries for the requested kind, including inherited values. Requires features: customers.people.view

Parameters

NameInRequiredSchemaDescription
kindpathYesstring

Responses

200Dictionary entries
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": null,
      "color": null,
      "icon": null,
      "organizationId": null
    }
  ]
}
400Failed to resolve dictionary context
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/dictionaries/:kind" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/dictionaries/{kind}
Auth requiredcustomers.settings.manage

Create or override dictionary entry

Creates a dictionary entry (or updates the existing entry for the same value) within the current organization scope. Requires features: customers.settings.manage

Parameters

NameInRequiredSchemaDescription
kindpathYesstring

Request body (application/json)

{
  "value": "string"
}

Responses

200Dictionary entry updated
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "label": null,
  "color": null,
  "icon": null,
  "organizationId": null
}
201Dictionary entry created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "label": null,
  "color": null,
  "icon": null,
  "organizationId": null
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
409Duplicate value conflict
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/dictionaries/:kind" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "value": "string"
}'
PATCH/customers/dictionaries/{kind}/{id}
Auth requiredcustomers.settings.manage

Update dictionary entry

Updates value, label, color, or icon for an existing customer dictionary entry. Requires features: customers.settings.manage

Parameters

NameInRequiredSchemaDescription
kindpathYesstring
idpathYesstring

Request body (application/json)

{}

Responses

200Updated dictionary entry
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "label": null,
  "color": null,
  "icon": null,
  "organizationId": null
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Entry not found
Content-Type: application/json
{
  "error": "string"
}
409Duplicate value conflict
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PATCH "https://open-mercato.dogtronic.biz/api/customers/dictionaries/:kind/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/customers/dictionaries/{kind}/{id}
Auth requiredcustomers.settings.manage

Delete dictionary entry

Removes a customer dictionary entry by identifier. Requires features: customers.settings.manage

Parameters

NameInRequiredSchemaDescription
kindpathYesstring
idpathYesstring

Responses

200Entry deleted
Content-Type: application/json
{
  "success": true
}
404Entry not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/dictionaries/:kind/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/customers/people
Auth requiredcustomers.people.view

List people

Returns a paginated collection of people scoped to the authenticated organization. Requires features: customers.people.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
emailqueryNostring
emailStartsWithqueryNostring
emailContainsqueryNostring
statusqueryNostring
lifecycleStagequeryNostring
sourcequeryNostring
hasEmailqueryNostring
hasPhonequeryNostring
hasNextInteractionqueryNostring
createdFromqueryNostring
createdToqueryNostring
sortFieldqueryNostring
sortDirqueryNostring
idqueryNostring
tagIdsqueryNostring
tagIdsEmptyqueryNostring

Responses

200Paginated people
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "description": null,
      "owner_user_id": null,
      "primary_email": null,
      "primary_phone": null,
      "status": null,
      "lifecycle_stage": null,
      "source": null,
      "next_interaction_at": null,
      "next_interaction_name": null,
      "next_interaction_ref_id": null,
      "next_interaction_icon": null,
      "next_interaction_color": null,
      "organization_id": null,
      "tenant_id": null,
      "created_at": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/people?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/people
Auth requiredcustomers.people.manage

Create person

Creates a person contact using scoped organization and tenant identifiers. Requires features: customers.people.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "nextInteraction": null,
  "firstName": "string",
  "lastName": "string",
  "companyEntityId": null
}

Responses

201Person created
Content-Type: application/json
{
  "id": null,
  "personId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/people" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "nextInteraction": null,
  "firstName": "string",
  "lastName": "string",
  "companyEntityId": null
}'
PUT/customers/people
Auth requiredcustomers.people.manage

Update person

Updates contact details or custom fields for a person. Requires features: customers.people.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "nextInteraction": null,
  "companyEntityId": null
}

Responses

200Person updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/people" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "nextInteraction": null,
  "companyEntityId": null
}'
DELETE/customers/people
Auth requiredcustomers.people.manage

Delete person

Deletes a person by id. Request body or query may provide the identifier. Requires features: customers.people.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Person deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/people" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/customers/people/check-phone
Auth requiredcustomers.people.view

Find person by phone digits

Performs an exact digits comparison (stripping non-numeric characters) to determine whether a customer contact matches the provided phone fragment. Requires features: customers.people.view

Parameters

NameInRequiredSchemaDescription
digitsqueryYesany

Responses

200Matching contact (if any)
Content-Type: application/json
{
  "match": null
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/people/check-phone" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/customers/people/{id}

Fetch person with related data

Returns a person customer record with optional related resources such as addresses, comments, activities, deals, and todos.

Parameters

NameInRequiredSchemaDescription
idpathYesstring
includequeryNostring

Responses

200Person detail payload
Content-Type: application/json
{
  "person": {
    "id": "00000000-0000-4000-8000-000000000000",
    "displayName": null,
    "description": null,
    "ownerUserId": null,
    "primaryEmail": null,
    "primaryPhone": null,
    "status": null,
    "lifecycleStage": null,
    "source": null,
    "nextInteractionAt": null,
    "nextInteractionName": null,
    "nextInteractionRefId": null,
    "nextInteractionIcon": null,
    "nextInteractionColor": null,
    "organizationId": null,
    "tenantId": null,
    "createdAt": "string",
    "updatedAt": "string"
  },
  "profile": null,
  "customFields": {},
  "tags": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "label": "string",
      "color": null
    }
  ],
  "addresses": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": null,
      "purpose": null,
      "addressLine1": null,
      "addressLine2": null,
      "buildingNumber": null,
      "flatNumber": null,
      "city": null,
      "region": null,
      "postalCode": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "isPrimary": null,
      "createdAt": "string"
    }
  ],
  "comments": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "body": null,
      "authorUserId": null,
      "authorName": null,
      "authorEmail": null,
      "dealId": null,
      "createdAt": "string",
      "appearanceIcon": null,
      "appearanceColor": null
    }
  ],
  "activities": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "activityType": "string",
      "subject": null,
      "body": null,
      "occurredAt": null,
      "dealId": null,
      "authorUserId": null,
      "authorName": null,
      "authorEmail": null,
      "createdAt": "string",
      "appearanceIcon": null,
      "appearanceColor": null
    }
  ],
  "deals": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "title": null,
      "status": null,
      "pipelineStage": null,
      "valueAmount": null,
      "valueCurrency": null,
      "probability": null,
      "expectedCloseAt": null,
      "ownerUserId": null,
      "source": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "todos": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "todoId": "00000000-0000-4000-8000-000000000000",
      "todoSource": "string",
      "createdAt": "string",
      "createdByUserId": null,
      "title": null,
      "isDone": null,
      "priority": null,
      "severity": null,
      "description": null,
      "dueAt": null,
      "todoOrganizationId": null,
      "customValues": null
    }
  ],
  "viewer": {
    "userId": null,
    "name": null,
    "email": null
  }
}
400Invalid identifier
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
403Forbidden for tenant/organization scope
Content-Type: application/json
{
  "error": "string"
}
404Person not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/people/:id" \
  -H "Accept: application/json"
GET/customers/settings/address-format
Auth requiredcustomers.settings.manage

Retrieve address format

Returns the current address formatting preference for the selected organization. Requires features: customers.settings.manage

Responses

200Current address format
Content-Type: application/json
{
  "addressFormat": "string"
}
400Organization context missing
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/settings/address-format" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/customers/settings/address-format
Auth requiredcustomers.settings.manage

Update address format

Updates the address format preference for the selected organization. Requires features: customers.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "addressFormat": "line_first"
}

Responses

200Updated address format
Content-Type: application/json
{
  "addressFormat": "string"
}
400Invalid payload or organization context
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/settings/address-format" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "addressFormat": "line_first"
}'
GET/customers/tags
Auth requiredcustomers.activities.view

List tags

Returns a paginated collection of tags scoped to the authenticated organization. Requires features: customers.activities.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated tags
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "slug": "string",
      "label": "string",
      "color": null,
      "description": null,
      "organization_id": null,
      "tenant_id": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/tags?page=1&pageSize=100" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/tags
Auth requiredcustomers.activities.manage

Create tag

Creates a tag scoped to the current tenant and organization. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "slug": "string",
  "label": "string"
}

Responses

201Tag created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/tags" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "slug": "string",
  "label": "string"
}'
PUT/customers/tags
Auth requiredcustomers.activities.manage

Update tag

Updates label, color, or description for an existing tag. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Tag updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/tags" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/customers/tags
Auth requiredcustomers.activities.manage

Delete tag

Deletes a tag identified by `id`. The identifier may be provided via body or query string. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Tag deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/tags" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
POST/customers/tags/assign
Auth requiredcustomers.activities.manage

Assign tag to customer entity

Links a tag to a customer entity within the validated tenant / organization scope. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "tagId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000"
}

Responses

201Tag assigned to customer
Content-Type: application/json
{
  "id": null
}
400Validation or assignment failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/tags/assign" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "tagId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000"
}'
POST/customers/tags/unassign
Auth requiredcustomers.activities.manage

Remove tag from customer entity

Detaches a tag from a customer entity within the validated tenant / organization scope. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "tagId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Tag unassigned from customer
Content-Type: application/json
{
  "id": null
}
400Validation or unassignment failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/tags/unassign" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "tagId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000"
}'
GET/customers/todos
Auth requiredcustomers.activities.view

List todos linked to customers

Returns paginated todo link entries filtered by completion, search term, or entity. Requires features: customers.activities.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
isDonequeryNostring
organizationIdqueryNostring
entityIdqueryNostring

Responses

200Paginated todo links
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "todoId": "00000000-0000-4000-8000-000000000000",
      "todoSource": "string",
      "todoTitle": null,
      "todoIsDone": null,
      "todoPriority": null,
      "todoSeverity": null,
      "todoDescription": null,
      "todoDueAt": null,
      "todoCustomValues": null,
      "todoOrganizationId": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "customer": {
        "id": null,
        "displayName": null,
        "kind": null
      }
    }
  ],
  "total": 1,
  "totalPages": 1
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}
500Unexpected error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/customers/todos?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/todos
Auth requiredcustomers.activities.manage

Create todo and link to customer

Creates a new todo (via the configured source entity) and links it to the specified customer record. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "title": "string",
  "todoSource": "example:todo"
}

Responses

201Todo created and linked
Content-Type: application/json
{
  "todoId": null,
  "linkId": null
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/customers/todos" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "title": "string",
  "todoSource": "example:todo"
}'
PUT/customers/todos
Auth requiredcustomers.activities.manage

Link existing todo to customer

Links an existing todo record to a customer entity within the allowed scope. Requires features: customers.activities.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "todoId": "00000000-0000-4000-8000-000000000000",
  "todoSource": "example:todo"
}

Responses

200Todo linked
Content-Type: application/json
{
  "linkId": null
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/customers/todos" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "entityId": "00000000-0000-4000-8000-000000000000",
  "todoId": "00000000-0000-4000-8000-000000000000",
  "todoSource": "example:todo"
}'
DELETE/customers/todos
Auth requiredcustomers.activities.manage

Unlink todo from customer

Removes the association between a todo and the specified customer. Requires features: customers.activities.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Todo unlinked
Content-Type: application/json
{
  "linkId": null
}
400Invalid request or missing link id
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/customers/todos" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'

Dashboards

8 endpoints
GET/dashboards/layout
Auth requireddashboards.view

Load the current dashboard layout

Returns the saved widget layout together with the widgets the current user is allowed to place. Requires features: dashboards.view

Responses

200Current dashboard layout and available widgets.
Content-Type: application/json
{
  "layout": {
    "items": [
      {
        "id": "00000000-0000-4000-8000-000000000000",
        "widgetId": "string",
        "order": 1
      }
    ]
  },
  "allowedWidgetIds": [
    "string"
  ],
  "canConfigure": true,
  "context": {
    "userId": "00000000-0000-4000-8000-000000000000",
    "tenantId": null,
    "organizationId": null,
    "userName": null,
    "userEmail": null,
    "userLabel": "string"
  },
  "widgets": [
    {
      "id": "string",
      "title": "string",
      "description": null,
      "defaultSize": "sm",
      "defaultEnabled": true,
      "defaultSettings": null,
      "features": [
        "string"
      ],
      "moduleId": "string",
      "icon": null,
      "loaderKey": "string",
      "supportsRefresh": true
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/dashboards/layout" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/dashboards/layout
Auth requireddashboards.configure

Persist dashboard layout changes

Saves the provided widget ordering, sizes, and settings for the current user. Requires features: dashboards.configure

Request body (application/json)

{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "widgetId": "string",
      "order": 1
    }
  ]
}

Responses

200Layout updated successfully.
Content-Type: application/json
{
  "ok": true
}
400Invalid layout payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/dashboards/layout" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "widgetId": "string",
      "order": 1
    }
  ]
}'
PATCH/dashboards/layout/{itemId}
Auth requireddashboards.configure

Update a dashboard layout item

Adjusts the size or settings for a single widget within the dashboard layout. Requires features: dashboards.configure

Parameters

NameInRequiredSchemaDescription
itemIdpathYesstring

Request body (application/json)

{}

Responses

200Layout item updated.
Content-Type: application/json
{
  "ok": true
}
400Invalid payload or missing item id
Content-Type: application/json
{
  "error": "string"
}
404Item not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PATCH "https://open-mercato.dogtronic.biz/api/dashboards/layout/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
GET/dashboards/roles/widgets
Auth requireddashboards.admin.assign-widgets

Fetch widget assignments for a role

Returns the widgets explicitly assigned to the given role together with the evaluation scope. Requires features: dashboards.admin.assign-widgets

Parameters

NameInRequiredSchemaDescription
roleIdqueryYesstring
tenantIdqueryNostring
organizationIdqueryNostring

Responses

200Current widget configuration for the role.
Content-Type: application/json
{
  "widgetIds": [
    "string"
  ],
  "hasCustom": true,
  "scope": {
    "tenantId": null,
    "organizationId": null
  }
}
400Missing role identifier
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/dashboards/roles/widgets?roleId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/dashboards/roles/widgets
Auth requireddashboards.admin.assign-widgets

Update widgets assigned to a role

Persists the widget list for a role within the provided tenant and organization scope. Requires features: dashboards.admin.assign-widgets

Request body (application/json)

{
  "roleId": "00000000-0000-4000-8000-000000000000",
  "tenantId": null,
  "organizationId": null,
  "widgetIds": [
    "string"
  ]
}

Responses

200Widgets updated successfully.
Content-Type: application/json
{
  "ok": true,
  "widgetIds": [
    "string"
  ]
}
400Invalid payload or unknown widgets
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/dashboards/roles/widgets" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "roleId": "00000000-0000-4000-8000-000000000000",
  "tenantId": null,
  "organizationId": null,
  "widgetIds": [
    "string"
  ]
}'
GET/dashboards/users/widgets
Auth requireddashboards.admin.assign-widgets

Read widget overrides for a user

Returns the widgets inherited and explicitly configured for the requested user within the current scope. Requires features: dashboards.admin.assign-widgets

Parameters

NameInRequiredSchemaDescription
userIdqueryYesstring
tenantIdqueryNostring
organizationIdqueryNostring

Responses

200Widget settings for the user.
Content-Type: application/json
{
  "mode": "inherit",
  "widgetIds": [
    "string"
  ],
  "hasCustom": true,
  "effectiveWidgetIds": [
    "string"
  ],
  "scope": {
    "tenantId": null,
    "organizationId": null
  }
}
400Missing user identifier
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/dashboards/users/widgets?userId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/dashboards/users/widgets
Auth requireddashboards.admin.assign-widgets

Update user-specific dashboard widgets

Sets the widget override mode and allowed widgets for a user. Passing `mode: inherit` clears overrides. Requires features: dashboards.admin.assign-widgets

Request body (application/json)

{
  "userId": "00000000-0000-4000-8000-000000000000",
  "tenantId": null,
  "organizationId": null,
  "mode": "inherit",
  "widgetIds": [
    "string"
  ]
}

Responses

200Overrides saved.
Content-Type: application/json
{
  "ok": true,
  "mode": "inherit",
  "widgetIds": [
    "string"
  ]
}
400Invalid payload or unknown widgets
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/dashboards/users/widgets" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "userId": "00000000-0000-4000-8000-000000000000",
  "tenantId": null,
  "organizationId": null,
  "mode": "inherit",
  "widgetIds": [
    "string"
  ]
}'
GET/dashboards/widgets/catalog
Auth requireddashboards.admin.assign-widgets

List available dashboard widgets

Returns the catalog of widgets that modules expose, including defaults and feature requirements. Requires features: dashboards.admin.assign-widgets

Responses

200Widgets available for assignment.
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "title": "string",
      "description": null,
      "defaultSize": "sm",
      "defaultEnabled": true,
      "defaultSettings": null,
      "features": [
        "string"
      ],
      "moduleId": "string",
      "icon": null,
      "loaderKey": "string",
      "supportsRefresh": true
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/dashboards/widgets/catalog" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Dictionaries

9 endpoints
GET/dictionaries
Auth requireddictionaries.view

List dictionaries

Returns dictionaries accessible to the current organization, optionally including inactive records. Requires features: dictionaries.view

Parameters

NameInRequiredSchemaDescription
includeInactivequeryNostring

Responses

200Dictionary collection.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "key": "string",
      "name": "string",
      "description": null,
      "isSystem": true,
      "isActive": true,
      "managerVisibility": null,
      "organizationId": null,
      "createdAt": "string",
      "updatedAt": null
    }
  ]
}
500Failed to load dictionaries
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/dictionaries" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/dictionaries
Auth requireddictionaries.manage

Create dictionary

Registers a dictionary scoped to the current organization. Requires features: dictionaries.manage

Request body (application/json)

{
  "key": "string",
  "name": "string"
}

Responses

201Dictionary created.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "key": "string",
  "name": "string",
  "description": null,
  "isSystem": true,
  "isActive": true,
  "managerVisibility": null,
  "organizationId": null,
  "createdAt": "string",
  "updatedAt": null
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}
409Dictionary key already exists
Content-Type: application/json
{
  "error": "string"
}
500Failed to create dictionary
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/dictionaries" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "key": "string",
  "name": "string"
}'
GET/dictionaries/{dictionaryId}
Auth requireddictionaries.view

Get dictionary

Returns details for the specified dictionary, including inheritance flags. Requires features: dictionaries.view

Parameters

NameInRequiredSchemaDescription
dictionaryIdpathYesstring

Responses

200Dictionary details.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "key": "string",
  "name": "string",
  "description": null,
  "isSystem": true,
  "isActive": true,
  "managerVisibility": null,
  "organizationId": null,
  "createdAt": "string",
  "updatedAt": null
}
400Invalid parameters
Content-Type: application/json
{
  "error": "string"
}
404Dictionary not found
Content-Type: application/json
{
  "error": "string"
}
500Failed to load dictionary
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/dictionaries/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PATCH/dictionaries/{dictionaryId}
Auth requireddictionaries.manage

Update dictionary

Updates mutable attributes of the dictionary. Currency dictionaries are protected from modification. Requires features: dictionaries.manage

Parameters

NameInRequiredSchemaDescription
dictionaryIdpathYesstring

Request body (application/json)

{}

Responses

200Dictionary updated.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "key": "string",
  "name": "string",
  "description": null,
  "isSystem": true,
  "isActive": true,
  "managerVisibility": null,
  "organizationId": null,
  "createdAt": "string",
  "updatedAt": null
}
400Validation failed or protected dictionary
Content-Type: application/json
{
  "error": "string"
}
404Dictionary not found
Content-Type: application/json
{
  "error": "string"
}
409Dictionary key already exists
Content-Type: application/json
{
  "error": "string"
}
500Failed to update dictionary
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PATCH "https://open-mercato.dogtronic.biz/api/dictionaries/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/dictionaries/{dictionaryId}
Auth requireddictionaries.manage

Delete dictionary

Soft deletes the dictionary unless it is the protected currency dictionary. Requires features: dictionaries.manage

Parameters

NameInRequiredSchemaDescription
dictionaryIdpathYesstring

Responses

200Dictionary archived.
Content-Type: application/json
{
  "ok": true
}
400Protected dictionary cannot be deleted
Content-Type: application/json
{
  "error": "string"
}
404Dictionary not found
Content-Type: application/json
{
  "error": "string"
}
500Failed to delete dictionary
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/dictionaries/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/dictionaries/{dictionaryId}/entries
Auth requireddictionaries.view

List dictionary entries

Returns entries for the specified dictionary ordered alphabetically. Requires features: dictionaries.view

Parameters

NameInRequiredSchemaDescription
dictionaryIdpathYesstring

Responses

200Dictionary entries.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": "string",
      "color": null,
      "icon": null,
      "createdAt": "string",
      "updatedAt": null
    }
  ]
}
400Invalid parameters
Content-Type: application/json
{
  "error": "string"
}
404Dictionary not found
Content-Type: application/json
{
  "error": "string"
}
500Failed to load dictionary entries
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/dictionaries/00000000-0000-4000-8000-000000000000/entries" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/dictionaries/{dictionaryId}/entries
Auth requireddictionaries.manage

Create dictionary entry

Creates a new entry in the specified dictionary. Requires features: dictionaries.manage

Parameters

NameInRequiredSchemaDescription
dictionaryIdpathYesstring

Request body (application/json)

{
  "value": "string",
  "color": null,
  "icon": null
}

Responses

201Dictionary entry created.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "label": "string",
  "color": null,
  "icon": null,
  "createdAt": "string",
  "updatedAt": null
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}
404Dictionary not found
Content-Type: application/json
{
  "error": "string"
}
500Failed to create dictionary entry
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/dictionaries/00000000-0000-4000-8000-000000000000/entries" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "value": "string",
  "color": null,
  "icon": null
}'
PATCH/dictionaries/{dictionaryId}/entries/{entryId}
Auth requireddictionaries.manage

Update dictionary entry

Updates the specified dictionary entry using the command bus pipeline. Requires features: dictionaries.manage

Parameters

NameInRequiredSchemaDescription
dictionaryIdpathYesstring
entryIdpathYesstring

Request body (application/json)

{
  "color": null,
  "icon": null
}

Responses

200Dictionary entry updated.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "label": "string",
  "color": null,
  "icon": null,
  "createdAt": "string",
  "updatedAt": null
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}
404Dictionary or entry not found
Content-Type: application/json
{
  "error": "string"
}
500Failed to update entry
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PATCH "https://open-mercato.dogtronic.biz/api/dictionaries/00000000-0000-4000-8000-000000000000/entries/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "color": null,
  "icon": null
}'
DELETE/dictionaries/{dictionaryId}/entries/{entryId}
Auth requireddictionaries.manage

Delete dictionary entry

Deletes the specified dictionary entry via the command bus. Requires features: dictionaries.manage

Parameters

NameInRequiredSchemaDescription
dictionaryIdpathYesstring
entryIdpathYesstring

Responses

200Entry deleted.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}
404Dictionary or entry not found
Content-Type: application/json
{
  "error": "string"
}
500Failed to delete entry
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/dictionaries/00000000-0000-4000-8000-000000000000/entries/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Directory

9 endpoints
GET/directory/organization-switcher
Auth required

Load organization switcher menu

Returns the hierarchical menu of organizations the current user may switch to within the active tenant.

Responses

200Organization switcher payload.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "depth": 1,
      "selectable": true,
      "children": []
    }
  ],
  "selectedId": null,
  "canManage": true,
  "tenantId": null,
  "tenants": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "isActive": true
    }
  ],
  "isSuperAdmin": true
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/directory/organization-switcher" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/directory/organizations
Auth requireddirectory.organizations.view

List organizations

Returns organizations using options, tree, or paginated manage view depending on the `view` parameter. Requires features: directory.organizations.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
viewqueryNostring
idsqueryNostring
tenantIdqueryNostring
includeInactivequeryNostring
statusqueryNostring

Responses

200Organization data for the requested view.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "parentId": null,
      "parentName": null,
      "tenantId": null,
      "tenantName": null,
      "rootId": null,
      "treePath": null
    }
  ]
}
400Invalid query or tenant scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/directory/organizations?page=1&pageSize=50&view=options" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/directory/organizations
Auth requireddirectory.organizations.manage

Create organization

Creates a new organization within a tenant and optionally assigns hierarchy relationships. Requires features: directory.organizations.manage

Request body (application/json)

{
  "name": "string",
  "parentId": null
}

Responses

201Organization created.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/directory/organizations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "parentId": null
}'
PUT/directory/organizations
Auth requireddirectory.organizations.manage

Update organization

Updates organization details and hierarchy assignments. Requires features: directory.organizations.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "parentId": null
}

Responses

200Organization updated.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/directory/organizations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "parentId": null
}'
DELETE/directory/organizations
Auth requireddirectory.organizations.manage

Delete organization

Soft deletes an organization identified by id. Requires features: directory.organizations.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Organization deleted.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/directory/organizations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/directory/tenants
Auth requireddirectory.tenants.view

List tenants

Returns tenants visible to the current user with optional search and pagination. Requires features: directory.tenants.view

Parameters

NameInRequiredSchemaDescription
idqueryNostring
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring
isActivequeryNostring

Responses

200Paged list of tenants.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "isActive": true,
      "createdAt": null,
      "updatedAt": null
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/directory/tenants?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/directory/tenants
Auth requireddirectory.tenants.manage

Create tenant

Creates a new tenant and returns its identifier. Requires features: directory.tenants.manage

Request body (application/json)

{
  "name": "string"
}

Responses

201Tenant created.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/directory/tenants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string"
}'
PUT/directory/tenants
Auth requireddirectory.tenants.manage

Update tenant

Updates tenant properties such as name or activation state. Requires features: directory.tenants.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Tenant updated.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/directory/tenants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/directory/tenants
Auth requireddirectory.tenants.manage

Delete tenant

Soft deletes the tenant identified by id. Requires features: directory.tenants.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Tenant removed.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/directory/tenants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'

Entities

15 endpoints
GET/entities/definitions
Auth required

List active custom field definitions

Returns active custom field definitions for the supplied entity ids, respecting tenant scope and tombstones.

Parameters

NameInRequiredSchemaDescription
entityIdqueryNoany
entityIdsqueryNostring
fieldsetqueryNostring

Responses

200Definition list
Content-Type: application/json
{
  "items": [
    {
      "key": "string",
      "kind": "string",
      "label": "string",
      "entityId": "string"
    }
  ]
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/entities/definitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/definitions
Auth requiredentities.definitions.manage

Upsert custom field definition

Creates or updates a custom field definition for the current tenant/org scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "key": "string",
  "kind": "text"
}

Responses

200Definition saved
Content-Type: application/json
{
  "ok": true,
  "item": {
    "id": "00000000-0000-4000-8000-000000000000",
    "key": "string",
    "kind": "string",
    "configJson": {}
  }
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/entities/definitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "key": "string",
  "kind": "text"
}'
DELETE/entities/definitions
Auth requiredentities.definitions.manage

Soft delete custom field definition

Marks the specified definition inactive and tombstones it for the current scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "key": "string"
}

Responses

200Definition deleted
Content-Type: application/json
{
  "ok": true
}
400Missing entity id or key
Content-Type: application/json
{
  "error": "string"
}
404Definition not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/entities/definitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "key": "string"
}'
POST/entities/definitions.batch
Auth requiredentities.definitions.manage

Save multiple custom field definitions

Creates or updates multiple definitions for a single entity in one transaction. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "definitions": [
    {
      "key": "string",
      "kind": "text"
    }
  ]
}

Responses

200Definitions saved
Content-Type: application/json
{
  "ok": true
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/entities/definitions.batch" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "definitions": [
    {
      "key": "string",
      "kind": "text"
    }
  ]
}'
GET/entities/definitions.manage
Auth requiredentities.definitions.manage

Get management snapshot

Returns scoped custom field definitions (including inactive tombstones) for administration interfaces. Requires features: entities.definitions.manage

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesstring

Responses

200Scoped definitions and deleted keys
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "key": "string",
      "kind": "string",
      "configJson": null,
      "organizationId": null,
      "tenantId": null
    }
  ],
  "deletedKeys": [
    "string"
  ]
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/entities/definitions.manage?entityId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/definitions.restore
Auth requiredentities.definitions.manage

Restore definition

Reactivates a previously soft-deleted definition within the current tenant/org scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "key": "string"
}

Responses

200Definition restored
Content-Type: application/json
{
  "ok": true
}
400Missing entity id or key
Content-Type: application/json
{
  "error": "string"
}
404Definition not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/entities/definitions.restore" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "key": "string"
}'
GET/entities/entities
Auth required

List available entities

Returns generated and custom entities scoped to the caller with field counts per entity.

Responses

200List of entities
Content-Type: application/json
{
  "items": [
    {
      "entityId": "string",
      "source": "code",
      "label": "string",
      "count": 1
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/entities/entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/entities
Auth requiredentities.definitions.manage

Upsert custom entity

Creates or updates a tenant/org scoped custom entity definition. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "label": "string",
  "description": null,
  "showInSidebar": false
}

Responses

200Entity saved
Content-Type: application/json
{
  "ok": true,
  "item": {
    "id": "00000000-0000-4000-8000-000000000000",
    "entityId": "string",
    "label": "string"
  }
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/entities/entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "label": "string",
  "description": null,
  "showInSidebar": false
}'
DELETE/entities/entities
Auth requiredentities.definitions.manage

Soft delete custom entity

Marks the specified custom entity inactive within the current scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string"
}

Responses

200Entity deleted
Content-Type: application/json
{
  "ok": true
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}
404Entity not found in scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/entities/entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string"
}'
GET/entities/records
Auth requiredentities.records.view

List records

Returns paginated records for the supplied entity. Supports custom field filters, exports, and soft-delete toggles. Requires features: entities.records.view

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesstring
pagequeryNonumber
pageSizequeryNonumber
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean
formatqueryNostring
exportScopequeryNostring
export_scopequeryNostring
allqueryNoboolean
fullqueryNoboolean

Responses

200Paginated records
Content-Type: application/json
{
  "items": [
    {}
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/entities/records?entityId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/records
Auth requiredentities.records.manage

Create record

Creates a record for the given entity. When `recordId` is omitted or not a UUID the data engine will generate one automatically. Requires features: entities.records.manage

Request body (application/json)

{
  "entityId": "string",
  "values": {}
}

Responses

200Record created
Content-Type: application/json
{
  "ok": true
}
400Validation failure
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/entities/records" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "values": {}
}'
PUT/entities/records
Auth requiredentities.records.manage

Update record

Updates an existing record. If the provided recordId is not a UUID the record will be created instead to support optimistic flows. Requires features: entities.records.manage

Request body (application/json)

{
  "entityId": "string",
  "recordId": "string",
  "values": {}
}

Responses

200Record updated
Content-Type: application/json
{
  "ok": true
}
400Validation failure
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/entities/records" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "recordId": "string",
  "values": {}
}'
DELETE/entities/records
Auth requiredentities.records.manage

Delete record

Soft deletes the specified record within the current tenant/org scope. Requires features: entities.records.manage

Request body (application/json)

{
  "entityId": "string",
  "recordId": "string"
}

Responses

200Record deleted
Content-Type: application/json
{
  "ok": true
}
400Missing entity id or record id
Content-Type: application/json
{
  "error": "string"
}
404Record not found
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/entities/records" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityId": "string",
  "recordId": "string"
}'
GET/entities/relations/options
Auth requiredentities.definitions.view

List relation options

Returns up to 50 option entries for populating relation dropdowns, automatically resolving label fields when omitted. Requires features: entities.definitions.view

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesstring
labelFieldqueryNostring
qqueryNostring

Responses

200Option list
Content-Type: application/json
{
  "items": [
    {
      "value": "string",
      "label": "string"
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/entities/relations/options?entityId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/entities/sidebar-entities
Auth required

Get sidebar entities

Returns custom entities flagged with `showInSidebar` for the current tenant/org scope.

Responses

200Sidebar entities for navigation
Content-Type: application/json
{
  "items": [
    {
      "entityId": "string",
      "label": "string",
      "href": "string"
    }
  ]
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/entities/sidebar-entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Example

9 endpoints
GET/example/assignees
Auth requiredexample.todos.view

List example assignees

Returns mock assignee options filtered by the optional `q` query parameter. Requires features: example.todos.view

Parameters

NameInRequiredSchemaDescription
qqueryNostring

Responses

200Assignable users.
Content-Type: application/json
{
  "items": [
    {
      "value": "string",
      "label": "string"
    }
  ]
}
500Unexpected server error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/example/assignees" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/example/blog/{id}

Fetch demo blog payload

Returns a placeholder blog record containing the provided identifier.

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Placeholder blog payload.
Content-Type: application/json
{
  "id": "string",
  "method": "GET"
}
401Authentication required
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/example/blog/string" \
  -H "Accept: application/json"
POST/example/blog/{id}

Create demo blog payload

Echoes the provided identifier as a placeholder write endpoint.

Parameters

NameInRequiredSchemaDescription
idpathYesstring

Responses

200Placeholder confirmation.
Content-Type: application/json
{
  "id": "string",
  "method": "POST"
}
401Authentication required
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/example/blog/string" \
  -H "Accept: application/json"
GET/example/organizations
Auth requiredexample.todos.view

Resolve organization labels

Fetches organization names for the provided identifiers within the current tenant scope. Requires features: example.todos.view

Parameters

NameInRequiredSchemaDescription
idsqueryNostring

Responses

200Resolved organizations.
Content-Type: application/json
{
  "items": [
    {
      "value": "string",
      "label": "string"
    }
  ]
}
500Unexpected server error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/example/organizations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/example/tags
Auth requiredexample.todos.view

List example tags

Returns tag options collected from custom field values and dictionary configuration. Requires features: example.todos.view

Responses

200Available tag options.
Content-Type: application/json
{
  "items": [
    {
      "value": "string",
      "label": "string"
    }
  ]
}
500Failed to resolve tags
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/example/tags" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/example/todos
Auth requiredexample.todos.view

List todos

Returns a paginated collection of todos in the current tenant scope. Requires features: example.todos.view

Parameters

NameInRequiredSchemaDescription
idqueryNostring
pagequeryNonumber
pageSizequeryNonumber
sortFieldqueryNostring
sortDirqueryNostring
titlequeryNostring
isDonequeryNoboolean
withDeletedqueryNoboolean
organizationIdqueryNostring
createdFromqueryNostring
createdToqueryNostring
formatqueryNostring

Responses

200Paginated todos
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "title": "string",
      "tenant_id": null,
      "organization_id": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/example/todos?page=1&pageSize=50&sortField=id&sortDir=asc&withDeleted=false&format=json" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/example/todos
Auth requiredexample.todos.manage

Create todo

Creates a todo record. Supports additional custom field keys prefixed with `cf_`. Requires features: example.todos.manage

Request body (application/json)

{}

Responses

201Todo created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/example/todos" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
PUT/example/todos
Auth requiredexample.todos.manage

Update todo

Updates an existing todo record by id. Accepts base fields and optional `cf_` custom fields. Requires features: example.todos.manage

Request body (application/json)

{}

Responses

200Todo updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/example/todos" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/example/todos
Auth requiredexample.todos.manage

Delete todo

Deletes a todo by id. Provide the identifier in the request body. Requires features: example.todos.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Todo deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/example/todos" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'

Perspectives

4 endpoints
GET/perspectives/{tableId}
Auth requiredperspectives.use

Load perspectives for a table

Returns personal perspectives and available role defaults for the requested table identifier. Requires features: perspectives.use

Parameters

NameInRequiredSchemaDescription
tableIdpathYesstring

Responses

200Current perspectives and defaults.
Content-Type: application/json
{
  "tableId": "string",
  "perspectives": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "tableId": "string",
      "settings": {},
      "isDefault": true,
      "createdAt": "string",
      "updatedAt": null
    }
  ],
  "defaultPerspectiveId": null,
  "rolePerspectives": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "tableId": "string",
      "settings": {},
      "isDefault": true,
      "createdAt": "string",
      "updatedAt": null,
      "roleId": "00000000-0000-4000-8000-000000000000",
      "tenantId": null,
      "organizationId": null,
      "roleName": null
    }
  ],
  "roles": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "hasPerspective": true,
      "hasDefault": true
    }
  ],
  "canApplyToRoles": true
}
400Invalid table identifier
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/perspectives/string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/perspectives/{tableId}
Auth requiredperspectives.use

Create or update a perspective

Saves a personal perspective and optionally applies the same configuration to selected roles. Requires features: perspectives.use

Parameters

NameInRequiredSchemaDescription
tableIdpathYesstring

Request body (application/json)

{
  "name": "string",
  "settings": {}
}

Responses

200Perspective saved successfully.
Content-Type: application/json
{
  "perspective": {
    "id": "00000000-0000-4000-8000-000000000000",
    "name": "string",
    "tableId": "string",
    "settings": {},
    "isDefault": true,
    "createdAt": "string",
    "updatedAt": null
  },
  "rolePerspectives": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "tableId": "string",
      "settings": {},
      "isDefault": true,
      "createdAt": "string",
      "updatedAt": null,
      "roleId": "00000000-0000-4000-8000-000000000000",
      "tenantId": null,
      "organizationId": null,
      "roleName": null
    }
  ],
  "clearedRoleIds": [
    "00000000-0000-4000-8000-000000000000"
  ]
}
400Validation failed or invalid roles provided
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/perspectives/string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "settings": {}
}'
DELETE/perspectives/{tableId}/roles/{roleId}
Auth requiredperspectives.role_defaults

Clear role perspectives for a table

Removes all role-level perspectives associated with the provided role identifier for the table. Requires features: perspectives.role_defaults

Parameters

NameInRequiredSchemaDescription
tableIdpathYesstring
roleIdpathYesstring

Responses

200Role perspectives cleared.
Content-Type: application/json
{
  "success": true
}
400Invalid identifiers supplied
Content-Type: application/json
{
  "error": "string"
}
404Role not found in scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/perspectives/string/roles/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/perspectives/{tableId}/{perspectiveId}
Auth requiredperspectives.use

Delete a personal perspective

Removes a perspective owned by the current user for the given table. Requires features: perspectives.use

Parameters

NameInRequiredSchemaDescription
tableIdpathYesstring
perspectiveIdpathYesstring

Responses

200Perspective removed.
Content-Type: application/json
{
  "success": true
}
400Invalid identifiers supplied
Content-Type: application/json
{
  "error": "string"
}
404Perspective not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/perspectives/string/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Query Index

3 endpoints
POST/query_index/purge
Auth requiredquery_index.purge

Purge query index records

Queues a purge job to remove indexed records for an entity type within the active scope. Requires features: query_index.purge

Request body (application/json)

{
  "entityType": "string"
}

Responses

200Purge job accepted.
Content-Type: application/json
{
  "ok": true
}
400Missing entity type
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/query_index/purge" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityType": "string"
}'
POST/query_index/reindex
Auth requiredquery_index.reindex

Trigger query index rebuild

Queues a reindex job for the specified entity type within the current tenant scope. Requires features: query_index.reindex

Request body (application/json)

{
  "entityType": "string"
}

Responses

200Reindex job accepted.
Content-Type: application/json
{
  "ok": true
}
400Missing entity type
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/query_index/reindex" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "entityType": "string"
}'
GET/query_index/status
Auth requiredquery_index.status.view

Inspect query index coverage

Returns entity counts comparing base tables with the query index along with the latest job status. Requires features: query_index.status.view

Responses

200Current query index status.
Content-Type: application/json
{
  "items": [
    {
      "entityId": "string",
      "label": "string",
      "baseCount": null,
      "indexCount": null,
      "vectorCount": null,
      "ok": true,
      "job": {
        "status": "idle",
        "startedAt": null,
        "finishedAt": null,
        "heartbeatAt": null,
        "processedCount": null,
        "totalCount": null,
        "scope": null
      }
    }
  ],
  "errors": [
    {
      "id": "string",
      "source": "string",
      "handler": "string",
      "entityType": null,
      "recordId": null,
      "tenantId": null,
      "organizationId": null,
      "message": "string",
      "stack": null,
      "payload": null,
      "occurredAt": "string"
    }
  ],
  "logs": [
    {
      "id": "string",
      "source": "string",
      "handler": "string",
      "level": "info",
      "entityType": null,
      "recordId": null,
      "tenantId": null,
      "organizationId": null,
      "message": "string",
      "details": null,
      "occurredAt": "string"
    }
  ]
}
400Tenant or organization context required
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/query_index/status" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Sales

91 endpoints
GET/sales/adjustment-kinds
Auth requiredsales.orders.view

List sales adjustment kinds

Returns a paginated collection of sales adjustment kinds that belong to the current organization. Requires features: sales.orders.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated sales adjustment kinds
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": null,
      "color": null,
      "icon": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/adjustment-kinds?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/adjustment-kinds
Auth requiredsales.settings.manage

Create sales adjustment kind

Creates an adjustment kind. Requires features: sales.settings.manage

Request body (application/json)

{}

Responses

201Sales adjustment kind created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/adjustment-kinds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
PUT/sales/adjustment-kinds
Auth requiredsales.settings.manage

Update sales adjustment kind

Updates an adjustment kind. Requires features: sales.settings.manage

Request body (application/json)

{}

Responses

200Sales adjustment kind updated
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/adjustment-kinds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/sales/adjustment-kinds
Auth requiredsales.settings.manage

Delete sales adjustment kind

Deletes an adjustment kind. Requires features: sales.settings.manage

Request body (application/json)

{}

Responses

200Sales adjustment kind deleted
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/adjustment-kinds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{}'
GET/sales/channels
Auth requiredsales.channels.manage

List sales channels

Manage sales channels to segment orders and pricing across marketplaces or stores. Requires features: sales.channels.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
idqueryNostring
idsqueryNostring
isActivequeryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean

Responses

200Paginated sales channels
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "code": null,
      "description": null,
      "statusEntryId": null,
      "isActive": true,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/channels?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/channels
Auth requiredsales.channels.manage

Create sales channel

Creates a new sales channel. Requires features: sales.channels.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}

Responses

201Sales channel created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/channels" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}'
PUT/sales/channels
Auth requiredsales.channels.manage

Update sales channel

Updates an existing sales channel by id. Requires features: sales.channels.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "code": "string"
}

Responses

200Sales channel updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/channels" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "code": "string"
}'
DELETE/sales/channels
Auth requiredsales.channels.manage

Delete sales channel

Deletes a sales channel identified by id. Requires features: sales.channels.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Sales channel deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/channels" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/delivery-windows
Auth requiredsales.settings.manage

List delivery windows

Define delivery windows to communicate lead times and cut-off rules for sales orders. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
isActivequeryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean

Responses

200Paginated delivery windows
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "code": null,
      "description": null,
      "leadTimeDays": null,
      "cutoffTime": null,
      "timezone": null,
      "isActive": true,
      "metadata": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/delivery-windows?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/delivery-windows
Auth requiredsales.settings.manage

Create delivery window

Creates a new delivery window. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}

Responses

201Delivery window created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/delivery-windows" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}'
PUT/sales/delivery-windows
Auth requiredsales.settings.manage

Update delivery window

Updates an existing delivery window by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Delivery window updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/delivery-windows" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/delivery-windows
Auth requiredsales.settings.manage

Delete delivery window

Deletes a delivery window identified by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Delivery window deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/delivery-windows" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/document-addresses
Auth required

List document addresss

Returns a paginated collection of document addresss that belong to the current organization.

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
documentIdqueryNostring
documentKindqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated document addresss
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "document_id": "00000000-0000-4000-8000-000000000000",
      "document_kind": "order",
      "customer_address_id": null,
      "name": null,
      "purpose": null,
      "company_name": null,
      "address_line1": "string",
      "address_line2": null,
      "building_number": null,
      "flat_number": null,
      "city": null,
      "region": null,
      "postal_code": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "created_at": "string",
      "updated_at": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/document-addresses?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/document-addresses
Auth required

Create document address

Creates a sales document address linked to an order or quote.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "documentId": "00000000-0000-4000-8000-000000000000",
  "documentKind": "order",
  "name": null,
  "purpose": null,
  "companyName": null,
  "addressLine1": "string",
  "addressLine2": null,
  "city": null,
  "region": null,
  "postalCode": null,
  "country": null,
  "buildingNumber": null,
  "flatNumber": null,
  "latitude": null,
  "longitude": null
}

Responses

201Document address created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/document-addresses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "documentId": "00000000-0000-4000-8000-000000000000",
  "documentKind": "order",
  "name": null,
  "purpose": null,
  "companyName": null,
  "addressLine1": "string",
  "addressLine2": null,
  "city": null,
  "region": null,
  "postalCode": null,
  "country": null,
  "buildingNumber": null,
  "flatNumber": null,
  "latitude": null,
  "longitude": null
}'
PUT/sales/document-addresses
Auth required

Update document address

Updates a sales document address.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "id": "00000000-0000-4000-8000-000000000000",
  "documentId": "00000000-0000-4000-8000-000000000000",
  "documentKind": "order",
  "name": null,
  "purpose": null,
  "companyName": null,
  "addressLine1": "string",
  "addressLine2": null,
  "city": null,
  "region": null,
  "postalCode": null,
  "country": null,
  "buildingNumber": null,
  "flatNumber": null,
  "latitude": null,
  "longitude": null
}

Responses

200Document address updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/document-addresses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "id": "00000000-0000-4000-8000-000000000000",
  "documentId": "00000000-0000-4000-8000-000000000000",
  "documentKind": "order",
  "name": null,
  "purpose": null,
  "companyName": null,
  "addressLine1": "string",
  "addressLine2": null,
  "city": null,
  "region": null,
  "postalCode": null,
  "country": null,
  "buildingNumber": null,
  "flatNumber": null,
  "latitude": null,
  "longitude": null
}'
DELETE/sales/document-addresses
Auth required

Delete document address

Deletes a sales document address.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "documentId": "00000000-0000-4000-8000-000000000000",
  "documentKind": "order"
}

Responses

200Document address deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/document-addresses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "documentId": "00000000-0000-4000-8000-000000000000",
  "documentKind": "order"
}'
POST/sales/document-numbers
Auth required

Generate next number

Generates the next sales order or quote number using configured formatting rules.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "kind": "order"
}

Responses

200Generated number
Content-Type: application/json
{
  "number": "string",
  "format": "string",
  "sequence": 1
}
400Invalid input or scope missing
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/document-numbers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "kind": "order"
}'
GET/sales/notes
Auth required

List sales notes

Returns a paginated collection of sales notes that belong to the current organization.

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
contextTypequeryNostring
contextIdqueryNostring
orderIdqueryNostring
quoteIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated sales notes
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "context_type": "order",
      "context_id": "00000000-0000-4000-8000-000000000000",
      "order_id": null,
      "quote_id": null,
      "body": null,
      "author_user_id": null,
      "appearance_icon": null,
      "appearance_color": null,
      "organization_id": null,
      "tenant_id": null,
      "created_at": null,
      "updated_at": null
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/notes?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/notes
Auth required

Create sales note

Creates a note attached to a sales document.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "contextType": "order",
  "contextId": "00000000-0000-4000-8000-000000000000",
  "body": "string",
  "appearanceIcon": null,
  "appearanceColor": null
}

Responses

201Sales note created
Content-Type: application/json
{
  "id": null,
  "authorUserId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/notes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "contextType": "order",
  "contextId": "00000000-0000-4000-8000-000000000000",
  "body": "string",
  "appearanceIcon": null,
  "appearanceColor": null
}'
PUT/sales/notes
Auth required

Update sales note

Updates a sales note.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "appearanceIcon": null,
  "appearanceColor": null
}

Responses

200Sales note updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/notes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "appearanceIcon": null,
  "appearanceColor": null
}'
DELETE/sales/notes
Auth required

Delete sales note

Deletes a sales note.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Sales note deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/notes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/order-adjustments

List order adjustments

Returns a paginated collection of order adjustments that belong to the current organization.

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
orderIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated order adjustments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "order_id": "00000000-0000-4000-8000-000000000000",
      "order_line_id": null,
      "scope": "string",
      "kind": "string",
      "code": null,
      "label": null,
      "calculator_key": null,
      "promotion_id": null,
      "rate": 1,
      "amount_net": 1,
      "amount_gross": 1,
      "currency_code": null,
      "metadata": null,
      "position": 1,
      "created_at": "string",
      "updated_at": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/order-adjustments?page=1&pageSize=50" \
  -H "Accept: application/json"
POST/sales/order-adjustments

Create order adjustment

Creates an order adjustment and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}

Responses

201Order adjustment created
Content-Type: application/json
{
  "id": null,
  "orderId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/order-adjustments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}'
PUT/sales/order-adjustments

Update order adjustment

Updates an order adjustment and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order adjustment updated
Content-Type: application/json
{
  "id": null,
  "orderId": null
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/order-adjustments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/order-adjustments

Delete order adjustment

Deletes an order adjustment and recalculates totals.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order adjustment deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/order-adjustments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/order-line-statuses
Auth requiredsales.settings.manage

List order line statuses

Manage custom order line statuses available for sales documents. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated order line statuses
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": null,
      "color": null,
      "icon": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/order-line-statuses?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/order-line-statuses
Auth requiredsales.settings.manage

Create order line status

Creates a new order line status. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}

Responses

201Order line status created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/order-line-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}'
PUT/sales/order-line-statuses
Auth requiredsales.settings.manage

Update order line status

Updates an existing order line status by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order line status updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/order-line-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/order-line-statuses
Auth requiredsales.settings.manage

Delete order line status

Deletes a order line status identified by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order line status deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/order-line-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/order-lines

List order lines

Returns a paginated collection of order lines that belong to the current organization.

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
idqueryNostring
orderIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated order lines
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "order_id": "00000000-0000-4000-8000-000000000000",
      "line_number": 1,
      "kind": "string",
      "status_entry_id": null,
      "status": null,
      "product_id": null,
      "product_variant_id": null,
      "catalog_snapshot": null,
      "name": null,
      "description": null,
      "comment": null,
      "quantity": 1,
      "quantity_unit": null,
      "currency_code": "string",
      "unit_price_net": 1,
      "unit_price_gross": 1,
      "discount_amount": 1,
      "discount_percent": 1,
      "tax_rate": 1,
      "tax_amount": 1,
      "total_net_amount": 1,
      "total_gross_amount": 1,
      "configuration": null,
      "promotion_code": null,
      "promotion_snapshot": null,
      "metadata": null,
      "custom_field_set_id": null,
      "created_at": "string",
      "updated_at": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/order-lines?page=1&pageSize=50" \
  -H "Accept: application/json"
POST/sales/order-lines

Create order line

Creates an order line and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}

Responses

201Order line created
Content-Type: application/json
{
  "id": null,
  "orderId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/order-lines" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}'
PUT/sales/order-lines

Update order line

Updates an order line and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}

Responses

200Order line updated
Content-Type: application/json
{
  "id": null,
  "orderId": null
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/order-lines" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}'
DELETE/sales/order-lines

Delete order line

Deletes an order line and recalculates totals.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order line deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/order-lines" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/order-statuses
Auth requiredsales.settings.manage

List order statuses

Manage the lifecycle states available for sales orders. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated order statuses
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": null,
      "color": null,
      "icon": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/order-statuses?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/order-statuses
Auth requiredsales.settings.manage

Create order status

Creates a new order status. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}

Responses

201Order status created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/order-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}'
PUT/sales/order-statuses
Auth requiredsales.settings.manage

Update order status

Updates an existing order status by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order status updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/order-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/order-statuses
Auth requiredsales.settings.manage

Delete order status

Deletes a order status identified by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order status deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/order-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/orders
Auth requiredsales.orders.view

List orders

Returns a paginated collection of orders that belong to the current organization. Requires features: sales.orders.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
idqueryNostring
customerIdqueryNostring
channelIdqueryNostring
lineItemCountMinqueryNonumber
lineItemCountMaxqueryNonumber
totalNetMinqueryNonumber
totalNetMaxqueryNonumber
totalGrossMinqueryNonumber
totalGrossMaxqueryNonumber
dateFromqueryNostring
dateToqueryNostring
tagIdsqueryNostring
tagIdsEmptyqueryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean

Responses

200Paginated orders
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "orderNumber": null,
      "status": null,
      "statusEntryId": null,
      "customerEntityId": null,
      "customerContactId": null,
      "billingAddressId": null,
      "shippingAddressId": null,
      "customerReference": null,
      "externalReference": null,
      "comment": null,
      "placedAt": null,
      "expectedDeliveryAt": null,
      "customerSnapshot": null,
      "billingAddressSnapshot": null,
      "shippingAddressSnapshot": null,
      "shippingMethodId": null,
      "shippingMethodCode": null,
      "shippingMethodSnapshot": null,
      "paymentMethodId": null,
      "paymentMethodCode": null,
      "paymentMethodSnapshot": null,
      "currencyCode": null,
      "channelId": null,
      "organizationId": null,
      "tenantId": null,
      "validFrom": null,
      "validUntil": null,
      "lineItemCount": null,
      "subtotalNetAmount": null,
      "subtotalGrossAmount": null,
      "discountTotalAmount": null,
      "taxTotalAmount": null,
      "shippingNetAmount": null,
      "shippingGrossAmount": null,
      "surchargeTotalAmount": null,
      "grandTotalNetAmount": null,
      "grandTotalGrossAmount": null,
      "paidTotalAmount": null,
      "refundedTotalAmount": null,
      "outstandingAmount": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/orders?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/orders
Auth requiredsales.orders.manage

Create order

Creates a new sales order. Requires features: sales.orders.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string"
}

Responses

201Order created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/orders" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string"
}'
PUT/sales/orders
Auth requiredsales.orders.manage

Order management

Requires features: sales.orders.manage

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/orders" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/sales/orders
Auth requiredsales.orders.manage

Delete order

Deletes a sales order. Requires features: sales.orders.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Order deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/orders" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/payment-methods
Auth requiredsales.settings.manage

List payment methods

Configure payment options that can be assigned to sales orders and invoices. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
isActivequeryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean

Responses

200Paginated payment methods
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "code": "string",
      "description": null,
      "providerKey": null,
      "terms": null,
      "isActive": true,
      "metadata": null,
      "providerSettings": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/payment-methods?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/payment-methods
Auth requiredsales.settings.manage

Create payment method

Creates a new payment method. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}

Responses

201Payment method created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/payment-methods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}'
PUT/sales/payment-methods
Auth requiredsales.settings.manage

Update payment method

Updates an existing payment method by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Payment method updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/payment-methods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/payment-methods
Auth requiredsales.settings.manage

Delete payment method

Deletes a payment method identified by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Payment method deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/payment-methods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/payment-statuses
Auth requiredsales.settings.manage

List payment statuses

Manage the lifecycle states available for payments. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated payment statuses
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": null,
      "color": null,
      "icon": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/payment-statuses?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/payment-statuses
Auth requiredsales.settings.manage

Create payment status

Creates a new payment status. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}

Responses

201Payment status created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/payment-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}'
PUT/sales/payment-statuses
Auth requiredsales.settings.manage

Update payment status

Updates an existing payment status by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Payment status updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/payment-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/payment-statuses
Auth requiredsales.settings.manage

Delete payment status

Deletes a payment status identified by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Payment status deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/payment-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/payments
Auth requiredsales.orders.view

List payments

Returns a paginated collection of payments that belong to the current organization. Requires features: sales.orders.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
orderIdqueryNostring
paymentMethodIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated payments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "order_id": null,
      "payment_method_id": null,
      "payment_method_name": null,
      "payment_method_code": null,
      "payment_reference": null,
      "status_entry_id": null,
      "status": null,
      "status_label": null,
      "amount": 1,
      "currency_code": "string",
      "captured_amount": null,
      "refunded_amount": null,
      "received_at": null,
      "captured_at": null,
      "custom_field_set_id": null,
      "customFieldSetId": null,
      "custom_values": null,
      "customValues": null,
      "custom_fields": null,
      "customFields": null,
      "metadata": null,
      "created_at": "string",
      "updated_at": null
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/payments?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/payments
Auth requiredsales.payments.manage

Create payment

Creates a payment for a sales order. Requires features: sales.payments.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "amount": 1,
  "currencyCode": "string"
}

Responses

201Payment created
Content-Type: application/json
{
  "id": null,
  "orderTotals": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/payments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "amount": 1,
  "currencyCode": "string"
}'
PUT/sales/payments
Auth requiredsales.payments.manage

Update payment

Updates a payment. Requires features: sales.payments.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Payment updated
Content-Type: application/json
{
  "id": null,
  "orderTotals": null
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/payments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/payments
Auth requiredsales.payments.manage

Delete payment

Deletes a payment. Requires features: sales.payments.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Payment deleted
Content-Type: application/json
{
  "id": null,
  "orderTotals": null
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/payments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/price-kinds
Auth requiredsales.channels.manage

List price kinds

Lists available price kinds that can be used when pricing sales channels and offers. Requires features: sales.channels.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
isActivequeryNostring

Responses

200Paginated price kinds
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "title": "string",
      "currency_code": null,
      "display_mode": "string",
      "is_active": true
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/price-kinds?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/sales/quote-adjustments

List quote adjustments

Returns a paginated collection of quote adjustments that belong to the current organization.

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
quoteIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated quote adjustments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "quote_id": "00000000-0000-4000-8000-000000000000",
      "quote_line_id": null,
      "scope": "string",
      "kind": "string",
      "code": null,
      "label": null,
      "calculator_key": null,
      "promotion_id": null,
      "rate": 1,
      "amount_net": 1,
      "amount_gross": 1,
      "currency_code": null,
      "metadata": null,
      "position": 1,
      "created_at": "string",
      "updated_at": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/quote-adjustments?page=1&pageSize=50" \
  -H "Accept: application/json"
POST/sales/quote-adjustments

Create quote adjustment

Creates a quote adjustment and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}

Responses

201Quote adjustment created
Content-Type: application/json
{
  "id": null,
  "quoteId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/quote-adjustments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}'
PUT/sales/quote-adjustments

Update quote adjustment

Updates a quote adjustment and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Quote adjustment updated
Content-Type: application/json
{
  "id": null,
  "quoteId": null
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/quote-adjustments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/quote-adjustments

Delete quote adjustment

Deletes a quote adjustment and recalculates totals.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Quote adjustment deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/quote-adjustments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/quote-lines

List quote lines

Returns a paginated collection of quote lines that belong to the current organization.

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
idqueryNostring
quoteIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated quote lines
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "quote_id": "00000000-0000-4000-8000-000000000000",
      "line_number": 1,
      "kind": "string",
      "status_entry_id": null,
      "status": null,
      "product_id": null,
      "product_variant_id": null,
      "catalog_snapshot": null,
      "name": null,
      "description": null,
      "comment": null,
      "quantity": 1,
      "quantity_unit": null,
      "currency_code": "string",
      "unit_price_net": 1,
      "unit_price_gross": 1,
      "discount_amount": 1,
      "discount_percent": 1,
      "tax_rate": 1,
      "tax_amount": 1,
      "total_net_amount": 1,
      "total_gross_amount": 1,
      "configuration": null,
      "promotion_code": null,
      "promotion_snapshot": null,
      "metadata": null,
      "custom_field_set_id": null,
      "created_at": "string",
      "updated_at": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/quote-lines?page=1&pageSize=50" \
  -H "Accept: application/json"
POST/sales/quote-lines

Create quote line

Creates a quote line and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}

Responses

201Quote line created
Content-Type: application/json
{
  "id": null,
  "quoteId": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/quote-lines" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}'
PUT/sales/quote-lines

Update quote line

Updates a quote line and recalculates totals.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}

Responses

200Quote line updated
Content-Type: application/json
{
  "id": null,
  "quoteId": null
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/quote-lines" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string",
  "quantity": 1
}'
DELETE/sales/quote-lines

Delete quote line

Deletes a quote line and recalculates totals.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Quote line deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/quote-lines" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000",
  "quoteId": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/quotes
Auth requiredsales.quotes.view

List quotes

Returns a paginated collection of quotes that belong to the current organization. Requires features: sales.quotes.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
idqueryNostring
customerIdqueryNostring
channelIdqueryNostring
lineItemCountMinqueryNonumber
lineItemCountMaxqueryNonumber
totalNetMinqueryNonumber
totalNetMaxqueryNonumber
totalGrossMinqueryNonumber
totalGrossMaxqueryNonumber
dateFromqueryNostring
dateToqueryNostring
tagIdsqueryNostring
tagIdsEmptyqueryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean

Responses

200Paginated quotes
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "quoteNumber": null,
      "status": null,
      "statusEntryId": null,
      "customerEntityId": null,
      "customerContactId": null,
      "billingAddressId": null,
      "shippingAddressId": null,
      "customerReference": null,
      "externalReference": null,
      "comment": null,
      "placedAt": null,
      "expectedDeliveryAt": null,
      "customerSnapshot": null,
      "billingAddressSnapshot": null,
      "shippingAddressSnapshot": null,
      "shippingMethodId": null,
      "shippingMethodCode": null,
      "shippingMethodSnapshot": null,
      "paymentMethodId": null,
      "paymentMethodCode": null,
      "paymentMethodSnapshot": null,
      "currencyCode": null,
      "channelId": null,
      "organizationId": null,
      "tenantId": null,
      "validFrom": null,
      "validUntil": null,
      "lineItemCount": null,
      "subtotalNetAmount": null,
      "subtotalGrossAmount": null,
      "discountTotalAmount": null,
      "taxTotalAmount": null,
      "shippingNetAmount": null,
      "shippingGrossAmount": null,
      "surchargeTotalAmount": null,
      "grandTotalNetAmount": null,
      "grandTotalGrossAmount": null,
      "paidTotalAmount": null,
      "refundedTotalAmount": null,
      "outstandingAmount": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/quotes?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/quotes
Auth requiredsales.quotes.manage

Create quote

Creates a new sales quote. Requires features: sales.quotes.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string"
}

Responses

201Quote created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/quotes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "currencyCode": "string"
}'
PUT/sales/quotes
Auth requiredsales.quotes.manage

Quote management

Requires features: sales.quotes.manage

Responses

200Success response
Content-Type: application/json
{}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/quotes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/sales/quotes
Auth requiredsales.quotes.manage

Delete quote

Deletes a sales quote. Requires features: sales.quotes.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Quote deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/quotes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
POST/sales/quotes/convert
Auth requiredsales.quotes.managesales.orders.manage

Convert quote

Creates a sales order from a quote and removes the original quote record. Requires features: sales.quotes.manage, sales.orders.manage

Request body (application/json)

{
  "quoteId": "00000000-0000-4000-8000-000000000000"
}

Responses

200Conversion succeeded
Content-Type: application/json
{
  "orderId": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/quotes/convert" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "quoteId": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/settings/document-numbers
Auth requiredsales.settings.manage

Get document numbering settings

Requires features: sales.settings.manage

Responses

200Current numbering formats and counters
Content-Type: application/json
{
  "orderNumberFormat": "string",
  "quoteNumberFormat": "string",
  "nextOrderNumber": 1,
  "nextQuoteNumber": 1
}
400Missing scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/settings/document-numbers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/sales/settings/document-numbers
Auth requiredsales.settings.manage

Update document numbering settings

Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderNumberFormat": "string",
  "quoteNumberFormat": "string",
  "orderCustomerEditableStatuses": null,
  "orderAddressEditableStatuses": null
}

Responses

200Updated numbering formats and counters
Content-Type: application/json
{
  "orderNumberFormat": "string",
  "quoteNumberFormat": "string",
  "nextOrderNumber": 1,
  "nextQuoteNumber": 1
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/settings/document-numbers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderNumberFormat": "string",
  "quoteNumberFormat": "string",
  "orderCustomerEditableStatuses": null,
  "orderAddressEditableStatuses": null
}'
GET/sales/settings/order-editing
Auth requiredsales.settings.manage

Get order editing guards

Requires features: sales.settings.manage

Responses

200Current order editing guards
Content-Type: application/json
{
  "orderCustomerEditableStatuses": null,
  "orderAddressEditableStatuses": null,
  "orderStatuses": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": "string"
    }
  ]
}
400Missing scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/settings/order-editing" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/sales/settings/order-editing
Auth requiredsales.settings.manage

Update order editing guards

Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderCustomerEditableStatuses": null,
  "orderAddressEditableStatuses": null
}

Responses

200Updated order editing guards
Content-Type: application/json
{
  "orderCustomerEditableStatuses": null,
  "orderAddressEditableStatuses": null,
  "orderStatuses": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": "string"
    }
  ]
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/settings/order-editing" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderCustomerEditableStatuses": null,
  "orderAddressEditableStatuses": null
}'
GET/sales/shipment-statuses
Auth requiredsales.settings.manage

List shipment statuses

Manage the lifecycle states available for shipments. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated shipment statuses
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "value": "string",
      "label": null,
      "color": null,
      "icon": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/shipment-statuses?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/shipment-statuses
Auth requiredsales.settings.manage

Create shipment status

Creates a new shipment status. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}

Responses

201Shipment status created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/shipment-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "value": "string",
  "color": null,
  "icon": null
}'
PUT/sales/shipment-statuses
Auth requiredsales.settings.manage

Update shipment status

Updates an existing shipment status by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Shipment status updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/shipment-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "color": null,
  "icon": null,
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/shipment-statuses
Auth requiredsales.settings.manage

Delete shipment status

Deletes a shipment status identified by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Shipment status deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/shipment-statuses" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/shipments

List shipments

Returns a paginated collection of shipments that belong to the current organization.

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
orderIdqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated shipments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "order_id": "00000000-0000-4000-8000-000000000000",
      "shipment_number": null,
      "shipping_method_id": null,
      "shipping_method_code": null,
      "shipping_method_name": null,
      "status_entry_id": null,
      "status": null,
      "status_label": null,
      "carrier_name": null,
      "tracking_numbers": null,
      "shipped_at": null,
      "delivered_at": null,
      "weight_value": null,
      "weight_unit": null,
      "declared_value_net": null,
      "declared_value_gross": null,
      "currency_code": null,
      "notes": null,
      "metadata": null,
      "custom_values": null,
      "customValues": null,
      "custom_fields": null,
      "customFields": null,
      "items_snapshot": null,
      "itemsSnapshot": null,
      "created_at": "string",
      "updated_at": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/shipments?page=1&pageSize=50" \
  -H "Accept: application/json"
POST/sales/shipments

Create shipment

Creates a shipment for an order.

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}

Responses

201Shipment created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/shipments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "orderId": "00000000-0000-4000-8000-000000000000"
}'
PUT/sales/shipments

Update shipment

Updates a shipment.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Shipment updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/shipments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/shipments

Delete shipment

Deletes a shipment.

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Shipment deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/shipments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/shipping-methods
Auth requiredsales.settings.manage

List shipping methods

Maintain shipping services, carrier mappings, and pricing defaults for order fulfillment. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
currencyqueryNostring
isActivequeryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean

Responses

200Paginated shipping methods
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "code": "string",
      "description": null,
      "carrierCode": null,
      "providerKey": null,
      "serviceLevel": null,
      "estimatedTransitDays": null,
      "baseRateNet": "string",
      "baseRateGross": "string",
      "currencyCode": null,
      "isActive": true,
      "metadata": null,
      "providerSettings": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/shipping-methods?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/shipping-methods
Auth requiredsales.settings.manage

Create shipping method

Creates a new shipping method. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}

Responses

201Shipping method created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/shipping-methods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string"
}'
PUT/sales/shipping-methods
Auth requiredsales.settings.manage

Update shipping method

Updates an existing shipping method by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Shipping method updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/shipping-methods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/shipping-methods
Auth requiredsales.settings.manage

Delete shipping method

Deletes a shipping method identified by id. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Shipping method deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/shipping-methods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
GET/sales/tags
Auth requiredsales.orders.view

List sales tags

Manage reusable tags to categorize sales orders and quotes. Requires features: sales.orders.view

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
sortFieldqueryNostring
sortDirqueryNostring

Responses

200Paginated sales tags
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "slug": "string",
      "label": null,
      "color": null,
      "description": null,
      "organization_id": null,
      "tenant_id": null
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/tags?page=1&pageSize=100" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/tags
Auth requiredsales.orders.manage

Create sales tag

Creates a sales document tag. Requires features: sales.orders.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "slug": "string",
  "label": "string"
}

Responses

201Sales tag created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/tags" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "slug": "string",
  "label": "string"
}'
PUT/sales/tags
Auth requiredsales.orders.manage

Update sales tag

Updates an existing sales tag. Requires features: sales.orders.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Sales tag updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/tags" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/tags
Auth requiredsales.orders.manage

Delete sales tag

Deletes a sales tag. Requires features: sales.orders.manage

Responses

200Sales tag deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/tags" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/sales/tax-rates
Auth requiredsales.settings.manage

List tax rates

Returns a paginated list of sales tax rates for the current organization. Requires features: sales.settings.manage

Parameters

NameInRequiredSchemaDescription
pagequeryNonumber
pageSizequeryNonumber
searchqueryNostring
countryqueryNostring
regionqueryNostring
channelIdqueryNostring
isCompoundqueryNostring
sortFieldqueryNostring
sortDirqueryNostring
withDeletedqueryNoboolean

Responses

200Paginated list of tax rates
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "code": null,
      "rate": 1,
      "countryCode": null,
      "regionCode": null,
      "postalCode": null,
      "city": null,
      "customerGroupId": null,
      "productCategoryId": null,
      "channelId": null,
      "priority": null,
      "isCompound": true,
      "isDefault": true,
      "metadata": null,
      "startsAt": null,
      "endsAt": null,
      "organizationId": null,
      "tenantId": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://open-mercato.dogtronic.biz/api/sales/tax-rates?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/sales/tax-rates
Auth requiredsales.settings.manage

Create tax rate

Creates a new tax rate record. Requires features: sales.settings.manage

Request body (application/json)

{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string",
  "rate": 1
}

Responses

201Identifier of the created tax rate
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://open-mercato.dogtronic.biz/api/sales/tax-rates" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "name": "string",
  "code": "string",
  "rate": 1
}'
PUT/sales/tax-rates
Auth requiredsales.settings.manage

Update tax rate

Updates an existing tax rate by identifier. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Update acknowledgement
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://open-mercato.dogtronic.biz/api/sales/tax-rates" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'
DELETE/sales/tax-rates
Auth requiredsales.settings.manage

Delete tax rate

Deletes a tax rate identified by `id`. Requires features: sales.settings.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Deletion acknowledgement
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://open-mercato.dogtronic.biz/api/sales/tax-rates" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "00000000-0000-4000-8000-000000000000"
}'