ARNPROXY

Bestellung mit Guthaben

POST/account/api/v1/orders/create
Vorgang bewusst bestätigen

Dieser Vorgang kann Datensätze, Guthaben oder Diensteinstellungen ändern. Lesen Sie zuerst Umfang und Hinweise. Bei unklarem Ergebnis denselben Vorgang abfragen statt einen neuen zu starten.

Autorisierung

AuthorizationBearer YOUR_ARNPROXY_API_KEY
Erforderliche Berechtigungpurchases
Acceptapplication/json
Content-Typeapplication/json
Idempotency-Key16–100 Buchstaben, Ziffern, _ oder -. Für denselben Vorgang speichern und wiederverwenden.

Parameter

NameTypBeschreibung
Idempotency-Key
headerErforderlich
string16–100 Buchstaben/Ziffern/_/-. Für Vorgang und Status denselben Wert behalten; nicht mit anderem Inhalt wiederverwenden.
product_id
bodyErforderlich
integerProdukt-ID aus products; 1–2147483647.
lines
bodyErforderlich
object[]1–20 verschiedene Standortzeilen für ein Produkt. location_id nicht doppeln; insgesamt höchstens 100000 Proxys.
lines[].location_id
bodyErforderlich
integerStandort-ID aus dem gewählten Produktkatalog.
lines[].time_id
bodyErforderlich
integerFür diesen Standort angebotene Laufzeit-ID.
lines[].quantity
bodyErforderlich
integer1–100000; zusätzlich gilt product.minimum_quantity.
lines[].purpose_id
bodyErforderlich
integerFür den aktuellen Verwendungszweck-Ablauf 201 senden.
lines[].subpurpose_id
bodyErforderlich
integerAktiver Unterzweck von 201; -1 für Sonstiges.
lines[].other_purpose
bodyBedingt
stringBei subpurpose_id=-1 erforderlich: 1–30 UTF-8-Zeichen, sonst ignoriert.
currency
bodyErforderlich
stringTRY oder USD aus demselben Angebot; muss zur Kontowährung passen.
expected_total_minor
bodyErforderlich
integertotal_minor desselben Angebots als Ganzzahl, nie Dezimalbetrag oder Text. 1–999999999999.
terms
bodyErforderlich
booleanZur ausdrücklichen Zustimmung muss der JSON-Wahrheitswert true gesendet werden, nicht die Zeichenfolge "true".
promo_code
bodyOptional
stringOptionaler Aktionscode, höchstens 100 Bytes. Zwischen Preisabfrage und Kauf/Verlängerung unverändert lassen.
Standardwert: ""
auth
bodyOptional
objectLieferauthentifizierung, Standard {"mode":"username_password"}. Erlaubt keine Verwaltung primärer Zugangsdaten.
auth.mode
bodyBedingt
stringWenn auth vorhanden: username_password oder ip erforderlich. Benutzername/Passwort hier nicht angeben.
auth.ip
bodyBedingt
stringIPv4 nur bei auth.mode=ip erforderlich; bei username_password weglassen.

Anfrageinhalt

Ersetzen Sie YOUR_/FROM_ durch Werte aus Katalog, Angebot oder Umfang. Beispiele lassen die Zustimmung auf false; bestätigen Sie echte Vorgänge nur bewusst.

request.json
{
    "product_id": "FROM_PRODUCTS",
    "lines": [
        {
            "location_id": "FROM_CATALOG",
            "time_id": "FROM_CATALOG",
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": "FROM_CATALOG_CHILDREN"
        }
    ],
    "currency": "FROM_QUOTE",
    "expected_total_minor": "FROM_QUOTE_TOTAL_MINOR",
    "promo_code": "",
    "terms": false
}

Weitere Anwendungsbeispiele

IDs und Preise sind beispielhaft; verwenden Sie echte Werte aus dem Katalog und demselben Angebot. JSON-IDs und expected_total_minor müssen Zahlen sein. Beispiele verwenden bewusst terms=false. Senden Sie terms=true nur nach ausdrücklicher Zustimmung zur kostenpflichtigen Aktion.

Ein Produkttyp, zwei Länder

Verwenden Sie bis zu 20 verschiedene location_id unter einem product_id. Jedes Land erzeugt eine eigene Bestellung; der verknüpfte Einkauf wird in einer Rechnung behandelt. Mengenrabatte werden pro Land berechnet.

application/json
{
    "product_id": 5,
    "lines": [
        {
            "location_id": 10,
            "time_id": 101,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": 202
        },
        {
            "location_id": 11,
            "time_id": 102,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": 202
        }
    ],
    "currency": "TRY",
    "expected_total_minor": 2000,
    "promo_code": "",
    "terms": false
}

Verwendungszweck „Sonstiges“

Für Sonstiges senden Sie subpurpose_id=-1 und other_purpose mit 1–30 Zeichen. Bei anderen Auswahlen ist other_purpose nicht erforderlich. purpose_id bleibt 201.

application/json
{
    "product_id": 5,
    "lines": [
        {
            "location_id": 10,
            "time_id": 101,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": -1,
            "other_purpose": "Custom purpose"
        }
    ],
    "currency": "TRY",
    "expected_total_minor": 1000,
    "promo_code": "",
    "terms": false
}

Anfragebeispiel

cURL
printf 'Authorization: Bearer %s\n' "$ARNPROXY_API_KEY" |
  curl --silent --show-error --header @- \
    --header 'Accept: application/json' \
    --connect-timeout 10 --max-time 30 \
    --header 'Idempotency-Key: YOUR_SAVED_OPERATION_KEY' \
    --request POST --header 'Content-Type: application/json' \
    --data-binary @request.json \
    'https://www.arnproxy.com/account/api/v1/orders/create'

Beispiele werden hier nicht ausgeführt. Speichern Sie den API-Schlüssel in einer serverseitigen Umgebungsvariablen, nie in URLs oder Browsercode. Bereiten Sie request.json für POST vor.

Antworten

201Erfolgsantwort
application/json
{
    "ok": true,
    "data": {
        "state": "accepted",
        "delivery_state_at_acceptance": "queued",
        "currency": "TRY",
        "total": "10.00",
        "total_minor": 1000,
        "checkout_group_id": null,
        "orders": [
            {
                "id": 10001,
                "number": "1000010001",
                "location_id": 10,
                "time_id": 101,
                "quantity": 1,
                "total": "10.00"
            }
        ],
        "accepted_at": "2030-01-01T12:00:00+00:00",
        "automatic_renewal": false,
        "replayed": false
    },
    "meta": {
        "request_id": "000000000000000000000001",
        "phase": "public_v1",
        "source": "arnproxy_records"
    }
}
Antwortfelder und Typen
NameTypBeschreibung
okbooleanErfolgskennzeichen; bei false error.code prüfen.
dataobjectVorgangsspezifisches Ergebnis; Beispiele sind synthetisch und dienen der Veranschaulichung.
data.statestringDatensatz-/Vorgangsstatus. accepted bedeutet nicht geliefert, completed keinen Verbindungstest.
data.delivery_state_at_acceptancestringVorgangsspezifischer Wert für delivery state at acceptance. Rückgabetyp beibehalten und Verhaltenshinweise beachten.
data.currencystringKontowährung der Transaktion: TRY oder USD.
data.totalstringGeldbetrag; Text-/Ganzzahldarstellung für Genauigkeit beibehalten.
data.total_minorintegerGanzzahl in kleinster Währungseinheit: 1000 bedeutet 10.00 TRY/USD.
data.checkout_group_idinteger|nullVorgangsspezifischer Wert für checkout group id. Rückgabetyp beibehalten und Verhaltenshinweise beachten.
data.ordersarrayVorgangsspezifischer Wert für orders. Rückgabetyp beibehalten und Verhaltenshinweise beachten.
data.orders[]objectVorgangsspezifischer Wert für orders. Rückgabetyp beibehalten und Verhaltenshinweise beachten.
data.orders[].idintegerZugehörige ARNPROXY-Datensatz-ID statt interner Anbieter-ID verwenden.
data.orders[].numberstringAngezeigte Bestellnummer, nicht mit Feldern für id austauschbar.
data.orders[].location_idintegerLokale Katalog-ID für Standort oder Produkttyp.
data.orders[].time_idintegerLokale Laufzeit-/GB-Plan-ID, keine Anzahl von Tagen oder GB.
data.orders[].quantityintegerGewählte oder bestellte Proxyanzahl.
data.orders[].totalstringGeldbetrag; Text-/Ganzzahldarstellung für Genauigkeit beibehalten.
data.accepted_atstringZeitstempel im vom API gelieferten Format; Beispieldaten sind synthetisch.
data.automatic_renewalbooleanVorgangsspezifischer Wert für automatic renewal. Rückgabetyp beibehalten und Verhaltenshinweise beachten.
data.replayedbooleanGespeichertes Ergebnis desselben Vorgangs, kein Beweis für neue Abbuchung/Aktion.
metaobjectMetadaten zu Anfragezuordnung und Datenquelle.
meta.request_idstringKennung dieser HTTP-Anfrage, kein Vorgangsschlüssel oder Bestell-ID.
meta.phasestringVorgangsspezifischer Wert für phase. Rückgabetyp beibehalten und Verhaltenshinweise beachten.
meta.sourcestringDatenquelle; lokale Datensätze und Live-Anbieterabfragen sind unterschiedliche Nachweise.

Fehlerantwort

HTTP 401 · INVALID_API_KEY
{
  "ok": false,
  "error": { "code": "INVALID_API_KEY" },
  "meta": { "request_id": "000000000000000000000001" }
}

Authentifizierung und Validierung können eine Anfrage vor der Ausführung ablehnen. Beachten Sie die Fehlerreferenz und bewahren Sie request_id für den Support auf. Senden Sie niemals Schlüssel oder Passwörter. Fehler & Limits →

Verhalten & wichtige Hinweise

  • IDs aus products/catalog übernehmen. quote-Zeilen enthalten nur location_id, time_id, quantity. purchase erfordert zusätzlich purpose_id=201 und gewählte subpurpose_id.
  • Mehrere Länder erzeugen getrennte Bestellungen und eine mehrzeilige Rechnung. Rabatte gelten je Land. accepted ist keine Lieferung; order_delivery und order_proxies verfolgen.
  • Timeout/5xx beweist keinen Schreibfehler. Ursprünglichen Idempotency-Key für den Status verwenden. Nicht mit neuem Schlüssel wiederholen; GET sendet die Änderung nicht erneut.
  • Verlangen Sie bei einer Standardbestellung keine zwei Auswahlen. Suchen Sie id=201 in catalog.purposes und zeigen Sie nur dessen children an. Bei purchase ist purpose_id die feste Ganzzahl 201; subpurpose_id ist die ID des gewählten Unterzwecks. Die Hierarchie bleibt für bestehende Integrationen erhalten.
  • Für Sonstiges senden Sie subpurpose_id=-1 und other_purpose mit 1–30 Zeichen. Bei anderen Auswahlen ist other_purpose nicht erforderlich. purpose_id bleibt 201.
  • Verwenden Sie bis zu 20 verschiedene location_id unter einem product_id. Jedes Land erzeugt eine eigene Bestellung; der verknüpfte Einkauf wird in einer Rechnung behandelt. Mengenrabatte werden pro Land berechnet.
Denselben Vorgang verfolgenKaufstatus prüfen →

Suche in der aktuellen Sprache. Schließen mit Esc