Skip to content

Show one payment link with allocations

Open .md

GET/v2/api/store/{team_slug}/v2/payment_link/{hash_id}

v2Operation ID v2_public_payment_link_show

A payment link records how payments already received on a sales order are split across its invoices (the web app calls this a payment allocation). It is not a URL or payment page your customer opens to pay, and it moves no money.

Returns the link with total (the sum of its allocations) and allocated_transactions: one row per allocation, with the invoice_id, the payment (transaction_id), the allocated total, the payment's unallocated_amount and state existing.

Permission

Any member of the team. No sales order permission is checked.

Path parameters

  • team_slugstringrequired

    Your team slug, shown as Team ID next to your API key in Profile.

    • Example your-team
  • hash_idstringrequired

    The payment link's hash id. Hash ids only: a unique key or a document number gives 404.

    • Example IirNDCwiaCVSKx

Request body

This operation takes no request body.

Response

200Successful response.

  • dataobjectrequired
    Child fields (7)
    • allocated_transactionsarray of objectsrequired

      One row per allocation.

      Fields of each item (6)
      • statestring
        • Always "existing"
      • idstring

        The allocation. Send it in allocated_transactions[].id to update or delete it.

      • The invoice it pays.

      • totaldecimal pair

        The allocated amount (usually 3 decimal places; a finer stored amount comes back with a larger dp). A decimal pair: the amount is value ÷ 10^dp ({ "value": 1250, "dp": 2 } is 12.50). Read dp every time: it can differ between fields and records.

      • The payment.

      • unallocated_amountdecimal pair

        What the payment still has to allocate (usually 3 decimal places; a finer stored amount comes back with a larger dp). A decimal pair: the amount is value ÷ 10^dp ({ "value": 1250, "dp": 2 } is 12.50). Read dp every time: it can differ between fields and records.

    • created_atstring (date-time)required
    • idstringrequired

      The payment link.

    • order_idstringrequired

      The sales order.

    • totaldecimal pairrequired

      The sum of its allocations. A decimal pair: the amount is value ÷ 10^dp ({ "value": 175000, "dp": 4 } is 17.50). Kept at 4 decimal places; { "value": 0, "dp": 0 } when the link has no allocations. Read dp every time.

    • updated_atstring (date-time)required
    • notestring | null
  • statusintegerrequired
  • successbooleanrequired

Errors

  • 401The API key is missing or wrong (unauthenticated).

  • 403You are not allowed to do this. api_access_not_in_plan: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only {"message": "Insufficient Permission"}. Other refusals use the error envelope, with unauthorized or user_is_not_authorized.

  • 404Not found. page_not_found: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's. code: null, with a message that starts "No query results for": there is no record with that id.

    When
    The link isn't your team's.
    Fix
    Use an id from List the payment links of a sales order.
  • 422The request was refused and changed nothing. validation_failed lists what to fix in error.fields; other codes name a business rule, explained in error.message. A few checks answer with only {"message": "..."}. An operation that calls another service (a payment provider, a carrier, an accounting app) can answer connect_timeout ("Please retry again") when that service does not answer in time: the change may or may not have happened there, so read the record back before you retry.

    When
    The order came from Shopify and was deleted there (shopify_order_deleted_externally).
    Fix
    Only local cleanup is allowed on that order.