1分で読了エンジニアリング

無料URL短縮API: 実際に動くコード例

curl、JavaScript、Python、Goで実行可能な無料URL短縮APIのコード例。加えて正直な部分、つまり無料枠が制限するものと本番運用に必要なものも解説。

Marius Voß
DevRel · edge infra
無料URL短縮API: ベアラートークン付きのPOSTリクエストが短縮リンクを返す様子。ターミナルとcurl、JavaScript、Python、Goのコード例を並べて表示

無料URL短縮APIを使えば、ダッシュボードをクリックして回るのではなく、コードから短縮リンクを作成できます。遷移先URLを添えたリクエストを送ると、そこへリダイレクトする短縮リンクが返ってきます。この記事には、無料プランで利用できるElidoのAPIに対する、curl、JavaScript、Python、Goでの実行可能なコード例に加え、大半のリストにありがちな部分では省かれがちな正直な話、つまり「無料」が実際に何を制限するのかも扱います。

リンクを一度も短縮したことがない場合は、まずURLの短縮方法で手動での方法を確認してください。以下はすべて、プログラムから行いたい前提です。

短縮APIが行うこと

その中核において、APIはリンクリソースに対する4つの操作、すなわち作成、読み取り、更新、削除です。遷移先URLをPOSTすることでリンクを作成し、サービスは別の場所で解決される短縮URLを返します。

つまずきやすい点が一つあります。APIのホストとリダイレクトのホストは異なります。ElidoのAPIはhttps://api.elido.app/v1にありますが、短縮リンク自体はs.elido.meのようなリダイレクトドメインで解決されます。リンクを管理するにはAPIとやり取りしますが、ユーザーが実際にアクセスするのは常にリダイレクトドメインだけです。この2つを分けておくことで、APIがより重い処理を行う一方、リダイレクトの経路は高速なままに保たれます。

まず認証する

実際のリクエストにはすべて、Authorizationヘッダーにベアラートークンが付きます。トークンはワークスペースの設定で生成し、環境変数として保存し、クライアント側のコードには決して入れないでください。トークンを持つ者は誰でもあなたのアカウントでリンクを作成できてしまうからです。

export ELIDO_TOKEN="your_token_here"

認証モデルはこれがすべてです。すべての呼び出しにAuthorization: Bearer $ELIDO_TOKENという1つのヘッダーを付けます。これを完全に省いているAPIは使い捨てのスクリプトには手軽ですが、リンクの背後にアカウントがないため、後から一覧表示、編集、計測ができません。

短縮リンクを作成する

同じ作成呼び出しを4つの言語で見てみましょう。それぞれ遷移先URLをPOSTし、レスポンスから短縮URLを出力します。

curl -X POST https://api.elido.app/v1/links \
  -H "Authorization: Bearer $ELIDO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"destination_url": "https://example.com/spring-sale"}'

レスポンスはJSONです。

{
  "id": "lnk_9aF2xK",
  "short_url": "https://s.elido.me/abc123",
  "destination_url": "https://example.com/spring-sale"
}

JavaScript、組み込みのfetchを使用。

const res = await fetch("https://api.elido.app/v1/links", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ELIDO_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ destination_url: "https://example.com/spring-sale" }),
});
const link = await res.json();
console.log(link.short_url); // https://s.elido.me/abc123

Python、requestsを使用。

import os
import requests

res = requests.post(
    "https://api.elido.app/v1/links",
    headers={"Authorization": f"Bearer {os.environ['ELIDO_TOKEN']}"},
    json={"destination_url": "https://example.com/spring-sale"},
)
print(res.json()["short_url"])  # https://s.elido.me/abc123

Go、標準ライブラリを使用。

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

func main() {
	body, _ := json.Marshal(map[string]string{
		"destination_url": "https://example.com/spring-sale",
	})
	req, _ := http.NewRequest("POST", "https://api.elido.app/v1/links", bytes.NewReader(body))
	req.Header.Set("Authorization", "Bearer "+os.Getenv("ELIDO_TOKEN"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	var link struct {
		ShortURL string `json:"short_url"`
	}
	json.NewDecoder(res.Body).Decode(&link)
	fmt.Println(link.ShortURL) // https://s.elido.me/abc123
}
A POST request to the links endpoint with a bearer token and a destination URL in the body, returning a JSON response with the short URL that resolves at the redirect domain

必要に応じて、本文にオプションのフィールドを追加できます。カスタムの後半部分用のslug、整理用のtags、ブランドカスタムドメインを選ぶためのdomain、特定の日付以降無効になるリンク用のexpires_atなどです。

「無料」が実際に制限するもの

ここが正直な比較のしどころです。「無料API」という言葉は、実は大きく異なる2つのものを指しているからです。

サインアップ不要、認証不要のエンドポイント、つまり1回の認証なしのPOSTでURLを短縮するものは、本当に無料であり、本当に制限されています。共有のレート制限、アカウントなし、ブランドドメインなし、分析なし、そしてそのサービスが来四半期も存在している保証もありません。使い捨てのスクリプトには十分ですが、実際に公開するものにはリスクがあります。

より有用なのは認証付きの無料枠であり、そこでの制限は予測可能です。有料プランに最もよく取っておかれる機能は、ブランドカスタムドメイン、高いリクエスト量、より長い分析データ保持期間、一括処理用のエンドポイントです。Elidoの無料プランでは、API自体が含まれており、リンクは解決されトラッキングもされ、制限は見知らぬ他人と共有ではなくワークスペース単位です。有料ツールがこの点でどう比較されるかについては、Dub対Bitlyが最もよく知られた2つのAPIを扱っており、無料プランから始めてElidoのAPIを試すこともできます。

経験則としては、そのリンクが使い捨てなら認証なしのAPIで十分です。あなたのブランドを背負う、あるいは計測が必要なら、自分が管理するドメインを持つ認証付きのAPIを使ってください。

レート制限と冪等性

本番運用であなたを実際に守ってくれる数値は、レート制限ではなく冪等性です。

すべての変更を伴うリクエストはIdempotency-Keyヘッダーを受け付けます。作成呼び出しに一意のキーを付けて送信し、もしリクエストがタイムアウトして同じキーで再試行した場合、サーバーは2つ目のリンクを作成する代わりに元の結果を返します。これが再試行ループを安全にする仕組みです。

curl -X POST https://api.elido.app/v1/links \
  -H "Authorization: Bearer $ELIDO_TOKEN" \
  -H "Idempotency-Key: spring-sale-2026-04-01" \
  -H "Content-Type: application/json" \
  -d '{"destination_url": "https://example.com/spring-sale"}'

冪等性はRFC 9110におけるHTTPメソッドのセマンティクスの特性の一つであり、自動でのリンク作成に使うAPIであれば対応しているべきものです。どのステータスコードで再試行すべきか、レート制限に対してどうペースを合わせるかについての詳しい解説は、本番環境でのレート制限、再試行、冪等性にあります。

A create request that times out is retried with the same idempotency key, and the server returns the original link instead of creating a duplicate

SDKか、素のHTTPか

リクエストを自前で組み立てる必要はありません。ElidoはOpenAPI仕様から生成されたTypeScript、Python、Goなどのためのライブラリを提供しており、API・SDKクイックスタートでインストール方法と呼び出し方を解説しています。

型付け、再試行、ページネーションを代わりに処理してほしい場合はSDKを使ってください。依存関係をゼロにしたい場合や、公式クライアントがない言語から呼び出す場合は、上記の例のような素のHTTPを使ってください。どちらも同じREST APIにアクセスしており、SDKはそこへの薄い経路に過ぎません。

ブログの関連記事

よくある質問

無料のURL短縮APIはありますか?

あります。無料プランでAPIが利用できるElidoを含め、複数の短縮サービスが無料APIを提供しています。重要な違いは、認証、自分のブランドドメイン、妥当なレート制限、分析が得られるか、それとも単なる素のショート化エンドポイントだけか、という点です。サインアップ不要のおもちゃのようなAPIはスクリプト用途には十分ですが、本番運用には認証、自分で管理するドメイン、稼働率が必要です。

APIでURLを短縮するにはどうすればいいですか?

認証付きのPOSTリクエストを、本文に遷移先URLを入れて送信します。Elidoの場合、POST https://api.elido.app/v1/links にAuthorizationベアラートークンと{"destination_url": "..."}というJSON本文を付けて送ります。レスポンスには短縮URLが返され、それはリダイレクトドメインで解決されます。この記事のcurl、JavaScript、Python、Goの各コード例は、まさにこれを行っています。

URLを短縮するのにAPIキーは必要ですか?

本格的な用途であれば必要です。一部の無料APIは認証を完全に省いていますが、これは手軽な一方、アカウントもリンク管理も分析もなく、同じエンドポイントを叩く他のすべての人と共有のレート制限になります。APIキーやベアラートークンはリンクをあなたのワークスペースに紐付けるため、後から一覧表示、編集、計測ができ、レート制限も自分専用になります。

無料URL短縮APIの典型的なレート制限はどのくらいですか?

大きく異なり、認証なしの公開エンドポイントでは1時間あたり約100リクエスト程度から、認証付きAPIではワークスペース単位のトークンバケット制限まであります。数値そのものより重要なのは、そのAPIが冪等性キーをサポートしているかどうかです。それにより、タイムアウト後に再試行したリクエストが重複したリンクを作成しないようにできます。再試行しても安全であることは、単純に上限が高いことに勝ります。

無料の短縮APIを自分のドメインで使えますか?

プランによります。ブランドカスタムドメインは、DNSと証明書の扱いが絡むため、最も有料ティアの向こう側に置かれがちな機能です。無料枠で少なくとも1つのカスタムドメインを指定できるか、それとも無料リンクがプロバイダーの共有ドメインに固定されているかを確認してください。ブランド化されたリンクが重要であれば、構築前にこれを確認してください。

Elidoを試す

URLを貼り付けて短縮リンクを取得

登録不要。リンクは30日間有効。永久に保存するには登録してください。

Free、登録不要 · 1日あたり2件

Elidoを試す

EUホスティングのURL短縮サービス。カスタムドメイン、詳細な分析、オープンAPI付き。無料プラン - クレジットカード不要。

タグ
free url shortener api
url shortener api
shorten url api
link shortener api
rest api short links
api code examples

続きを読む