Get the app Map (opens in a new tab)List your business

Developers

Linking

merchant consent

How a merchant links your system to their AurMap account with a code or QR, the scopes they approve, and how either side unlinks and what follows.

Coming soonThe Partner API is not open yet. These docs are here so you can plan your integration; hosts and keys are issued at launch.Register as a developer →

On this page

Endpoints and scopes

Request Scope
POST /link-codes none
GET /link-codes/{code} none
GET /links none
GET /links/{link_id} none
DELETE /links/{link_id} none

The idea

You reach no merchant’s data without their consent. Consent is given with a link code your system issues and the merchant enters in their AurMap account.

  1. Your system asks for a code for one of its branches.
  2. You show the code to the merchant as text or a QR in your back office.
  3. The merchant scans it from their AurMap account, picks the place, reviews the scopes and approves. Only someone holding the “AurMap and integrations” permission in the merchant’s account can approve.

On the approval screen the merchant sees your verified partner name and logo from the developer dashboard, not the external_location_name you send. That way nobody can pose as another partner. 4. You receive link.created.

A code is valid for 15 minutes and works once.

Scopes

Scope Allows
catalog:write publishing the menu, and later products
inventory:write sold out, pause, temporary prices, stock
orders:read receiving and reading order events
orders:write accepting, rejecting, moving and cancelling orders; pausing ordering at the place
offers:write publishing offers Coming soon
accounting:read daily accounting and payouts Coming soon
customer:contact the customer’s full mobile number in orders and events; without it the number arrives masked, like +9665••••••01

There are seven scopes. The merchant grants customer:contact with a separate consent, to protect customers’ personal data under the Personal Data Protection Law. Ask for it only if your system needs it, such as a loyalty programme that matches customers by number. Before you can ask for it, our team approves your account for it, and the merchant sees the purpose you declared on the approval screen.

Ask only for what you need. The merchant sees the list before approving.

Level Covers For
place one place: the main place or one branch POS, e-menus and shops
merchant every place of the merchant, now and later accounting systems; allows only accounting:read and orders:read

A place has one menu source. If the merchant links a place that already has another source, we ask them which one stays. A place never has two sources at once.

POST /link-codes

Field Type Required Description
level place or merchant yes link level
external_location_id string with place the branch id in your system, up to 64 chars of [A-Za-z0-9_.-], no colon :
external_location_name string no a name the merchant sees when approving
scopes list yes requested scopes
bash
aurmap POST /v1/link-codes '{"level":"place","external_location_id":"pos-branch-17","external_location_name":"Al Rayhan, Olaya","scopes":["catalog:write","inventory:write","orders:read","orders:write"]}'

201

json
{
  "code": "7KQ2M9XA",
  "display_code": "7KQ2-M9XA",
  "qr_url": "https://aurmap.com/link/7KQ2M9XA",
  "qr_png_url": "https://partners.aurmap.com/v1/link-codes/7KQ2M9XA/qr.png",
  "status": "pending",
  "expires_at": "2026-10-14T12:15:00Z"
}

Show display_code as it is, or a QR that opens qr_url. The code is 8 letters and digits with no I, L, O or U, so merchants do not mistype it.

js
const code = await aurmap('POST', '/v1/link-codes', {
  level: 'place',
  external_location_id: 'pos-branch-17',
  external_location_name: 'Al Rayhan, Olaya',
  scopes: ['catalog:write', 'inventory:write', 'orders:read', 'orders:write'],
});
showToMerchant(code.display_code, code.qr_url);
php
$code = aurmap('POST', '/v1/link-codes', [
    'level' => 'place',
    'external_location_id' => 'pos-branch-17',
    'external_location_name' => 'Al Rayhan, Olaya',
    'scopes' => ['catalog:write', 'inventory:write', 'orders:read', 'orders:write'],
]);

Follow a code

The link.created event is enough. To show the merchant the result right away, ask about the code:

bash
aurmap GET /v1/link-codes/7KQ2M9XA
json
{ "code": "7KQ2M9XA", "status": "redeemed", "link_id": "lnk_2h6j4n" }

Statuses: pending, redeemed, expired, declined.

json
{
  "link_id": "lnk_2h6j4n",
  "mode": "live",
  "level": "place",
  "merchant": { "merchant_id": "mer_5r8k2d", "name": "مطعم الريحان" },
  "place": { "place_id": "plc_9q3w7e", "name": "الريحان - العليا" },
  "external_location_id": "pos-branch-17",
  "scopes": ["catalog:write", "inventory:write", "orders:read", "orders:write"],
  "created_at": "2026-10-14T12:03:11Z",
  "removed_at": null
}
Request Description
GET /links all your links, paged
GET /links/{link_id} one link
DELETE /links/{link_id} unlink from your side

Adding a scope

Issue a new code with every scope you want, old and new. When the merchant approves, the same link is updated and you receive link.updated. No scope is added without the merchant.

Unlinking

  • The merchant can remove the link at any time from their account.
  • You can remove it with DELETE /links/{link_id}.
  • Either way you receive link.removed, with removed_by: merchant, partner or aurmap.
bash
aurmap DELETE /v1/links/lnk_2h6j4n
json
{ "link_id": "lnk_2h6j4n", "removed_at": "2026-10-20T08:00:00Z", "removed_by": "partner" }

After unlinking:

  • Any call on that place answers 410 LINK_REMOVED.
  • Your menu leaves the place page within a minute.
  • Orders that arrived before the unlink can still be finished for 24 hours, so nothing is stranded in a kitchen.

Common errors

Code Meaning
LINK_CODE_EXPIRED the code expired; issue a new one
LINK_CODE_USED the code was already used
LOCATION_ALREADY_LINKED this branch in your system is linked to another place
LINK_REQUIRED you have no link to this place
SCOPE_MISSING the link lacks the required scope
LINK_REMOVED the link was removed