Auðkenning í 4invoices API

Skiptu client_id og client_secret fyrir Bearer-token sem gildir í eina klukkustund, eingöngu netþjón-við-netþjón.

Skiptu client_id og client_secret fyrir Bearer-token sem gildir í eina klukkustund, eingöngu netþjón-við-netþjón.

← Til baka í API-skjölin

Fyrsti reikningurinn þinn í 6 skrefum

  1. Búðu til skilríkin í spjaldinu undir Reikningagerð → Stillingar → API aðgangur og afritaðu client_secret strax — það birtist einu sinni.
  2. Sendu POST /v1/auth/token með grant_type client_credentials, client_id og client_secret.
  3. Þú færð til baka access_token, token_type Bearer, expires_in 3600 og lista yfir veittar heimildir.
  4. Settu tókenið í Authorization: Bearer <access_token>-haus á öll hin köllin.
  5. Athugaðu hvað þú fékkst í raun með GET /v1/me: leigjanda, heimildir og núverandi hraðafötur.

Allir endapunktar

AðferðEndapunkturScopeIdempotency-KeyBeiðnir / mínútu
POST/auth/token
Skiptu skilríkjum fyrir access token
——120
GET/me
Leigjandi, heimildir og núverandi mörk
invoices:read—120

Hvað eru forritaskil 4invoices

bash
curl -sS -X POST https://api.4invoices.net/v1/auth/token \
  -H 'Content-Type: application/json' \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "cli_XXXXXXXXXXXX",
    "client_secret": "sec_XXXXXXXXXXXXXXXXXXXX"
  }'

# → {"access_token":"eyJ...","token_type":"Bearer","expires_in":3600,
#    "scope":"invoices:read invoices:write efactura:submit"}
bash
curl -sS https://api.4invoices.net/v1/me \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# → leigjandi, veittar heimildir og núverandi hraðafötur
javascript
// Geymdu tókenið í skyndiminni; ekki búa til nýtt fyrir hverja beiðni.
let cached = { token: "", expiresAt: 0 };

async function getToken() {
  if (cached.token && Date.now() < cached.expiresAt - 60_000) return cached.token;

  const res = await fetch("https://api.4invoices.net/v1/auth/token", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      grant_type: "client_credentials",
      client_id: process.env.FOURINVOICES_CLIENT_ID,
      client_secret: process.env.FOURINVOICES_CLIENT_SECRET,
    }),
  });
  if (!res.ok) throw new Error(`token ${res.status}`);

  const data = await res.json();
  cached = { token: data.access_token, expiresAt: Date.now() + data.expires_in * 1000 };
  return cached.token;
}

https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json

Scopes (heimildir)

  • invoices:read
  • invoices:write
  • clients:read
  • clients:write
  • efactura:read
  • efactura:submit
Eingöngu netþjón-við-netþjón. Kallaðu aldrei á API-ið úr JavaScript í vafra: client_secret færi þá til gestsins, og CORS hafnar hvort sem er öllum uppruna.

Villur

StaðaTegundKóði
401authentication_errorinvalid_client
401authentication_errortoken_expired
401authentication_errorinvalid_token
403permission_errorinsufficient_scope

Algeng mistök

  • Tókenaendapunkturinn hefur sín eigin mörk á hverja IP-tölu. Eitt token á hvert ferli, endurnýjað fyrir gildislok — ekki eitt á hverja beiðni.
  • client_secret er aðeins geymt sem hakk; týnir þú því býrðu til nýtt skilríki og afturkallar það gamla.
  • Gefðu út sérstök skilríki fyrir ERP-kerfið, vefverslunina og innri skriftur, hvert með lágmarksheimildum. Afturköllun eins hefur engin áhrif á hin.
  • CORS leyfir engan uppruna í vafra: API-ið er netþjón-við-netþjón samkvæmt hönnun.

Spurningar og svör fyrir þróendur

Hvað gerist ef client_secret er rangt?

Þú færð 401 með kóðanum invalid_client. Of stutt leyndarmál fellur fyrr, við staðfestingu, með 422 validation_failed og param client_secret.

Er til sérstakt prófunarumhverfi?

Nei. Það er einn framleiðsluhýsill. Prófaðu með proforma-reikningum (document_kind proforma) og með /invoices/preview-totals, sem notar ekkert fjárhagsnúmer.

Get ég þrengt heimildir á núverandi skilríki?

Já, úr spjaldinu. Token sem þegar hafa verið gefin út halda þeim heimildum sem þau voru búin til með þar til þau renna út, innan einnar klukkustundar.