API reference

Your code can haggle too.

Open a private negotiation from your CRM. Answer offers from a script. Pull your deals into your own tools. Everything a seller does in the app, over HTTP.

Create a key in the app, under Settings, API keys. Then ask who you are. The answer says whether the selling endpoints will respond, and why not when they won't.

Part of Pro and Business. Machines can read openapi.json.

Base URL
https://hagg.in/api/v1
Your first call
export HAGGIN_KEY=hg_live_...

curl https://hagg.in/api/v1/me \
  -H "Authorization: Bearer $HAGGIN_KEY"

Authentication

Send the key as a bearer token on every request, over https. A key is yours, not your company's. It acts as you, and it sells for the company you belong to. Leave the company, or drop off Pro, and the selling endpoints stop answering. The key is kept.

Two kinds. Full access does anything you can do in the app. Read only can look and can't touch. You see a key once, when you create it. We store a hash, so we can't show it again. Lost it? Revoke it and make another.

Keep keys on a server. There are no CORS headers, on purpose. A key in a browser is a key in public.

Authenticated request
curl https://hagg.in/api/v1/selling/haggins \
  -H "Authorization: Bearer hg_live_4f9K...c2Xa"

Conventions

JSON in, JSON out, snake_case. Money is in minor units: 9900 is 99.00. Times are ISO 8601 in UTC. Ids are UUIDs.

One thing comes back under data. Lists add pagination, and take limit (up to 100) and offset.

Where a text is empty you get null, and you can send null back. The buyer's email is null until a deal is agreed and they said yes to sharing it. Same rule as the app and the webhooks.

The shapes are the ones your webhooks already send. What we push and what we answer use the same words.

A list
{
  "data": [
    { "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83", "title": "Acme, let's talk" }
  ],
  "pagination": { "limit": 50, "offset": 0, "total": 132, "has_more": true }
}

Errors

A refusal always looks the same. Branch on code, it is stable. message is for people and may change. Quote request_id when you write to us.

  • 400invalid_jsonThe body is not JSON.
  • 401invalid_api_keyNo key, a malformed one, or one that was revoked.
  • 403insufficient_accessA read only key tried to change something.
  • 403plan_requiredSelling through the API is part of Pro and Business.
  • 403no_organizationThe account has no company yet. Create it in the app.
  • 403mode_not_allowedThis key can't act on that side.
  • 403no_allowanceNo slot or allowance left to publish with.
  • 404not_foundIt doesn't exist, or it isn't yours. Same answer for both.
  • 409haggin_closedThe Haggin is not open anymore.
  • 409idempotency_in_progressThe first request with this Idempotency-Key is still running.
  • 413body_too_largeBodies can be up to 100 KB.
  • 422validation_errorSomething in the body or the query is wrong. fields says what.
  • 422request_rejectedValid, but not allowed right now. The message says why: not your move, already closed.
  • 422idempotency_key_reusedThat Idempotency-Key was used for a different request.
  • 429rate_limitedToo fast. Retry-After says when.
  • 500internal_errorOur fault. Safe to retry. Send us the request_id.
Response 422
{
  "error": {
    "code": "validation_error",
    "message": "Check the fields.",
    "fields": {
      "invited_email": ["Who is this Haggin for? Add their email."]
    },
    "request_id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21"
  }
}

Rate limits

Per key: 120 requests a minute, 30 of them writes. Writes are tighter because most of them email a real person. Every response says where you stand. Past the limit you get a 429 with Retry-After, in seconds.

A loop that counters every offer sends an email every time. Your buyers are people. Build accordingly.

Response 429
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1789995878
Retry-After: 23

Idempotent requests

Send an Idempotency-Key header on any write and a retry can't do it twice. The same key gets the same answer for 24 hours, marked Idempotent-Replayed: true. The same key with a different body is refused. Use a fresh UUID per action.

A retry that can't do it twice
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/accept \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Idempotency-Key: 6f2b7c1e-5a0d-4c58-9f0e-7d1f3f1c2a90"

Account

Who the key belongs to, and what it can do right now.

Who am I

GET/api/v1/me

Make this your first call. selling.enabled tells you whether the selling endpoints will answer, and why not when they won't.

Any keyRead only is enough

GET/api/v1/me
curl https://hagg.in/api/v1/me \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "user": {
      "id": "20c4729b-2aa9-44dd-adad-969d15524ad6",
      "email": "sam@acme.com",
      "name": "Sam Carter",
      "company": "Acme",
      "role": "Founder",
      "website": "https://acme.com",
      "channels": []
    },
    "key": {
      "id": "744a539e-68ff-42ac-8649-80ebacee2c35",
      "access": "full",
      "modes": [
        "selling"
      ]
    },
    "selling": {
      "enabled": true,
      "organization": {
        "id": "e9c77553-e95b-44ec-b2cc-086ef9420e4f",
        "name": "Acme",
        "slug": "acme",
        "website": "https://acme.com",
        "created_at": "2026-08-02T15:41:07.000Z"
      },
      "entitlements": {
        "plan": "pro",
        "plan_source": "subscription",
        "plan_expires_at": null,
        "subscription_status": "active",
        "max_live_haggins": 5,
        "live_haggins": 3,
        "available_slots": 2,
        "trial_remaining": 0,
        "unused_campaign_purchases": 0,
        "publish": {
          "allowed": true,
          "source": "plan",
          "max_duration_days": null,
          "permanent_allowed": true
        }
      }
    }
  }
}

Update your profile

PUT/api/v1/me/profile

What the other side of a negotiation sees about you. Replaces the whole profile.

Any keyFull access

Body

  • namestringRequired
  • companystring
  • rolestring
  • channelsarray of objects
    • formatenumRequired

      x_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastother

    • handlestringRequired
    • audienceinteger or null
  • websitestring
PUT/api/v1/me/profile
curl -X PUT https://hagg.in/api/v1/me/profile \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json"
Response 200
{
  "data": {
    "id": "20c4729b-2aa9-44dd-adad-969d15524ad6",
    "email": "sam@acme.com",
    "name": "Sam Carter",
    "company": "Acme",
    "role": "Founder",
    "website": "https://acme.com",
    "channels": []
  }
}

Your plan and what it allows

GET/api/v1/me/billing

Read only. publish.allowed says whether publishing a Haggin would go through right now. Paying and changing plan happen in the app.

Any keyRead only is enough

GET/api/v1/me/billing
curl https://hagg.in/api/v1/me/billing \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "plan": "pro",
    "plan_source": "subscription",
    "plan_expires_at": null,
    "subscription_status": "active",
    "max_live_haggins": 5,
    "live_haggins": 3,
    "available_slots": 2,
    "trial_remaining": 0,
    "unused_campaign_purchases": 0,
    "publish": {
      "allowed": true,
      "source": "plan",
      "max_duration_days": null,
      "permanent_allowed": true
    }
  }
}

The company you sell as

GET/api/v1/selling/organization

Pro and BusinessRead only is enough

GET/api/v1/selling/organization
curl https://hagg.in/api/v1/selling/organization \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "e9c77553-e95b-44ec-b2cc-086ef9420e4f",
    "name": "Acme",
    "slug": "acme",
    "website": "https://acme.com",
    "created_at": "2026-08-02T15:41:07.000Z"
  }
}

Rename it, or change its website

PUT/api/v1/selling/organization

Pro and BusinessFull access

Body

  • namestringRequired
  • websitestring
PUT/api/v1/selling/organization
curl -X PUT https://hagg.in/api/v1/selling/organization \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json"
Response 200
{
  "data": {
    "id": "e9c77553-e95b-44ec-b2cc-086ef9420e4f",
    "name": "Acme",
    "slug": "acme",
    "website": "https://acme.com",
    "created_at": "2026-08-02T15:41:07.000Z"
  }
}

Haggins

Your negotiation pages. A private negotiation is a Haggin made for one person.

List your Haggins

GET/api/v1/selling/haggins

Pro and BusinessRead only is enoughPaginated

Query parameters

  • status

    Only these.

    draftliveclosedexpired

  • kind

    Only these.

    publicprivate

  • limit

    1 to 100. Default 50.

  • offset

    Where to start. Default 0.

GET/api/v1/selling/haggins
curl https://hagg.in/api/v1/selling/haggins \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": [
    {
      "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
      "title": "Acme, let's talk",
      "slug": "p-5zbqmrkdrhmc",
      "status": "live",
      "kind": "private",
      "price_term_months": 12,
      "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
      "published_at": "2026-09-21T09:13:02.000Z",
      "expires_at": "2026-10-05T09:13:02.000Z",
      "closed_at": null,
      "intro": null,
      "invited_name": "Ana",
      "invited_email": "ana@bravolabs.com",
      "duration_days": 14,
      "on_expiry": "close",
      "created_at": "2026-09-21T09:12:44.000Z",
      "updated_at": "2026-09-21T09:13:02.000Z",
      "url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
      "products": [
        {
          "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
          "name": "Team plan",
          "standard_price_cents": 9900,
          "currency": "USD",
          "billing_period": "month",
          "pricing_model": "per_seat"
        }
      ],
      "negotiations": {
        "total": 1,
        "open": 1,
        "won": 0
      }
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "total": 1,
    "has_more": false
  }
}

Create a draft

POST/api/v1/selling/haggins

Nothing is public and no allowance is spent until you publish. For a private negotiation, send kind: "private" with the person's email: only that address can make an offer, and the link can't be guessed.

Pro and BusinessFull access

Body

  • goalenum

    get_customersconvert_trialsrecover_churntest_pricingrun_launchother

  • business_contextenum

    launchinglow_conversionlosing_on_pricemany_customersexperimentingother

  • titlestringRequired
  • introstring
  • kindenumRequired

    publicprivate

  • invited_namestring
  • invited_emailstring
  • productsarray of objectsRequired
    • idstring
    • namestringRequired
    • descriptionstring
    • info_urlstring
    • standard_price_centsintegerRequired
    • currencyenumRequired

      USDEURGBP

    • billing_periodenumRequired

      monthyearone_time

    • pricing_modelenumRequired

      flatper_seat

  • optionsarray of objectsRequired
    • typeenumRequired

      licensesannual_commitmentlifetimecontenttestimonialceo_callreferralcase_studycustom

    • keystring
    • labelstring
    • enabledbooleanRequired
    • hintstring
    • internal_notesstring
    • configobject
      • formatsarray of enums

        x_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastother

  • allow_custom_offersbooleanRequired
  • price_term_monthsinteger or null
  • duration_daysinteger or nullRequired
  • on_expiryenumRequired

    keep_openclose

  • deal_termsstring
POST/api/v1/selling/haggins
curl -X POST https://hagg.in/api/v1/selling/haggins \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Acme, let's talk",
    "kind": "private",
    "invited_name": "Ana",
    "invited_email": "ana@bravolabs.com",
    "products": [
      {
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat"
      }
    ],
    "options": [
      {
        "type": "licenses",
        "enabled": true
      },
      {
        "type": "annual_commitment",
        "enabled": true
      },
      {
        "type": "testimonial",
        "enabled": true,
        "internal_notes": "Only if they have an audience"
      }
    ],
    "allow_custom_offers": true,
    "price_term_months": 12,
    "duration_days": 14,
    "on_expiry": "close"
  }'
Response 201
{
  "data": {
    "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "title": "Acme, let's talk",
    "slug": "p-5zbqmrkdrhmc",
    "status": "draft",
    "kind": "private",
    "price_term_months": 12,
    "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
    "published_at": null,
    "expires_at": null,
    "closed_at": null,
    "intro": null,
    "invited_name": "Ana",
    "invited_email": "ana@bravolabs.com",
    "duration_days": 14,
    "on_expiry": "close",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:12:44.000Z",
    "url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "goal": null,
    "business_context": null,
    "allow_custom_offers": true,
    "deal_terms": null,
    "max_duration_days": null,
    "products": [
      {
        "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat",
        "description": null,
        "info_url": "https://acme.com/pricing",
        "negotiation_count": 1
      }
    ],
    "options": [
      {
        "type": "licenses",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "annual_commitment",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "testimonial",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": "Only if they have an audience",
        "config": {
          "formats": []
        }
      }
    ]
  }
}

One Haggin, with products and options

GET/api/v1/selling/haggins/{id}

What you get here can be sent back to PUT as it is.

Pro and BusinessRead only is enough

GET/api/v1/selling/haggins/{id}
curl https://hagg.in/api/v1/selling/haggins/$ID \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "title": "Acme, let's talk",
    "slug": "p-5zbqmrkdrhmc",
    "status": "live",
    "kind": "private",
    "price_term_months": 12,
    "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
    "published_at": "2026-09-21T09:13:02.000Z",
    "expires_at": "2026-10-05T09:13:02.000Z",
    "closed_at": null,
    "intro": null,
    "invited_name": "Ana",
    "invited_email": "ana@bravolabs.com",
    "duration_days": 14,
    "on_expiry": "close",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:13:02.000Z",
    "url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "goal": null,
    "business_context": null,
    "allow_custom_offers": true,
    "deal_terms": null,
    "max_duration_days": null,
    "products": [
      {
        "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat",
        "description": null,
        "info_url": "https://acme.com/pricing",
        "negotiation_count": 1
      }
    ],
    "options": [
      {
        "type": "licenses",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "annual_commitment",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "testimonial",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": "Only if they have an audience",
        "config": {
          "formats": []
        }
      }
    ]
  }
}

Update a Haggin

PUT/api/v1/selling/haggins/{id}

Replaces the editable part, products and options included: what you leave out of a list is removed. A product that already has offers keeps its name and price, and can't be removed. Read it, change it, send it back.

Pro and BusinessFull access

Body

  • titlestringRequired
  • introstring
  • productsarray of objectsRequired
    • idstring
    • namestringRequired
    • descriptionstring
    • info_urlstring
    • standard_price_centsintegerRequired
    • currencyenumRequired

      USDEURGBP

    • billing_periodenumRequired

      monthyearone_time

    • pricing_modelenumRequired

      flatper_seat

  • allow_custom_offersbooleanRequired
  • price_term_monthsinteger or null
  • on_expiryenumRequired

    keep_openclose

  • deal_termsstring
  • optionsarray of objectsRequired
    • typeenumRequired

      licensesannual_commitmentlifetimecontenttestimonialceo_callreferralcase_studycustom

    • keystring
    • labelstring
    • enabledbooleanRequired
    • hintstring
    • internal_notesstring
    • configobject
      • formatsarray of enums

        x_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastother

  • expires_atstring or null
PUT/api/v1/selling/haggins/{id}
curl -X PUT https://hagg.in/api/v1/selling/haggins/$ID \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json"
Response 200
{
  "data": {
    "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "title": "Acme, let's talk",
    "slug": "p-5zbqmrkdrhmc",
    "status": "live",
    "kind": "private",
    "price_term_months": 12,
    "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
    "published_at": "2026-09-21T09:13:02.000Z",
    "expires_at": "2026-10-05T09:13:02.000Z",
    "closed_at": null,
    "intro": null,
    "invited_name": "Ana",
    "invited_email": "ana@bravolabs.com",
    "duration_days": 14,
    "on_expiry": "close",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:13:02.000Z",
    "url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "goal": null,
    "business_context": null,
    "allow_custom_offers": true,
    "deal_terms": null,
    "max_duration_days": null,
    "products": [
      {
        "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat",
        "description": null,
        "info_url": "https://acme.com/pricing",
        "negotiation_count": 1
      }
    ],
    "options": [
      {
        "type": "licenses",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "annual_commitment",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "testimonial",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": "Only if they have an audience",
        "config": {
          "formats": []
        }
      }
    ]
  }
}

Go live

POST/api/v1/selling/haggins/{id}/publish

Spends a slot or an allowance. Refused with no_allowance when there is none.

Pro and BusinessFull accessEmails your team

POST/api/v1/selling/haggins/{id}/publish
curl -X POST https://hagg.in/api/v1/selling/haggins/$ID/publish \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "title": "Acme, let's talk",
    "slug": "p-5zbqmrkdrhmc",
    "status": "live",
    "kind": "private",
    "price_term_months": 12,
    "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
    "published_at": "2026-09-21T09:13:02.000Z",
    "expires_at": "2026-10-05T09:13:02.000Z",
    "closed_at": null,
    "intro": null,
    "invited_name": "Ana",
    "invited_email": "ana@bravolabs.com",
    "duration_days": 14,
    "on_expiry": "close",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:13:02.000Z",
    "url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "goal": null,
    "business_context": null,
    "allow_custom_offers": true,
    "deal_terms": null,
    "max_duration_days": null,
    "products": [
      {
        "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat",
        "description": null,
        "info_url": "https://acme.com/pricing",
        "negotiation_count": 1
      }
    ],
    "options": [
      {
        "type": "licenses",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "annual_commitment",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "testimonial",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": "Only if they have an audience",
        "config": {
          "formats": []
        }
      }
    ]
  }
}

Close it

POST/api/v1/selling/haggins/{id}/close

For good. With on_expiry: "close" the open negotiations close too and their buyers are told. Otherwise they carry on.

Pro and BusinessFull accessEmails your team

POST/api/v1/selling/haggins/{id}/close
curl -X POST https://hagg.in/api/v1/selling/haggins/$ID/close \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "title": "Acme, let's talk",
    "slug": "p-5zbqmrkdrhmc",
    "status": "closed",
    "kind": "private",
    "price_term_months": 12,
    "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
    "published_at": "2026-09-21T09:13:02.000Z",
    "expires_at": "2026-10-05T09:13:02.000Z",
    "closed_at": "2026-09-21T11:02:37.000Z",
    "intro": null,
    "invited_name": "Ana",
    "invited_email": "ana@bravolabs.com",
    "duration_days": 14,
    "on_expiry": "close",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:13:02.000Z",
    "url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
    "goal": null,
    "business_context": null,
    "allow_custom_offers": true,
    "deal_terms": null,
    "max_duration_days": null,
    "products": [
      {
        "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat",
        "description": null,
        "info_url": "https://acme.com/pricing",
        "negotiation_count": 1
      }
    ],
    "options": [
      {
        "type": "licenses",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "annual_commitment",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": null,
        "config": {
          "formats": []
        }
      },
      {
        "type": "testimonial",
        "key": null,
        "label": null,
        "enabled": true,
        "hint": null,
        "internal_notes": "Only if they have an audience",
        "config": {
          "formats": []
        }
      }
    ]
  }
}

Negotiations

The inbox. Read offers, then accept, counter or pass.

The inbox

GET/api/v1/selling/negotiations

Filtering and sorting run over the 500 most recently active negotiations that match view, haggin_id and product_id. Narrow with those first. The buyer's email is not in the list: it is on the negotiation and on the deal, once you may have it.

Pro and BusinessRead only is enoughPaginated

Query parameters

  • view

    attention is what waits on you. Default all.

    attentionopenwaitingacceptedclosedall

  • sort

    Default activity.

    bestnewestoldesthighestratiolicensespotentialactivity

  • haggin_id

    One Haggin.

  • product_id

    One of that Haggin's products.

  • min_ratio

    Offer divided by standard price, at least this. 0.5 is half price.

  • max_ratio

    Below this.

  • min_licenses

    At least this many licenses.

  • item

    Offers that include this extra.

    contenttestimonialceo_callreferralcase_studylicensesannual_commitmentlifetime

  • q

    Buyer, company, Haggin or product contains this.

  • limit

    1 to 100. Default 50.

  • offset

    Where to start. Default 0.

GET/api/v1/selling/negotiations
curl https://hagg.in/api/v1/selling/negotiations \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": [
    {
      "id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
      "status": "waiting_for_buyer",
      "url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
      "closed_by": null,
      "close_reason": null,
      "close_detail": null,
      "expires_at": null,
      "created_at": "2026-09-21T10:04:11.000Z",
      "last_activity_at": "2026-09-21T10:31:50.000Z",
      "closed_at": null,
      "haggin": {
        "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
        "title": "Acme, let's talk",
        "slug": "p-5zbqmrkdrhmc",
        "kind": "private",
        "status": "live"
      },
      "product": {
        "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat"
      },
      "buyer": {
        "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
        "name": "Ana Ruiz",
        "company": "Bravo Labs",
        "role": "CEO",
        "website": "https://bravolabs.com",
        "channels": [
          {
            "format": "x_post",
            "handle": "@anaruiz",
            "audience": 38000
          }
        ]
      },
      "offer": {
        "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
        "seq": 2,
        "author": "seller",
        "status": "pending",
        "amount_cents": 7900,
        "currency": "USD",
        "billing_period": "year",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": true,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:31:50.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": null
          }
        ]
      },
      "interpretation": {
        "ratio": 0.8,
        "potential": "high"
      },
      "deal": null
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "total": 1,
    "has_more": false
  }
}

One negotiation, with every offer

GET/api/v1/selling/negotiations/{id}

Pro and BusinessRead only is enough

GET/api/v1/selling/negotiations/{id}
curl https://hagg.in/api/v1/selling/negotiations/$ID \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "status": "waiting_for_buyer",
    "url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "closed_by": null,
    "close_reason": null,
    "close_detail": null,
    "expires_at": null,
    "created_at": "2026-09-21T10:04:11.000Z",
    "last_activity_at": "2026-09-21T10:31:50.000Z",
    "closed_at": null,
    "haggin": {
      "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
      "title": "Acme, let's talk",
      "slug": "p-5zbqmrkdrhmc",
      "status": "live",
      "kind": "private",
      "price_term_months": 12,
      "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
      "published_at": "2026-09-21T09:13:02.000Z",
      "expires_at": "2026-10-05T09:13:02.000Z",
      "closed_at": null
    },
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": null
    },
    "offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "pending",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "offers": [
      {
        "id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
        "seq": 1,
        "author": "buyer",
        "status": "countered",
        "amount_cents": 5900,
        "currency": "USD",
        "billing_period": "month",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": false,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:04:11.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": "Happy to record one"
          }
        ]
      },
      {
        "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
        "seq": 2,
        "author": "seller",
        "status": "pending",
        "amount_cents": 7900,
        "currency": "USD",
        "billing_period": "year",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": true,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:31:50.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": null
          }
        ]
      }
    ],
    "deal": null
  }
}

Accept the current offer

POST/api/v1/selling/negotiations/{id}/accept

Creates the deal. It comes back in deal.

Pro and BusinessFull accessEmails the buyer

POST/api/v1/selling/negotiations/{id}/accept
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/accept \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "status": "accepted",
    "url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "closed_by": null,
    "close_reason": null,
    "close_detail": null,
    "expires_at": null,
    "created_at": "2026-09-21T10:04:11.000Z",
    "last_activity_at": "2026-09-21T11:02:37.000Z",
    "closed_at": "2026-09-21T11:02:37.000Z",
    "haggin": {
      "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
      "title": "Acme, let's talk",
      "slug": "p-5zbqmrkdrhmc",
      "status": "live",
      "kind": "private",
      "price_term_months": 12,
      "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
      "published_at": "2026-09-21T09:13:02.000Z",
      "expires_at": "2026-10-05T09:13:02.000Z",
      "closed_at": null
    },
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": null
    },
    "offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "pending",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "offers": [
      {
        "id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
        "seq": 1,
        "author": "buyer",
        "status": "countered",
        "amount_cents": 5900,
        "currency": "USD",
        "billing_period": "month",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": false,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:04:11.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": "Happy to record one"
          }
        ]
      },
      {
        "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
        "seq": 2,
        "author": "seller",
        "status": "pending",
        "amount_cents": 7900,
        "currency": "USD",
        "billing_period": "year",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": true,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:31:50.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": null
          }
        ]
      }
    ],
    "deal": {
      "id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
      "status": "agreed",
      "payment_status": "pending",
      "payment_link_url": null,
      "terms_version": "v1",
      "agreed_at": "2026-09-21T11:02:37.000Z",
      "won_at": null,
      "paid_at": null,
      "url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e"
    }
  }
}

Counter

POST/api/v1/selling/negotiations/{id}/counter

Same shape as an offer. Extras must be ones the Haggin has switched on.

Pro and BusinessFull accessEmails the buyer

Body

  • amount_centsintegerRequired
  • billing_periodenumRequired

    monthyearone_time

  • licensesinteger or null
  • is_lifetimeboolean
  • annual_commitmentboolean
  • price_term_monthsinteger or null
  • custom_termsstring
  • itemsarray of objects
    • partyenum

      buyerseller

    • typeenumRequired

      licensesannual_commitmentlifetimecontenttestimonialceo_callreferralcase_studycustom

    • formatenum

      x_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastother

    • keystring
    • detailstring
POST/api/v1/selling/negotiations/{id}/counter
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/counter \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount_cents": 7900,
    "billing_period": "month",
    "licenses": 10,
    "annual_commitment": true,
    "items": [
      {
        "party": "buyer",
        "type": "testimonial"
      }
    ]
  }'
Response 200
{
  "data": {
    "id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "status": "waiting_for_buyer",
    "url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "closed_by": null,
    "close_reason": null,
    "close_detail": null,
    "expires_at": null,
    "created_at": "2026-09-21T10:04:11.000Z",
    "last_activity_at": "2026-09-21T10:31:50.000Z",
    "closed_at": null,
    "haggin": {
      "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
      "title": "Acme, let's talk",
      "slug": "p-5zbqmrkdrhmc",
      "status": "live",
      "kind": "private",
      "price_term_months": 12,
      "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
      "published_at": "2026-09-21T09:13:02.000Z",
      "expires_at": "2026-10-05T09:13:02.000Z",
      "closed_at": null
    },
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": null
    },
    "offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "pending",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "offers": [
      {
        "id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
        "seq": 1,
        "author": "buyer",
        "status": "countered",
        "amount_cents": 5900,
        "currency": "USD",
        "billing_period": "month",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": false,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:04:11.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": "Happy to record one"
          }
        ]
      },
      {
        "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
        "seq": 2,
        "author": "seller",
        "status": "pending",
        "amount_cents": 7900,
        "currency": "USD",
        "billing_period": "year",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": true,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:31:50.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": null
          }
        ]
      }
    ],
    "deal": null
  }
}

Pass on the current offer

POST/api/v1/selling/negotiations/{id}/reject

Ends the negotiation. Only when it is your move.

Pro and BusinessFull accessEmails the buyer

Body

  • reasonenum

    too_lownot_our_audiencespam

POST/api/v1/selling/negotiations/{id}/reject
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/reject \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json"
Response 200
{
  "data": {
    "id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "status": "rejected",
    "url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "closed_by": "seller",
    "close_reason": "rejected",
    "close_detail": null,
    "expires_at": null,
    "created_at": "2026-09-21T10:04:11.000Z",
    "last_activity_at": "2026-09-21T10:31:50.000Z",
    "closed_at": "2026-09-21T10:31:50.000Z",
    "haggin": {
      "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
      "title": "Acme, let's talk",
      "slug": "p-5zbqmrkdrhmc",
      "status": "live",
      "kind": "private",
      "price_term_months": 12,
      "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
      "published_at": "2026-09-21T09:13:02.000Z",
      "expires_at": "2026-10-05T09:13:02.000Z",
      "closed_at": null
    },
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": null
    },
    "offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "pending",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "offers": [
      {
        "id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
        "seq": 1,
        "author": "buyer",
        "status": "countered",
        "amount_cents": 5900,
        "currency": "USD",
        "billing_period": "month",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": false,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:04:11.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": "Happy to record one"
          }
        ]
      },
      {
        "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
        "seq": 2,
        "author": "seller",
        "status": "pending",
        "amount_cents": 7900,
        "currency": "USD",
        "billing_period": "year",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": true,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:31:50.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": null
          }
        ]
      }
    ],
    "deal": null
  }
}

Walk away

POST/api/v1/selling/negotiations/{id}/close

Ends an open negotiation, whoever's move it is.

Pro and BusinessFull accessEmails the buyer

Body

  • reasonenum

    too_lownot_our_audiencespam

POST/api/v1/selling/negotiations/{id}/close
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/close \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json"
Response 200
{
  "data": {
    "id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "status": "closed",
    "url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "closed_by": "seller",
    "close_reason": "closed_by_seller",
    "close_detail": null,
    "expires_at": null,
    "created_at": "2026-09-21T10:04:11.000Z",
    "last_activity_at": "2026-09-21T10:31:50.000Z",
    "closed_at": "2026-09-21T10:31:50.000Z",
    "haggin": {
      "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
      "title": "Acme, let's talk",
      "slug": "p-5zbqmrkdrhmc",
      "status": "live",
      "kind": "private",
      "price_term_months": 12,
      "public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
      "published_at": "2026-09-21T09:13:02.000Z",
      "expires_at": "2026-10-05T09:13:02.000Z",
      "closed_at": null
    },
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": null
    },
    "offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "pending",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "offers": [
      {
        "id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
        "seq": 1,
        "author": "buyer",
        "status": "countered",
        "amount_cents": 5900,
        "currency": "USD",
        "billing_period": "month",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": false,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:04:11.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": "Happy to record one"
          }
        ]
      },
      {
        "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
        "seq": 2,
        "author": "seller",
        "status": "pending",
        "amount_cents": 7900,
        "currency": "USD",
        "billing_period": "year",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": true,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:31:50.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": null
          }
        ]
      }
    ],
    "deal": null
  }
}

Pass on many at once

POST/api/v1/selling/negotiations/bulk-reject

Up to 200. Ones that are not yours, or not waiting on you, are skipped, not failed.

Pro and BusinessFull accessEmails the buyer

Body

  • negotiation_idsarray of stringsRequired
POST/api/v1/selling/negotiations/bulk-reject
curl -X POST https://hagg.in/api/v1/selling/negotiations/bulk-reject \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "negotiation_ids": [
      "…",
      "…"
    ]
  }'
Response 200
{
  "data": {
    "rejected": 12,
    "skipped": 1
  }
}

Deals

What happens after yes: the payment link, the terms, the handover.

List your deals

GET/api/v1/selling/deals

agreed ones are waiting for your payment link.

Pro and BusinessRead only is enoughPaginated

Query parameters

  • status

    Only these.

    agreedpayment_readywon

  • limit

    1 to 100. Default 50.

  • offset

    Where to start. Default 0.

GET/api/v1/selling/deals
curl https://hagg.in/api/v1/selling/deals \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": [
    {
      "id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
      "status": "payment_ready",
      "payment_status": "pending",
      "payment_link_url": "https://buy.stripe.com/aEU5kF",
      "terms_version": "v1",
      "agreed_at": "2026-09-21T11:02:37.000Z",
      "won_at": null,
      "paid_at": null,
      "url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
      "negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
      "haggin": {
        "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
        "title": "Acme, let's talk",
        "slug": "p-5zbqmrkdrhmc"
      },
      "product": {
        "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
        "name": "Team plan",
        "standard_price_cents": 9900,
        "currency": "USD",
        "billing_period": "month",
        "pricing_model": "per_seat"
      },
      "buyer": {
        "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
        "name": "Ana Ruiz",
        "company": "Bravo Labs",
        "role": "CEO",
        "website": "https://bravolabs.com",
        "channels": [
          {
            "format": "x_post",
            "handle": "@anaruiz",
            "audience": 38000
          }
        ],
        "email": "ana@bravolabs.com"
      },
      "accepted_offer": {
        "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
        "seq": 2,
        "author": "seller",
        "status": "accepted",
        "amount_cents": 7900,
        "currency": "USD",
        "billing_period": "year",
        "licenses": 10,
        "is_lifetime": false,
        "annual_commitment": true,
        "price_term_months": 12,
        "custom_terms": null,
        "standard_price_cents": 9900,
        "created_at": "2026-09-21T10:31:50.000Z",
        "items": [
          {
            "party": "buyer",
            "type": "testimonial",
            "format": null,
            "key": null,
            "label": null,
            "detail": null
          }
        ]
      }
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "total": 1,
    "has_more": false
  }
}

One deal, with its terms

GET/api/v1/selling/deals/{id}

Pro and BusinessRead only is enough

GET/api/v1/selling/deals/{id}
curl https://hagg.in/api/v1/selling/deals/$ID \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
    "status": "payment_ready",
    "payment_status": "pending",
    "payment_link_url": "https://buy.stripe.com/aEU5kF",
    "terms_version": "v1",
    "agreed_at": "2026-09-21T11:02:37.000Z",
    "won_at": null,
    "paid_at": null,
    "url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
    "negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "payment_provider": "manual_link",
    "payment_link_added_at": "2026-09-21T11:20:03.000Z",
    "terms_text": "This deal is between the buyer and the seller. The agreed price, volume and any extras listed above are the full terms of the deal.",
    "instructions": null,
    "instructions_sent_at": null,
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": "ana@bravolabs.com"
    },
    "accepted_offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "accepted",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "terms_acceptance": null
  }
}

Tell the buyer what happens next

POST/api/v1/selling/deals/{id}/instructions

Only once the deal is won. Every call sends the email again, with replies going to you.

Pro and BusinessFull accessEmails the buyer

Body

  • instructionsstringRequired
POST/api/v1/selling/deals/{id}/instructions
curl -X POST https://hagg.in/api/v1/selling/deals/$ID/instructions \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json"
Response 200
{
  "data": {
    "id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
    "status": "won",
    "payment_status": "pending",
    "payment_link_url": "https://buy.stripe.com/aEU5kF",
    "terms_version": "v1",
    "agreed_at": "2026-09-21T11:02:37.000Z",
    "won_at": "2026-09-21T12:40:18.000Z",
    "paid_at": null,
    "url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
    "negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "payment_provider": "manual_link",
    "payment_link_added_at": "2026-09-21T11:20:03.000Z",
    "terms_text": "This deal is between the buyer and the seller. The agreed price, volume and any extras listed above are the full terms of the deal.",
    "instructions": "Your seats are live. Log in and invite your team.",
    "instructions_sent_at": "2026-09-21T12:55:00.000Z",
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": "ana@bravolabs.com"
    },
    "accepted_offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "accepted",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "terms_acceptance": {
      "accepted_at": "2026-09-21T12:40:18.000Z",
      "terms_version": "v1"
    }
  }
}

Mark it paid, or not

POST/api/v1/selling/deals/{id}/paid

Your own bookkeeping: you say when the money landed.

Pro and BusinessFull access

Body

  • paidbooleanRequired
POST/api/v1/selling/deals/{id}/paid
curl -X POST https://hagg.in/api/v1/selling/deals/$ID/paid \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json"
Response 200
{
  "data": {
    "id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
    "status": "won",
    "payment_status": "paid",
    "payment_link_url": "https://buy.stripe.com/aEU5kF",
    "terms_version": "v1",
    "agreed_at": "2026-09-21T11:02:37.000Z",
    "won_at": "2026-09-21T12:40:18.000Z",
    "paid_at": "2026-09-22T08:03:00.000Z",
    "url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
    "negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
    "payment_provider": "manual_link",
    "payment_link_added_at": "2026-09-21T11:20:03.000Z",
    "terms_text": "This deal is between the buyer and the seller. The agreed price, volume and any extras listed above are the full terms of the deal.",
    "instructions": null,
    "instructions_sent_at": null,
    "product": {
      "id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
      "name": "Team plan",
      "standard_price_cents": 9900,
      "currency": "USD",
      "billing_period": "month",
      "pricing_model": "per_seat"
    },
    "buyer": {
      "id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
      "name": "Ana Ruiz",
      "company": "Bravo Labs",
      "role": "CEO",
      "website": "https://bravolabs.com",
      "channels": [
        {
          "format": "x_post",
          "handle": "@anaruiz",
          "audience": 38000
        }
      ],
      "email": "ana@bravolabs.com"
    },
    "accepted_offer": {
      "id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
      "seq": 2,
      "author": "seller",
      "status": "accepted",
      "amount_cents": 7900,
      "currency": "USD",
      "billing_period": "year",
      "licenses": 10,
      "is_lifetime": false,
      "annual_commitment": true,
      "price_term_months": 12,
      "custom_terms": null,
      "standard_price_cents": 9900,
      "created_at": "2026-09-21T10:31:50.000Z",
      "items": [
        {
          "party": "buyer",
          "type": "testimonial",
          "format": null,
          "key": null,
          "label": null,
          "detail": null
        }
      ]
    },
    "terms_acceptance": {
      "accepted_at": "2026-09-21T12:40:18.000Z",
      "terms_version": "v1"
    }
  }
}

Webhooks

Where HAGGIN tells you things. Set it up here, or in the app.

Your endpoint

GET/api/v1/selling/webhook-endpoint

One per company. The signing secret is shown to full access keys only.

Pro and BusinessRead only is enough

GET/api/v1/selling/webhook-endpoint
curl https://hagg.in/api/v1/selling/webhook-endpoint \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "cccfc047-c04e-4c76-a19a-271562480289",
    "url": "https://hooks.acme.com/haggin",
    "enabled": true,
    "events": [
      "offer.received",
      "deal.won"
    ],
    "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw",
    "disabled_reason": null,
    "consecutive_failures": 0,
    "last_delivery_at": "2026-09-21T10:31:50.000Z",
    "last_delivery_status": "delivered",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:12:44.000Z"
  }
}

Set your endpoint

PUT/api/v1/selling/webhook-endpoint

https, public address. An empty events list means every event, including ones added later.

Pro and BusinessFull access

Body

  • urlstringRequired
  • enabledboolean
  • eventsarray of strings
PUT/api/v1/selling/webhook-endpoint
curl -X PUT https://hagg.in/api/v1/selling/webhook-endpoint \
  -H "Authorization: Bearer $HAGGIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hooks.acme.com/haggin",
    "enabled": true,
    "events": [
      "offer.received",
      "deal.won"
    ]
  }'
Response 200
{
  "data": {
    "id": "cccfc047-c04e-4c76-a19a-271562480289",
    "url": "https://hooks.acme.com/haggin",
    "enabled": true,
    "events": [
      "offer.received",
      "deal.won"
    ],
    "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw",
    "disabled_reason": null,
    "consecutive_failures": 0,
    "last_delivery_at": "2026-09-21T10:31:50.000Z",
    "last_delivery_status": "delivered",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:12:44.000Z"
  }
}

New signing secret

POST/api/v1/selling/webhook-endpoint/rotate-secret

The old one stops validating at once.

Pro and BusinessFull access

POST/api/v1/selling/webhook-endpoint/rotate-secret
curl -X POST https://hagg.in/api/v1/selling/webhook-endpoint/rotate-secret \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "cccfc047-c04e-4c76-a19a-271562480289",
    "url": "https://hooks.acme.com/haggin",
    "enabled": true,
    "events": [
      "offer.received",
      "deal.won"
    ],
    "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw",
    "disabled_reason": null,
    "consecutive_failures": 0,
    "last_delivery_at": "2026-09-21T10:31:50.000Z",
    "last_delivery_status": "delivered",
    "created_at": "2026-09-21T09:12:44.000Z",
    "updated_at": "2026-09-21T09:12:44.000Z"
  }
}

Send a ping

POST/api/v1/selling/webhook-endpoint/test

Pro and BusinessFull access

POST/api/v1/selling/webhook-endpoint/test
curl -X POST https://hagg.in/api/v1/selling/webhook-endpoint/test \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
    "event_type": "ping",
    "status": "delivered",
    "attempts": 1,
    "next_attempt_at": null,
    "last_attempt_at": "2026-09-21T10:31:50.000Z",
    "response_status": 200,
    "response_body": "ok",
    "error": null,
    "delivered_at": "2026-09-21T10:31:50.000Z",
    "created_at": "2026-09-21T10:31:50.000Z",
    "payload": {
      "id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
      "type": "ping",
      "created_at": "2026-09-21T10:31:50.000Z",
      "data": {
        "organization": "Acme"
      }
    }
  }
}

Recent deliveries

GET/api/v1/selling/webhook-deliveries

The latest 50, with what your endpoint answered.

Pro and BusinessRead only is enoughPaginated

Query parameters

  • limit

    1 to 100. Default 50.

  • offset

    Where to start. Default 0.

GET/api/v1/selling/webhook-deliveries
curl https://hagg.in/api/v1/selling/webhook-deliveries \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": [
    {
      "id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
      "event_type": "ping",
      "status": "delivered",
      "attempts": 1,
      "next_attempt_at": null,
      "last_attempt_at": "2026-09-21T10:31:50.000Z",
      "response_status": 200,
      "response_body": "ok",
      "error": null,
      "delivered_at": "2026-09-21T10:31:50.000Z",
      "created_at": "2026-09-21T10:31:50.000Z",
      "payload": {
        "id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
        "type": "ping",
        "created_at": "2026-09-21T10:31:50.000Z",
        "data": {
          "organization": "Acme"
        }
      }
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "total": 1,
    "has_more": false
  }
}

Try one again, now

POST/api/v1/selling/webhook-deliveries/{id}/retry

Pro and BusinessFull access

POST/api/v1/selling/webhook-deliveries/{id}/retry
curl -X POST https://hagg.in/api/v1/selling/webhook-deliveries/$ID/retry \
  -H "Authorization: Bearer $HAGGIN_KEY"
Response 200
{
  "data": {
    "result": "delivered"
  }
}