SigloreAPI

Siglore API

One base URL, bearer keys, JSON in and out. Parse emails into structured contacts, verify and find addresses through the waterfall, and sync your contact base anywhere.

BASE URLhttps://siglore.com/api/v1

Authentication

Create a key in Settings → API keys — it is shown once and stored hashed. Send it on every request. Keys are rate-limited to 120 requests/minute.

Request
curl https://siglore.com/api/v1/credits \
  -H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx"

Credits & pricing

Enrichment bills in credits, and only for delivered answers — a miss across the whole waterfall costs nothing. Parsing costs no credits.

verify1 creditDefinitive deliverability answer (unknown = free)
find-email5 creditsOnly when the found address verifies
person enrich3 creditsOnly when profile data is found

Insufficient balance returns 402 with {"error":"no_credits"}.

POST/parse

Extract every person from a raw email.0 credits

rawstring · requiredFull RFC822 message or plain email text, up to 512 KB
storebooleanAlso merge the people into your contact base (default false)

Parsing spends no credits but counts toward the plan's monthly parse allowance (unlimited on Pro); over the free allowance the endpoint returns 402 monthly_parse_limit.

Request
curl -X POST https://siglore.com/api/v1/parse \
  -H "Authorization: Bearer $SIGLORE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"raw": "...full email including signature...", "store": true}'
Response 200
{
  "people": [
    {
      "emails": ["jane@acme.com"],
      "fullName": "Jane Doe",
      "title": "VP Sales",
      "company": "Acme Corp",
      "companyDomain": "acme.com",
      "phones": [{ "type": "mobile", "number": "+1 416 555 0199" }],
      "socials": [{ "network": "linkedin", "url": "https://linkedin.com/in/janedoe" }],
      "source": "signature",
      "confidence": 0.95
    }
  ],
  "stored": { "created": 1, "updated": 0 }
}

POST/verify

Check whether an address really accepts mail.1 credit on a definitive answer

emailstring · requiredThe address to check
Request
curl -X POST https://siglore.com/api/v1/verify \
  -H "Authorization: Bearer $SIGLORE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "jane@acme.com"}'
Response 200
{
  "jobId": "j_8f2c41",
  "status": "hit",
  "data": { "status": "valid" },
  "creditsCharged": 1
}

data.status is one of valid · invalid · catch_all · unknown (unknown is never charged).

POST/find-email

Name + company domain in, verified address out.5 credits on a verified hit

Cascades across multiple data sources and verifies before charging. No verified find → no charge.

first_namestring · requiredGiven name
last_namestring · requiredFamily name
domainstring · requiredCompany domain, e.g. acme.com
Request
curl -X POST https://siglore.com/api/v1/find-email \
  -H "Authorization: Bearer $SIGLORE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"first_name": "Jane", "last_name": "Doe", "domain": "acme.com"}'
Response 200
{
  "jobId": "j_c90de2",
  "status": "hit",
  "data": { "email": "jane@acme.com", "verification": "valid" },
  "creditsCharged": 5
}

GET/contacts

Paginated export of your contact base.0 credits

offsetintegerPages of 200, default 0
updated_sinceISO 8601Only records changed since — poll for incremental sync
Request
curl "https://siglore.com/api/v1/contacts?updated_since=2026-08-01T00:00:00Z" \
  -H "Authorization: Bearer $SIGLORE_KEY"
Response 200
{
  "contacts": [
    {
      "id": "c_7d31aa",
      "primaryEmail": "jane@acme.com",
      "fullName": "Jane Doe",
      "title": "VP Sales",
      "company": "Acme Corp",
      "phones": [{ "type": "mobile", "number": "+1 416 555 0199" }],
      "firstSeenAt": "2026-05-02T09:12:44.000Z",
      "lastSeenAt": "2026-08-03T18:22:00.000Z"
    }
  ],
  "offset": 0,
  "hasMore": false
}

GET/credits

Current credit balance.0 credits

Response 200
{ "balance": 940 }

Webhooks

Add an endpoint in Settings → Webhooks and we POST contacts.changed events as contacts are created or updated. Every delivery is signed.

Delivery
{
  "event": "contacts.changed",
  "data": { "ingestionId": "i_55ab01", "created": 2, "updated": 1 },
  "workspaceId": "w_19fe2c",
  "at": "2026-08-04T14:22:31.000Z"
}

The X-Siglore-Signature header is t=<unix>,v1=<hex> where v1 = HMAC-SHA256 of "<t>.<body>" with your endpoint secret. Reject anything older than 5 minutes or with a bad signature. Endpoints failing 10 times in a row are paused until re-added.

Errors

400bad requestMissing or malformed input — the error field says which
401unauthorizedMissing, invalid, or revoked key
402no creditsBalance too low for the operation
429rate limitedOver 120 requests/minute — back off and retry
501not configuredThat capability has no active provider yet
Error shape
{ "error": "no_credits" }