InstaPin

Developers

Create arrival links from your app, with an exact location, parking and entrance pins, notes and directions in Apple Maps, Google Maps or Waze.

Get an API key

Authentication

Sign in and create a key in Dashboard → Developers. The full key is shown once. Keep it on your server, not in public website code. Revoked keys stop working immediately.

Authorization: Bearer <your API key>

Base URL: https://instap.in/api/public/v1. The short /v1 paths redirect here with HTTP 308; use this base URL directly for integrations.

Limits and validation

60 requests per key in a 60-second window starting with its first request. Excess requests return 429 with Retry-After in seconds. Each authenticated request counts, including invalid inputs. Responses include X-RateLimit-Remaining.

Create an arrival link

Provide an address or both lat and lng. Coordinates take priority when both are supplied. name, note, extra pins, expires_at and external_id are optional.

curl -X POST 'https://instap.in/api/public/v1/links' \
  -H "Authorization: Bearer $INSTAPIN_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"Maya & Jordan’s Wedding","address":"1200 Hill Rd, Miami, FL","note":"Look for the white tent","pins":[{"kind":"parking","lat":25.7619,"lng":-80.1921,"note":"Lot B, free"},{"kind":"entrance","lat":25.7615,"lng":-80.1915,"note":"Garden gate"}],"external_id":"partner-event-123"}'

201 Created · Example response

{
  "id": "6fcd2d75-b8e5-45c8-b7c7-74a688231512",
  "url": "https://instap.in/k7f2q",
  "slug": "k7f2q",
  "name": "Maya & Jordan's Wedding",
  "lat": 25.7617,
  "lng": -80.1918,
  "label": "1200 Hill Rd, Miami, FL",
  "note": "Look for the white tent",
  "pins": [
    {
      "kind": "main",
      "lat": 25.7617,
      "lng": -80.1918,
      "label": "1200 Hill Rd, Miami, FL",
      "note": "Look for the white tent"
    },
    {
      "kind": "parking",
      "lat": 25.7619,
      "lng": -80.1921,
      "label": "Lot B",
      "note": "Free parking"
    }
  ],
  "created_at": "2026-10-29T21:00:00Z",
  "external_id": "partner-event-123",
  "expires_at": null,
  "active": true,
  "stats": {
    "page_views": 0,
    "direction_taps": {
      "apple": 0,
      "google": 0,
      "waze": 0
    }
  }
}

Read a link and its stats

Get a link owned by your account, its pins and lifetime direction taps by maps app.

curl 'https://instap.in/api/public/v1/links/LINK_ID' -H "Authorization: Bearer $INSTAPIN_API_KEY"

200 OK · Example response

{
  "id": "6fcd2d75-b8e5-45c8-b7c7-74a688231512",
  "url": "https://instap.in/k7f2q",
  "slug": "k7f2q",
  "name": "Maya & Jordan's Wedding",
  "lat": 25.7617,
  "lng": -80.1918,
  "label": "1200 Hill Rd, Miami, FL",
  "note": "Look for the white tent",
  "pins": [
    {
      "kind": "main",
      "lat": 25.7617,
      "lng": -80.1918,
      "label": "1200 Hill Rd, Miami, FL",
      "note": "Look for the white tent"
    },
    {
      "kind": "parking",
      "lat": 25.7619,
      "lng": -80.1921,
      "label": "Lot B",
      "note": "Free parking"
    }
  ],
  "created_at": "2026-10-29T21:00:00Z",
  "external_id": "partner-event-123",
  "expires_at": null,
  "active": true,
  "stats": {
    "page_views": 0,
    "direction_taps": {
      "apple": 0,
      "google": 0,
      "waze": 0
    }
  }
}

Update an arrival link

Change name, note, address, coordinates, pins, expiry or external ID. Omitted fields remain unchanged; pins replaces the extra pins, while an empty array removes them. The URL stays the same. Set expires_at to null to remove expiry.

curl -X PATCH 'https://instap.in/api/public/v1/links/LINK_ID' \
  -H "Authorization: Bearer $INSTAPIN_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"lat":25.7618,"lng":-80.1920,"note":"Use the north gate"}'

200 OK · Example response

{
  "id": "6fcd2d75-b8e5-45c8-b7c7-74a688231512",
  "url": "https://instap.in/k7f2q",
  "slug": "k7f2q",
  "name": "Maya & Jordan's Wedding",
  "lat": 25.7618,
  "lng": -80.192,
  "label": "1200 Hill Rd, Miami, FL",
  "note": "Use the north gate",
  "pins": [
    {
      "kind": "main",
      "lat": 25.7617,
      "lng": -80.1918,
      "label": "1200 Hill Rd, Miami, FL",
      "note": "Look for the white tent"
    },
    {
      "kind": "parking",
      "lat": 25.7619,
      "lng": -80.1921,
      "label": "Lot B",
      "note": "Free parking"
    }
  ],
  "created_at": "2026-10-29T21:00:00Z",
  "external_id": "partner-event-123",
  "expires_at": null,
  "active": true,
  "stats": {
    "page_views": 0,
    "direction_taps": {
      "apple": 0,
      "google": 0,
      "waze": 0
    }
  }
}

Deactivate a link

The link is retained in your account. Visitors see “This pin is no longer active”. Expired links show the same message.

curl -X DELETE 'https://instap.in/api/public/v1/links/LINK_ID' -H "Authorization: Bearer $INSTAPIN_API_KEY"

200 OK · Example response

{
  "id": "6fcd2d75-b8e5-45c8-b7c7-74a688231512",
  "active": false
}

Look up a partner ID

Returns up to 100 matching links from your account. Other accounts’ links are never returned.

curl 'https://instap.in/api/public/v1/links?external_id=partner-event-123' -H "Authorization: Bearer $INSTAPIN_API_KEY"

200 OK · Example response

{
  "links": [
    {
      "id": "6fcd2d75-b8e5-45c8-b7c7-74a688231512",
      "url": "https://instap.in/k7f2q",
      "slug": "k7f2q",
      "name": "Maya & Jordan's Wedding",
      "lat": 25.7617,
      "lng": -80.1918,
      "label": "1200 Hill Rd, Miami, FL",
      "note": "Look for the white tent",
      "pins": [
        {
          "kind": "main",
          "lat": 25.7617,
          "lng": -80.1918,
          "label": "1200 Hill Rd, Miami, FL",
          "note": "Look for the white tent"
        },
        {
          "kind": "parking",
          "lat": 25.7619,
          "lng": -80.1921,
          "label": "Lot B",
          "note": "Free parking"
        }
      ],
      "created_at": "2026-10-29T21:00:00Z",
      "external_id": "partner-event-123",
      "expires_at": null,
      "active": true,
      "stats": {
        "page_views": 0,
        "direction_taps": {
          "apple": 0,
          "google": 0,
          "waze": 0
        }
      }
    }
  ]
}

Errors

{
  "error": {
    "code": "invalid_lat",
    "message": "lat: lat must be between -90 and 90"
  }
}
400
invalid_<field>, invalid_json

Check the named field or JSON body.

401
invalid_api_key

Key is missing, invalid or revoked.

404
link_not_found

No API link with that ID belongs to your account.

413
body_too_large

Body exceeds 64 KB.

422
address_not_found

Couldn't find that address.

429
rate_limit_exceeded

Wait for the Retry-After delay.

500 / 503
internal_error, geocoding_unavailable

Try again later.

Try it