Granli
ProductsNetworkSolutionsDevelopersCompany
中文Log inGet started
GranliGrand Link LLC

Cloud communications infrastructure for conversations that need to cross borders without losing context, speed or trust.

support@granlicom.com

Global operations · Grand Link LLC

Platform

ProductsNetworkSolutionsDevelopersCompany

Resources

Contact salesLog inGet started

Legal

Terms of ServicePrivacy PolicyAcceptable Use

Signal briefing

Useful infrastructure notes, delivered occasionally.

© 2026 Grand Link LLC. All rights reserved.

Earth imagery: NASA/Goddard

Granli for developers

Communication infrastructure with a readable interface.

Make a request, observe its lifecycle and keep the customer experience inside your own product. Granli handles the routes behind it.

Create a developer accountReview an integration
POST /api/v1/messages
curl $ONEHUB_API_URL/api/v1/messages \
  -H "Authorization: Bearer $GRANLI_KEY" \
  -H "x-onehub-site: $ONEHUB_SITE" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "sms",
    "to": "+14155550123",
    "body": "Your code is 482019"
  }'
201 acceptedreq_8f31a
01
Use native fetchglobalThis.fetch()
02
Set a scoped keyGRANLI_API_KEY=••••••••
03
Send the first requestnew URL("/api/v1/messages", process.env.ONEHUB_API_URL)

Request lifecycle

Every state has a clear place to go.

Move from public channel discovery to authenticated message creation, then inspect the resulting record by ID.

01

Discover

Read the public channel list, per-message pricing and site currency before choosing a configured route.

GET /api/v1/channels
02

Authenticate

Keep a session token or API key on the server and send it with the Bearer authorization scheme.

Authorization: Bearer ...
03

Create

Submit a channel, recipient, and either a body or templateKey. A successful request returns a message record.

POST /api/v1/messages -> 201
04

Inspect

Use the returned message identity to request the current message detail within the same site scope.

GET /api/v1/messages/{id}

Core resources

A small surface for substantial workflows.

Use consistent resource shapes across messaging, templates, channels and delivery inspection.

POST/api/v1/messages

Send a message

Submit one transactional message to a configured channel.

POST/api/v1/messages/batch

Send a bounded batch

Create multiple messages while preserving item-level outcomes.

GET/api/v1/messages/{id}

Inspect delivery

Read the current lifecycle and request context for one signal.

GET/api/v1/channels

Discover channels

Read public availability, unit cost and site currency.

POST/api/v1/templates

Create a template

Manage reusable approved content with explicit variables.

Response handling

Make every documented response actionable.

The API exposes message lookup, structured errors, request IDs and rate-limit headers so applications can react without guessing.

ResponseDocumented meaningApplication action
201 CreatedThe API returned a message record with delivery status, segment count and cost.Store its returned identity.
GET /messages/{id}The message belongs to the current site and authenticated sender.Read the latest message detail.
404 not_foundThe site has no matching message, or it does not belong to the caller.Do not infer global existence.
429 rate_limitedThe caller exceeded the documented request limit.Wait for Retry-After before retrying.
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests",
    "requestId": "req_8f31a"
  },
  "message": "Too many requests"
}

Keep the x-request-id value when investigating a failure

Credential discipline

Give every integration only the authority it needs.

Keep credentials on the server, separate environments and connect each action to a request identifier.

01

Server-side keys

Never place API secrets in public bundles or mobile application code.

02

Scoped environments

Separate development and production access, credentials and traffic.

03

Bounded retries

Read structured error codes and Retry-After instead of blindly replaying an unknown outcome.

04

Traceable errors

Retain request IDs while showing safe, localized messages to customers.

Production checklist

A launch gate built around real routes.

Before moving traffic, validate behavior at both the API boundary and the final market.

Sender identity approved

Required registrations, templates and branded identities are active per market.

Consent evidence retained

The product records the lawful basis and opt-out state for each recipient.

Responses verified

Success, validation, authentication, not-found and rate-limit responses are exercised safely.

Fallback bounded

Channel changes respect customer preference, urgency and local rules.

Ownership clear

Product, support and network teams know who responds to each failure class.

Make the first request useful

Bring one customer moment to the API.

Create an account for access or review the integration path with a Granli specialist.

Create accountTalk to an engineer