sinao-api — quality + safety report

In the Skillier index (lap__sinao-app-sinao-app) · scanned 2026-06-03 · engine: builtin+triage

A
Quality
90/100
Safety

✓ Clean — no heuristic safety flags surfaced.

Heuristic flags from the builtin scanner, which is known to over-flag (it trips on legitimate env-reading integrations, security skills, and library .eval calls). This is NOT an authoritative malicious verdict — re-scan with SkillSpector for the authoritative result. Run the authoritative scan →

Skillproof quality grade A

📇 This skill is in the Skillier index (curated · deduped · quality-filtered). Install Skillier to route & load it into your AI client.

Quality notes

Skill is large (~12401 tokens)
medium · quality · body
→ Tighten to the essential procedure; move long reference material to linked files.
No example
low · quality · body
→ Add at least one worked example (input → expected action/output).

About this skill

Sinao API skill. Use when working with Sinao for login, sendpassword, changepassword. Covers 383 endpoints.

📄 Read the SKILL.md
---
name: sinao-api
description: "Sinao API skill. Use when working with Sinao for login, sendpassword, changepassword. Covers 383 endpoints."
version: 1.0.0
generator: lapsh
---

# Sinao API
API version: 1.1.0

## Auth
Bearer bearer | Bearer basic | Bearer basic

## Base URL
https://api.sinao.app/v1

## Setup
1. Set Authorization header with your Bearer token
2. GET /refresh -- verify access
3. POST /login -- create first login

## Endpoints

383 endpoints across 12 groups. See references/api-spec.lap for full details.

### login
| Method | Path | Description |
|--------|------|-------------|
| POST | /login | Login |
| POST | /login/send/2fa | Send 2FA code |

### sendpassword
| Method | Path | Description |
|--------|------|-------------|
| POST | /sendpassword | Password recover by email |

### changepassword
| Method | Path | Description |
|--------|------|-------------|
| POST | /changepassword | Change password |

### logout
| Method | Path | Description |
|--------|------|-------------|
| POST | /logout | Logout |

### refresh
| Method | Path | Description |
|--------|------|-------------|
| GET | /refresh | Refresh a token |

### me
| Method | Path | Description |
|--------|------|-------------|
| GET | /me | Get current user |
| POST | /me | Update current user |

### register
| Method | Path | Description |
|--------|------|-------------|
| POST | /register | Create an User |

### apps
| Method | Path | Description |
|--------|------|-------------|
| POST | /apps | Create an app |
| GET | /apps | List apps |
| GET | /apps/{appId} | Get an app |
| GET | /apps/{appId}/ping | Ping app web hostname |
| POST | /apps/{appId}/reset | Reset all data |
| GET | /apps/{appId}/apikeys | Get all api keys |
| POST | /apps/{appId}/apikeys | Create new API key |
| DELETE | /apps/{appId}/apikeys/{id} | Remove an api key |
| GET | /apps/{appId}/apipartners | Get all api partners |
| GET | /apps/{appId}/settings | Get app config |
| POST | /apps/{appId}/settings | Update app config |
| GET | /apps/{appId}/jobs/{job} | Get app job |
| GET | /apps/{appId}/templates | Get templates |
| POST | /apps/{appId}/templates | Create a template |
| GET | /apps/{appId}/document-langs | Get document (invoice or quote) available printable langs |
| POST | /apps/{appId}/templates/batch | Create multiple templates |
| GET | /apps/{appId}/templates/default | Get default template |
| GET | /apps/{appId}/templates/{id} | Get a template |
| POST | /apps/{appId}/templates/{id} | Update a template |
| GET | /apps/{appId}/subscription/plan/extra | Get current plan |
| GET | /apps/{appId}/subscription/customer | Stripe Customer object |
| POST | /apps/{appId}/subscription/customer | Stripe Customer object |
| GET | /apps/{appId}/subscription/plan | Get current plan |
| DELETE | /apps/{appId}/subscription/plan | End current plan |
| GET | /apps/{appId}/subscription/plans | Get plans |
| GET | /apps/{appId}/subscription/invoices | See all invoices |
| GET | /apps/{appId}/subscription/payment_methods | See all payment methods |
| GET | /apps/{appId}/subscription/extra/count | Count extra usage |
| POST | /apps/{appId}/subscription/extra/{stripe_plan} | Enable plan |
| GET | /apps/{appId}/subscription/plans/{stripe_plan} | Simulate a plan |
| POST | /apps/{appId}/subscription/plans/{stripe_plan} | Change plan |
| GET | /apps/{appId}/subscription/plans/{stripe_plan}/checkout | Get payment link to Stripe Checkout |
| GET | /apps/{appId}/subscription/checkout_session | Get Stripe Checkout Session id |
| GET | /apps/{appId}/subscription/checkout_add_source | Get payment link to Stripe Checkout |
| POST | /apps/{appId}/subscription/source | Add creditcard or sepadebit |
| DELETE | /apps/{appId}/subscription/source | Remove creditcard or sepadebit |
| POST | /apps/{appId}/subscription/source/default | Change default source |
| POST | /apps/{appId}/subscription/pay_all | Pay all due invoices |
| POST | /apps/{appId}/subscription/cancel | Cancel the subscription now |
| POST | /apps/{appId}/subscription/extend_trial | Extend trial period |
| POST | /apps/{appId}/subscription/coupon | Add coupon |
| GET | /apps/{appId}/subscription/coupon | See coupon |
| POST | /apps/{appId}/subscription/anchordate | Update anchor date |
| GET | /apps/{appId}/access/profiles | Get profiles |
| POST | /apps/{appId}/access/invite | Invite an user |
| GET | /apps/{appId}/access/invite | List invitations |
| DELETE | /apps/{appId}/access/invite/{id} | Delete an invitation |
| GET | /apps/{appId}/pennylane/refresh-token | endpoint for Pennylane fesh bearer token |
| POST | /apps/access/invite/{accessToken}/register | Create an User by invitation |
| GET | /apps/access/invite/{accessToken} | Get invitation informations |
| DELETE | /apps/access/invite/{accessToken} | Delete an invitation from token |
| POST | /apps/access/accounting/policies/accounting/batch | Create/update policies for a user |
| GET | /apps/{appId}/access | Get policies for an app |
| GET | /apps/{appId}/access/{userId} | Get police for an user |
| POST | /apps/{appId}/access/{userId} | Update police for an user |
| DELETE | /apps/{appId}/access/{userId} | Delete police for an user |
| GET | /apps/{appId}/organization | Get organization profile for current app |
| POST | /apps/{appId}/organization | Update organization profile for current app |
| GET | /apps/{appId}/organizations | List organizations |
| POST | /apps/{appId}/organizations | Create an organization |
| POST | /apps/{appId}/organizations/batch | Create multiple organizations |
| DELETE | /apps/{appId}/organizations/batch | Remove multiple organizations |
| POST | /apps/{appId}/organizations/chorus-search | Search organizations in Chorus Pro |
| GET | /apps/{appId}/organizations/{id} | Get an organization |
| POST | /apps/{appId}/organizations/{id} | Update an organization |
| DELETE | /apps/{appId}/organizations/{id} | Remove an organization |
| GET | /apps/{appId}/organizations/{id}/restore | Restore an organization |
| GET | /apps/{appId}/organizations/{id}/sepa/mandate | Get sepa_mandate of a organizations |
| DELETE | /apps/{appId}/organizations/delete/all | Remove all organizations |
| GET | /apps/{appId}/persons | List persons |
| POST | /apps/{appId}/persons | Create a person |
| POST | /apps/{appId}/persons/batch | Create multiple persons |
| DELETE | /apps/{appId}/persons/batch | Delete many persons |
| GET | /apps/{appId}/persons/{id} | Get a person |
| POST | /apps/{appId}/persons/{id} | Update a person |
| DELETE | /apps/{appId}/persons/{id} | Remove a person |
| GET | /apps/{appId}/persons/{id}/restore | Restore a person |
| GET | /apps/{appId}/persons/{id}/sepa/mandate | Get sepa_mandate of a person |
| DELETE | /apps/{appId}/persons/delete/all | Remove all persons |
| GET | /apps/{appId}/establishments/{id} | Get an establishment |
| POST | /apps/{appId}/establishments/{id} | Update an establishment |
| DELETE | /apps/{appId}/establishments/{id} | Remove an establishment |
| POST | /apps/{appId}/establishments/{establishment_id}/contact/{contact_id} | Update an establishment contact |
| DELETE | /apps/{appId}/establishments/{establishment_id}/contact/{contact_id} | Remove an establishment contact |
| GET | /apps/{appId}/relationships | List relationships |
| POST | /apps/{appId}/relationships/{id}/attach | Attach a file |
| DELETE | /apps/{appId}/relationships/{id}/attach | Detach a file |
| GET | /apps/{appId}/relationships/{id} | Get a relationship |
| POST | /apps/{appId}/relationships/{id} | Update a relationship |
| POST | /apps/{appId}/relationships/{id}/tag | Add a tag on a relationship |
| DELETE | /apps/{appId}/relationships/{id}/tag | Delete a tag on a relationship |
| POST | /apps/{appId}/contacts/merge | Merge many contacts |
| GET | /apps/{appId}/invoices | List invoices |
| POST | /apps/{appId}/invoices | Create an invoice |
| POST | /apps/{appId}/invoices/batch | Create or update many invoices |
| DELETE | /apps/{appId}/invoices/batch | Delete many invoices |
| GET | /apps/{appId}/invoices/nextnumber | Get the next invoice number for preview |
| GET | /apps/{appId}/invoices/download | Download a list of invoices in pdf into a .zip file |
| GET | /apps/{appId}/invoices/statistics | Obtain statistics about invoices |
| POST | /apps/{appId}/invoices/fresh | Regenerate pdf and recalcul amounts of invoice |
| POST | /apps/{appId}/invoices/chorus-pro | Send selected invoices to Chorus-Pro |
| GET | /apps/{appId}/invoices/{id} | Get an invoice |
| POST | /apps/{appId}/invoices/{id} | Update an invoice |
| DELETE | /apps/{appId}/invoices/{id} | Remove an invoice |
| POST | /apps/{appId}/invoices/{id}/duplicate | Duplicate an invoice |
| POST | /apps/{appId}/invoices/{id}/avoid | Create a creditnote on an invoice |
| POST | /apps/{appId}/invoices/{id}/finalize | Finalize an invoice |
| POST | /apps/{appId}/invoices/{id}/updatestatus | Update the status of an invoice |
| POST | /apps/{appId}/invoices/{id}/attach | Attach a file at an invoice |
| DELETE | /apps/{appId}/invoices/{id}/attach | Detach a file at an invoice |
| POST | /apps/{appId}/invoices/{id}/tag | Add a tag on an invoice |
| DELETE | /apps/{appId}/invoices/{id}/tag | Delete a tag on an invoice |
| GET | /apps/{appId}/invoices/{id}/pdf | Download the invoice as pdf |
| GET | /apps/{appId}/invoices/{id}/preview.jpg | Download invoice as jpeg |
| GET | /apps/{appId}/invoice/{id}/link | Generate an invoice link |
| POST | /apps/{appId}/invoices/batch/breakdown | Update the breakdown of an invoice |
| DELETE | /apps/{appId}/invoices/delete/all | Remove all purchases |
| GET | /apps/{appId}/quotes | List quotes |
| POST | /apps/{appId}/quotes | Create a quote |
| POST | /apps/{appId}/quotes/batch | Create or update many quotes |
| DELETE | /apps/{appId}/quotes/batch | Delete many quotes |
| POST | /apps/{appId}/quotes/invoice | Create or update many quotes |
| GET | /apps/{appId}/quotes/nextnumber | Get the next quote number for preview |
| GET | /apps/{appId}/quotes/download | Download a list of quotes in pdf into a .zip file |
| GET | /apps/{appId}/quotes/statistics | Obtain statistics about quotes |
| POST | /apps/{appId}/quotes/fresh | Regenerate pdf and recalcul amounts of quote |
| GET | /apps/{appId}/quotes/{id} | Get a quote |
| POST | /apps/{appId}/quotes/{id} | Update a quote |
| DELETE | /apps/{appId}/quotes/{id} | Remove a quote |
| POST | /apps/{appId}/quotes/{id}/finalize | Finalize a quote |
| POST | /apps/{appId}/quotes/{id}/duplicate | Duplicate a quote |
| POST | /apps/{appId}/quotes/{id}/invoice | Transform the quote in invoice |
| POST | /apps/{appId}/quotes/{id}/situation_invoice | Transform the quote into a situation invoice |
| POST | /apps/{appId}/quotes/{id}/downpayment | Transform the quote in a downpayment invoice |
| POST | /apps/{appId}/quotes/{id}/updatestatus | Update the status of a quote |
| POST | /apps/{appId}/quotes/{id}/attach | Attach a file at a quote |
| DELETE | /apps/{appId}/quotes/{id}/attach | Detach a file at a quote |
| POST | /apps/{appId}/quotes/{id}/tag | Add a tag on an quote |
| DELETE | /apps/{appId}/quotes/{id}/tag | Delete a tag on a quote |
| GET | /apps/{appId}/quotes/{id}/pdf | Download the quote as pdf |
| GET | /apps/{appId}/quotes/{id}/preview.jpg | Download quote as jpeg |
| GET | /apps/{appId}/quotes/{id}/yousign/preview.jpg | Download quote as jpeg |
| DELETE | /apps/{appId}/quotes/delete/all | Remove all quotes |
| POST | /apps/{appId}/quotes/batch/breakdown | Update the breakdown of an quote |
| GET | /apps/{appId}/salesdocumentmodels | List sales documents models |
| POST | /apps/{appId}/salesdocumentmodels | Create a sales document model |
| GET | /apps/{appId}/salesdocumentmodels/{id} | Get a sales document model |
| POST | /apps/{appId}/salesdocumentmodels/{id} | Update a sales document model |
| DELETE | /apps/{appId}/salesdocumentmodels/{id} | Remove a sales document model |
| GET | /apps/{appId}/recurringinvoices | List RecurringInvoice |
| POST | /apps/{

… (truncated)
Scan or optimize your own skill →

Want a live grade + an embeddable README badge? Run your skill through the free scanner.

Graded independently by Skillproof — nothing to sell the author. Quality is mechanical + corpus-grounded; safety flags are heuristic (builtin+triage), not a malicious verdict.