Metadata-Version: 2.4
Name: norbelys
Version: 0.1.0
Summary: Norbelys API
Home-page: https://norbelys.com
Author: OpenAPI Generator community
Author-email: team@openapitools.org
Keywords: OpenAPI,OpenAPI-Generator,Norbelys API
Description-Content-Type: text/markdown
Requires-Dist: urllib3<3.0.0,>=1.25.3
Requires-Dist: python-dateutil>=2.8.2
Requires-Dist: pydantic>=2
Requires-Dist: typing-extensions>=4.7.1
Dynamic: author
Dynamic: author-email
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: requires-dist
Dynamic: summary

    The **Norbelys API** is a single, predictable REST surface for cold email and outreach — people, senders, programs, and sending all live behind the five patterns below. Developer-first and AI-first: every name is either already invented (Schema.org) or obvious.  ## Authentication  Every request authenticates with an **org-scoped API key**. Create one in **Settings → API keys** and send it as a bearer token:  &#x60;&#x60;&#x60;http GET https://api.norbelys.com/v1/people Authorization: Bearer ak_live_… &#x60;&#x60;&#x60;  Interactive agents may instead use OAuth 2.1 (see &#x60;/auth.md&#x60; and the &#x60;/.well-known/oauth-protected-resource&#x60; metadata).  ## Conventions  - **Base URL** — &#x60;https://api.norbelys.com/v1&#x60;. - **JSON in, JSON out.** Timestamps are ISO-8601 in UTC. - **Cursor pagination.** List endpoints take &#x60;limit&#x60; + &#x60;cursor&#x60; and return   &#x60;{ data, hasMore, nextCursor }&#x60; (offset-paged tables add &#x60;page&#x60; + &#x60;total&#x60;). - **Expansions.** Detail GETs take an &#x60;expand[]&#x60; query param to inline related   data (e.g. &#x60;GET /people/{id}?expand[]&#x3D;timeline&#x60;) instead of extra calls. - **Soft deletes.** Anything that has been used is archived, never hard-deleted —   &#x60;DELETE&#x60; archives the resource and returns it.  ## Errors  Failures return the same envelope on every 4xx/5xx, with the matching HTTP status:  &#x60;&#x60;&#x60;json { \&quot;error\&quot;: { \&quot;type\&quot;: \&quot;invalid_request\&quot;, \&quot;code\&quot;: \&quot;invalid_param\&quot;,             \&quot;message\&quot;: \&quot;…\&quot;, \&quot;hint\&quot;: \&quot;…\&quot;, \&quot;doc_url\&quot;: \&quot;…\&quot; } } &#x60;&#x60;&#x60;  &#x60;type&#x60; is a broad, machine-routable category derived from the status; &#x60;code&#x60; is the stable machine contract you branch on (never the human &#x60;message&#x60;). See the &#x60;ApiError&#x60; schema.  ## Idempotency  Every &#x60;POST&#x60; accepts an optional **&#x60;Idempotency-Key&#x60;** header. Reuse the same key to replay the original result for 24h instead of re-executing — so a retried create can never double-charge or duplicate a record.  ## Rate limits &amp; versioning  Abuse control is enforced at the edge; responses advertise the policy via the &#x60;RateLimit-Policy&#x60; header, and a &#x60;429&#x60; carries &#x60;Retry-After&#x60;. The API is versioned in the URL path (&#x60;/v1&#x60;). Breaking changes ship under a new version; a retiring surface is announced with &#x60;Deprecation&#x60; + &#x60;Sunset&#x60; response headers at least 90 days ahead.
    
