FeaturesPricingWhy UsBlogContactLogin

Nimblo API Reference

Programmatic access to your organization's clients and proposals.Note: The API is available exclusively on the Enterprise plan.

Authentication & Basics

All requests require an API key to be passed in the Authorization header as a Bearer token. You can generate your API key in the application under Integrations → API Access → Generate Key.

The key is displayed only once upon creation. Store it securely. Do not share it publicly.

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Endpoint & Architecture

Nimblo API uses a single gateway endpoint. All operations are performed using a POST request. The actual operation is determined by the resource and method parameters inside the JSON body.

POST https://app.nimblo.io/functions/apiGateway

Rate Limiting

Maximum 60 requests per minute per API key. Exceeding this limit will return a 429 Too Many Requests response.

Security

Each key is scoped to a single organization. Keys are stored as SHA-256 hashes. You can rotate or revoke keys at any time in the dashboard.

Base Request Format

{
  "resource": "clients | proposals",
  "method": "GET | POST | PUT | DELETE",
  // ...additional parameters
}

1. Clients Resource

List / Get Clients

// List all clients
{
  "resource": "clients",
  "method": "GET"
}

// Get a specific client
{
  "resource": "clients",
  "method": "GET",
  "id": "client_id"
}

Create Client

Required field: company_name

{
  "resource": "clients",
  "method": "POST",
  "company_name": "Acme s.r.o.",
  "email": "info@acme.cz",
  "ico": "12345678",
  "address": "Ulice 1, Praha"
}

Update / Delete Client

Required field: id

// Update client
{
  "resource": "clients",
  "method": "PUT",
  "id": "client_id",
  "company_name": "New Company Name",
  "email": "new@email.com"
}

// Delete client
{
  "resource": "clients",
  "method": "DELETE",
  "id": "client_id"
}

2. Proposals Resource

List & Filter Proposals

Supported filters: id, client_id, status (draft, sent, won, lost, concept)

// Filter proposals
{
  "resource": "proposals",
  "method": "GET",
  "status": "sent",
  "client_id": "client_id"
}

Create Proposal

Required field: title

{
  "resource": "proposals",
  "method": "POST",
  "title": "Website Redesign",
  "client_id": "client_id",
  "currency": "USD",
  "total_value": 15000,
  "status": "draft"
}

Update / Delete Proposal

Required field: id

// Update proposal
{
  "resource": "proposals",
  "method": "PUT",
  "id": "proposal_id",
  "status": "sent",
  "total_value": 18000
}

// Delete proposal
{
  "resource": "proposals",
  "method": "DELETE",
  "id": "proposal_id"
}

Responses & Status Codes

Success Response

{
  "data": [ ... ]
}

Error Response

{
  "error": "Error description message"
}
CodeDescription
200Success
400Bad Request (missing required field, unknown resource)
401Unauthorized (invalid or missing API key)
404Not Found (record does not exist)
405Method Not Allowed
429Too Many Requests (rate limit exceeded)
500Internal Server Error

Example Request (cURL)

curl -X POST https://app.nimblo.io/functions/apiGateway \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"resource": "clients", "method": "GET"}'